* add Helm chart known issues/future work: - SSO is unsupported - S3/Minio/GCS is unsupported - Swift is unsupported - WEB_DOMAIN is unsupported - Tor is unsupported * helm: clarify how LOCAL_DOMAIN is set * helm: add chart description * helm: make DB_POOL and Sidekiq concurrency configurable * helm: only enforce pod affinity when using ReadWriteOnce * helm: clarify compatibility * helm: clean up application variables * helm: add job to create initial admintags/v3.2.0rc1
| @@ -43,6 +43,11 @@ postgres | |||
| redis | |||
| elasticsearch | |||
| # ignore Helm lockfile, dependency charts, and local values file | |||
| chart/Chart.lock | |||
| chart/charts/*.tgz | |||
| chart/values.yaml | |||
| # Ignore Apple files | |||
| .DS_Store | |||
| @@ -0,0 +1,23 @@ | |||
| # Patterns to ignore when building packages. | |||
| # This supports shell glob matching, relative path matching, and | |||
| # negation (prefixed with !). Only one pattern per line. | |||
| .DS_Store | |||
| # Common VCS dirs | |||
| .git/ | |||
| .gitignore | |||
| .bzr/ | |||
| .bzrignore | |||
| .hg/ | |||
| .hgignore | |||
| .svn/ | |||
| # Common backup files | |||
| *.swp | |||
| *.bak | |||
| *.tmp | |||
| *.orig | |||
| *~ | |||
| # Various IDEs | |||
| .project | |||
| .idea/ | |||
| *.tmproj | |||
| .vscode/ | |||
| @@ -0,0 +1,35 @@ | |||
| apiVersion: v2 | |||
| name: mastodon | |||
| description: Mastodon is a free, open-source social network server based on ActivityPub. | |||
| # A chart can be either an 'application' or a 'library' chart. | |||
| # | |||
| # Application charts are a collection of templates that can be packaged into versioned archives | |||
| # to be deployed. | |||
| # | |||
| # Library charts provide useful utilities or functions for the chart developer. They're included as | |||
| # a dependency of application charts to inject those utilities and functions into the rendering | |||
| # pipeline. Library charts do not define any templates and therefore cannot be deployed. | |||
| type: application | |||
| # This is the chart version. This version number should be incremented each time you make changes | |||
| # to the chart and its templates, including the app version. | |||
| # Versions are expected to follow Semantic Versioning (https://semver.org/) | |||
| version: 0.1.0 | |||
| # This is the version number of the application being deployed. This version number should be | |||
| # incremented each time you make changes to the application. Versions are not expected to | |||
| # follow Semantic Versioning. They should reflect the version the application is using. | |||
| appVersion: 3.1.4 | |||
| dependencies: | |||
| - name: elasticsearch | |||
| version: "12.x.x" | |||
| repository: https://charts.bitnami.com/bitnami | |||
| condition: elasticsearch.enabled | |||
| - name: postgresql | |||
| version: "8.x.x" | |||
| repository: https://charts.bitnami.com/bitnami | |||
| - name: redis | |||
| version: "10.x.x" | |||
| repository: https://charts.bitnami.com/bitnami | |||
| @@ -0,0 +1,44 @@ | |||
| # Introduction | |||
| This is a [Helm](https://helm.sh/) chart for installing Mastodon into a | |||
| Kubernetes cluster. The basic usage is: | |||
| ``` | |||
| cp values.yaml.template values.yaml | |||
| edit values.yaml # configure required settings | |||
| helm dep update | |||
| helm upgrade --install my-mastodon ./ | |||
| ``` | |||
| This chart has been tested on Helm 3.0.1 and above. | |||
| # Configuration | |||
| The variables that _must_ be configured are: | |||
| - `ingress.hostname`; even if you aren’t using an Ingress, this value is used to | |||
| set `LOCAL_DOMAIN`. | |||
| - password and keys in the `secrets`, `postgresql`, and `redis` groups; if | |||
| left blank, some of those values will be autogenerated, but will not persist | |||
| across upgrades. | |||
| - SMTP settings for your mailer in the `smtp` group. | |||
| # Missing features | |||
| Currently this chart does _not_ support: | |||
| - Hidden services | |||
| - S3/Minio/GCS | |||
| - Single Sign-On | |||
| - Swift | |||
| - configurations using `WEB_DOMAIN` | |||
| # Upgrading | |||
| Because database migrations are managed as a Job separate from the Rails and | |||
| Sidekiq deployments, it’s possible they will occur in the wrong order. After | |||
| upgrading Mastodon versions, it may sometimes be necessary to manually delete | |||
| the Rails and Sidekiq pods so that they are recreated against the latest | |||
| migration. | |||
| @@ -0,0 +1,21 @@ | |||
| 1. Get the application URL by running these commands: | |||
| {{- if .Values.ingress.enabled }} | |||
| {{- range $host := .Values.ingress.hosts }} | |||
| {{- range .paths }} | |||
| http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ . }} | |||
| {{- end }} | |||
| {{- end }} | |||
| {{- else if contains "NodePort" .Values.service.type }} | |||
| export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "mastodon.fullname" . }}) | |||
| export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") | |||
| echo http://$NODE_IP:$NODE_PORT | |||
| {{- else if contains "LoadBalancer" .Values.service.type }} | |||
| NOTE: It may take a few minutes for the LoadBalancer IP to be available. | |||
| You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "mastodon.fullname" . }}' | |||
| export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "mastodon.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") | |||
| echo http://$SERVICE_IP:{{ .Values.service.port }} | |||
| {{- else if contains "ClusterIP" .Values.service.type }} | |||
| export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "mastodon.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") | |||
| echo "Visit http://127.0.0.1:8080 to use your application" | |||
| kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:80 | |||
| {{- end }} | |||
| @@ -0,0 +1,79 @@ | |||
| {{/* vim: set filetype=mustache: */}} | |||
| {{/* | |||
| Expand the name of the chart. | |||
| */}} | |||
| {{- define "mastodon.name" -}} | |||
| {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} | |||
| {{- end }} | |||
| {{/* | |||
| Create a default fully qualified app name. | |||
| We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). | |||
| If release name contains chart name it will be used as a full name. | |||
| */}} | |||
| {{- define "mastodon.fullname" -}} | |||
| {{- if .Values.fullnameOverride }} | |||
| {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} | |||
| {{- else }} | |||
| {{- $name := default .Chart.Name .Values.nameOverride }} | |||
| {{- if contains $name .Release.Name }} | |||
| {{- .Release.Name | trunc 63 | trimSuffix "-" }} | |||
| {{- else }} | |||
| {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} | |||
| {{- end }} | |||
| {{- end }} | |||
| {{- end }} | |||
| {{/* | |||
| Create chart name and version as used by the chart label. | |||
| */}} | |||
| {{- define "mastodon.chart" -}} | |||
| {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} | |||
| {{- end }} | |||
| {{/* | |||
| Common labels | |||
| */}} | |||
| {{- define "mastodon.labels" -}} | |||
| helm.sh/chart: {{ include "mastodon.chart" . }} | |||
| {{ include "mastodon.selectorLabels" . }} | |||
| {{- if .Chart.AppVersion }} | |||
| app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} | |||
| {{- end }} | |||
| app.kubernetes.io/managed-by: {{ .Release.Service }} | |||
| {{- end }} | |||
| {{/* | |||
| Selector labels | |||
| */}} | |||
| {{- define "mastodon.selectorLabels" -}} | |||
| app.kubernetes.io/name: {{ include "mastodon.name" . }} | |||
| app.kubernetes.io/instance: {{ .Release.Name }} | |||
| {{- end }} | |||
| {{/* | |||
| Create the name of the service account to use | |||
| */}} | |||
| {{- define "mastodon.serviceAccountName" -}} | |||
| {{- if .Values.serviceAccount.create }} | |||
| {{- default (include "mastodon.fullname" .) .Values.serviceAccount.name }} | |||
| {{- else }} | |||
| {{- default "default" .Values.serviceAccount.name }} | |||
| {{- end }} | |||
| {{- end }} | |||
| {{/* | |||
| Create a default fully qualified name for dependent services. | |||
| We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). | |||
| */}} | |||
| {{- define "mastodon.elasticsearch.fullname" -}} | |||
| {{- printf "%s-%s" .Release.Name "elasticsearch" | trunc 63 | trimSuffix "-" -}} | |||
| {{- end -}} | |||
| {{- define "mastodon.redis.fullname" -}} | |||
| {{- printf "%s-%s" .Release.Name "redis" | trunc 63 | trimSuffix "-" -}} | |||
| {{- end -}} | |||
| {{- define "mastodon.postgresql.fullname" -}} | |||
| {{- printf "%s-%s" .Release.Name "postgresql" | trunc 63 | trimSuffix "-" -}} | |||
| {{- end -}} | |||
| @@ -0,0 +1,65 @@ | |||
| apiVersion: v1 | |||
| kind: ConfigMap | |||
| metadata: | |||
| name: {{ include "mastodon.fullname" . }}-env | |||
| labels: | |||
| {{- include "mastodon.labels" . | nindent 4 }} | |||
| data: | |||
| DB_HOST: {{ template "mastodon.postgresql.fullname" . }} | |||
| DB_NAME: {{ .Values.postgresql.postgresqlDatabase }} | |||
| DB_POOL: {{ .Values.application.sidekiq.concurrency | quote }} | |||
| DB_PORT: "5432" | |||
| DB_USER: {{ .Values.postgresql.postgresqlUsername }} | |||
| DEFAULT_LOCALE: {{ .Values.locale }} | |||
| {{- if .Values.elasticsearch.enabled }} | |||
| ES_ENABLED: "true" | |||
| ES_HOST: {{ template "mastodon.elasticsearch.fullname" . }}-master | |||
| ES_PORT: "9200" | |||
| {{- end }} | |||
| LOCAL_DOMAIN: {{ .Values.ingress.hostname }} | |||
| # https://devcenter.heroku.com/articles/tuning-glibc-memory-behavior | |||
| MALLOC_ARENA_MAX: "2" | |||
| NODE_ENV: "production" | |||
| RAILS_ENV: "production" | |||
| REDIS_HOST: {{ template "mastodon.redis.fullname" . }}-master | |||
| REDIS_PORT: "6379" | |||
| {{- if .Values.smtp.auth_method }} | |||
| SMTP_AUTH_METHOD: {{ .Values.smtp.auth_method }} | |||
| {{- end }} | |||
| {{- if .Values.smtp.ca_file }} | |||
| SMTP_CA_FILE: {{ .Values.smtp.ca_file }} | |||
| {{- end }} | |||
| {{- if .Values.smtp.delivery_method }} | |||
| SMTP_DELIVERY_METHOD: {{ .Values.smtp.delivery_method }} | |||
| {{- end }} | |||
| {{- if .Values.smtp.domain }} | |||
| SMTP_DOMAIN: {{ .Values.smtp.domain }} | |||
| {{- end }} | |||
| {{- if .Values.smtp.enable_starttls_auto }} | |||
| SMTP_ENABLE_STARTTLS_AUTO: {{ .Values.smtp.enable_starttls_auto | quote }} | |||
| {{- end }} | |||
| {{- if .Values.smtp.from_address }} | |||
| SMTP_FROM_ADDRESS: {{ .Values.smtp.from_address }} | |||
| {{- end }} | |||
| {{- if .Values.smtp.login }} | |||
| SMTP_LOGIN: {{ .Values.smtp.login }} | |||
| {{- end }} | |||
| {{- if .Values.smtp.openssl_verify_mode }} | |||
| SMTP_OPENSSL_VERIFY_MODE: {{ .Values.smtp.openssl_verify_mode }} | |||
| {{- end }} | |||
| {{- if .Values.smtp.password }} | |||
| SMTP_PASSWORD: {{ .Values.smtp.password }} | |||
| {{- end }} | |||
| {{- if .Values.smtp.port }} | |||
| SMTP_PORT: {{ .Values.smtp.port | quote }} | |||
| {{- end }} | |||
| {{- if .Values.smtp.reply_to }} | |||
| SMTP_REPLY_TO: {{ .Values.smtp.reply_to }} | |||
| {{- end }} | |||
| {{- if .Values.smtp.server }} | |||
| SMTP_SERVER: {{ .Values.smtp.server }} | |||
| {{- end }} | |||
| {{- if .Values.smtp.tls }} | |||
| SMTP_TLS: {{ .Values.smtp.tls | quote }} | |||
| {{- end }} | |||
| STREAMING_CLUSTER_NUM: {{ .Values.application.streaming.workers | quote }} | |||
| @@ -0,0 +1,97 @@ | |||
| apiVersion: apps/v1 | |||
| kind: Deployment | |||
| metadata: | |||
| name: {{ include "mastodon.fullname" . }}-sidekiq | |||
| labels: | |||
| {{- include "mastodon.labels" . | nindent 4 }} | |||
| spec: | |||
| {{- if not .Values.autoscaling.enabled }} | |||
| replicas: {{ .Values.replicaCount }} | |||
| {{- end }} | |||
| selector: | |||
| matchLabels: | |||
| {{- include "mastodon.selectorLabels" . | nindent 6 }} | |||
| component: rails | |||
| template: | |||
| metadata: | |||
| {{- with .Values.podAnnotations }} | |||
| annotations: | |||
| {{- toYaml . | nindent 8 }} | |||
| # roll the pods to pick up any db migrations | |||
| rollme: {{ randAlphaNum 5 | quote }} | |||
| {{- end }} | |||
| labels: | |||
| {{- include "mastodon.selectorLabels" . | nindent 8 }} | |||
| component: rails | |||
| spec: | |||
| {{- with .Values.imagePullSecrets }} | |||
| imagePullSecrets: | |||
| {{- toYaml . | nindent 8 }} | |||
| {{- end }} | |||
| serviceAccountName: {{ include "mastodon.serviceAccountName" . }} | |||
| securityContext: | |||
| {{- toYaml .Values.podSecurityContext | nindent 8 }} | |||
| # ensure we run on the same node as the other rails components; only | |||
| # required when using PVCs that are ReadWriteOnce | |||
| {{- if or (eq "ReadWriteOnce" .Values.persistence.assets.accessMode) (eq "ReadWriteOnce" .Values.persistence.system.accessMode) }} | |||
| affinity: | |||
| podAffinity: | |||
| requiredDuringSchedulingIgnoredDuringExecution: | |||
| - labelSelector: | |||
| matchExpressions: | |||
| - key: component | |||
| operator: In | |||
| values: | |||
| - rails | |||
| topologyKey: kubernetes.io/hostname | |||
| {{- end }} | |||
| volumes: | |||
| - name: assets | |||
| persistentVolumeClaim: | |||
| claimName: {{ template "mastodon.fullname" . }}-assets | |||
| - name: system | |||
| persistentVolumeClaim: | |||
| claimName: {{ template "mastodon.fullname" . }}-system | |||
| containers: | |||
| - name: {{ .Chart.Name }} | |||
| securityContext: | |||
| {{- toYaml .Values.securityContext | nindent 12 }} | |||
| image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" | |||
| imagePullPolicy: {{ .Values.image.pullPolicy }} | |||
| command: | |||
| - bundle | |||
| - exec | |||
| - sidekiq | |||
| - -c | |||
| - {{ .Values.application.sidekiq.concurrency | quote }} | |||
| envFrom: | |||
| - configMapRef: | |||
| name: {{ include "mastodon.fullname" . }}-env | |||
| - secretRef: | |||
| name: {{ template "mastodon.fullname" . }} | |||
| env: | |||
| - name: "DB_PASS" | |||
| valueFrom: | |||
| secretKeyRef: | |||
| name: {{ .Release.Name }}-postgresql | |||
| key: postgresql-password | |||
| - name: "REDIS_PASSWORD" | |||
| valueFrom: | |||
| secretKeyRef: | |||
| name: {{ .Release.Name }}-redis | |||
| key: redis-password | |||
| volumeMounts: | |||
| - name: assets | |||
| mountPath: /opt/mastodon/public/assets | |||
| - name: system | |||
| mountPath: /opt/mastodon/public/system | |||
| resources: | |||
| {{- toYaml .Values.resources | nindent 12 }} | |||
| {{- with .Values.nodeSelector }} | |||
| nodeSelector: | |||
| {{- toYaml . | nindent 8 }} | |||
| {{- end }} | |||
| {{- with .Values.tolerations }} | |||
| tolerations: | |||
| {{- toYaml . | nindent 8 }} | |||
| {{- end }} | |||
| @@ -0,0 +1,80 @@ | |||
| apiVersion: apps/v1 | |||
| kind: Deployment | |||
| metadata: | |||
| name: {{ include "mastodon.fullname" . }}-streaming | |||
| labels: | |||
| {{- include "mastodon.labels" . | nindent 4 }} | |||
| spec: | |||
| {{- if not .Values.autoscaling.enabled }} | |||
| replicas: {{ .Values.replicaCount }} | |||
| {{- end }} | |||
| selector: | |||
| matchLabels: | |||
| {{- include "mastodon.selectorLabels" . | nindent 6 }} | |||
| template: | |||
| metadata: | |||
| {{- with .Values.podAnnotations }} | |||
| annotations: | |||
| {{- toYaml . | nindent 8 }} | |||
| {{- end }} | |||
| labels: | |||
| {{- include "mastodon.selectorLabels" . | nindent 8 }} | |||
| spec: | |||
| {{- with .Values.imagePullSecrets }} | |||
| imagePullSecrets: | |||
| {{- toYaml . | nindent 8 }} | |||
| {{- end }} | |||
| serviceAccountName: {{ include "mastodon.serviceAccountName" . }} | |||
| securityContext: | |||
| {{- toYaml .Values.podSecurityContext | nindent 8 }} | |||
| containers: | |||
| - name: {{ .Chart.Name }} | |||
| securityContext: | |||
| {{- toYaml .Values.securityContext | nindent 12 }} | |||
| image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" | |||
| imagePullPolicy: {{ .Values.image.pullPolicy }} | |||
| command: | |||
| - node | |||
| - ./streaming | |||
| envFrom: | |||
| - configMapRef: | |||
| name: {{ include "mastodon.fullname" . }}-env | |||
| env: | |||
| - name: "DB_PASS" | |||
| valueFrom: | |||
| secretKeyRef: | |||
| name: {{ .Release.Name }}-postgresql | |||
| key: postgresql-password | |||
| - name: "REDIS_PASSWORD" | |||
| valueFrom: | |||
| secretKeyRef: | |||
| name: {{ .Release.Name }}-redis | |||
| key: redis-password | |||
| - name: "PORT" | |||
| value: {{ .Values.application.streaming.port | quote }} | |||
| ports: | |||
| - name: streaming | |||
| containerPort: {{ .Values.application.streaming.port }} | |||
| protocol: TCP | |||
| livenessProbe: | |||
| httpGet: | |||
| path: /api/v1/streaming/health | |||
| port: streaming | |||
| readinessProbe: | |||
| httpGet: | |||
| path: /api/v1/streaming/health | |||
| port: streaming | |||
| resources: | |||
| {{- toYaml .Values.resources | nindent 12 }} | |||
| {{- with .Values.nodeSelector }} | |||
| nodeSelector: | |||
| {{- toYaml . | nindent 8 }} | |||
| {{- end }} | |||
| {{- with .Values.affinity }} | |||
| affinity: | |||
| {{- toYaml . | nindent 8 }} | |||
| {{- end }} | |||
| {{- with .Values.tolerations }} | |||
| tolerations: | |||
| {{- toYaml . | nindent 8 }} | |||
| {{- end }} | |||
| @@ -0,0 +1,101 @@ | |||
| apiVersion: apps/v1 | |||
| kind: Deployment | |||
| metadata: | |||
| name: {{ include "mastodon.fullname" . }}-web | |||
| labels: | |||
| {{- include "mastodon.labels" . | nindent 4 }} | |||
| spec: | |||
| {{- if not .Values.autoscaling.enabled }} | |||
| replicas: {{ .Values.replicaCount }} | |||
| {{- end }} | |||
| selector: | |||
| matchLabels: | |||
| {{- include "mastodon.selectorLabels" . | nindent 6 }} | |||
| component: rails | |||
| template: | |||
| metadata: | |||
| {{- with .Values.podAnnotations }} | |||
| annotations: | |||
| {{- toYaml . | nindent 8 }} | |||
| # roll the pods to pick up any db migrations | |||
| rollme: {{ randAlphaNum 5 | quote }} | |||
| {{- end }} | |||
| labels: | |||
| {{- include "mastodon.selectorLabels" . | nindent 8 }} | |||
| component: rails | |||
| spec: | |||
| {{- with .Values.imagePullSecrets }} | |||
| imagePullSecrets: | |||
| {{- toYaml . | nindent 8 }} | |||
| {{- end }} | |||
| serviceAccountName: {{ include "mastodon.serviceAccountName" . }} | |||
| securityContext: | |||
| {{- toYaml .Values.podSecurityContext | nindent 8 }} | |||
| volumes: | |||
| - name: assets | |||
| persistentVolumeClaim: | |||
| claimName: {{ template "mastodon.fullname" . }}-assets | |||
| - name: system | |||
| persistentVolumeClaim: | |||
| claimName: {{ template "mastodon.fullname" . }}-system | |||
| containers: | |||
| - name: {{ .Chart.Name }} | |||
| securityContext: | |||
| {{- toYaml .Values.securityContext | nindent 12 }} | |||
| image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" | |||
| imagePullPolicy: {{ .Values.image.pullPolicy }} | |||
| command: | |||
| - bundle | |||
| - exec | |||
| - puma | |||
| - -C | |||
| - config/puma.rb | |||
| envFrom: | |||
| - configMapRef: | |||
| name: {{ include "mastodon.fullname" . }}-env | |||
| - secretRef: | |||
| name: {{ template "mastodon.fullname" . }} | |||
| env: | |||
| - name: "DB_PASS" | |||
| valueFrom: | |||
| secretKeyRef: | |||
| name: {{ .Release.Name }}-postgresql | |||
| key: postgresql-password | |||
| - name: "REDIS_PASSWORD" | |||
| valueFrom: | |||
| secretKeyRef: | |||
| name: {{ .Release.Name }}-redis | |||
| key: redis-password | |||
| - name: "PORT" | |||
| value: {{ .Values.application.web.port | quote }} | |||
| volumeMounts: | |||
| - name: assets | |||
| mountPath: /opt/mastodon/public/assets | |||
| - name: system | |||
| mountPath: /opt/mastodon/public/system | |||
| ports: | |||
| - name: http | |||
| containerPort: {{ .Values.application.web.port }} | |||
| protocol: TCP | |||
| livenessProbe: | |||
| httpGet: | |||
| path: /health | |||
| port: http | |||
| readinessProbe: | |||
| httpGet: | |||
| path: /health | |||
| port: http | |||
| resources: | |||
| {{- toYaml .Values.resources | nindent 12 }} | |||
| {{- with .Values.nodeSelector }} | |||
| nodeSelector: | |||
| {{- toYaml . | nindent 8 }} | |||
| {{- end }} | |||
| {{- with .Values.affinity }} | |||
| affinity: | |||
| {{- toYaml . | nindent 8 }} | |||
| {{- end }} | |||
| {{- with .Values.tolerations }} | |||
| tolerations: | |||
| {{- toYaml . | nindent 8 }} | |||
| {{- end }} | |||
| @@ -0,0 +1,28 @@ | |||
| {{- if .Values.autoscaling.enabled }} | |||
| apiVersion: autoscaling/v2beta1 | |||
| kind: HorizontalPodAutoscaler | |||
| metadata: | |||
| name: {{ include "mastodon.fullname" . }} | |||
| labels: | |||
| {{- include "mastodon.labels" . | nindent 4 }} | |||
| spec: | |||
| scaleTargetRef: | |||
| apiVersion: apps/v1 | |||
| kind: Deployment | |||
| name: {{ include "mastodon.fullname" . }} | |||
| minReplicas: {{ .Values.autoscaling.minReplicas }} | |||
| maxReplicas: {{ .Values.autoscaling.maxReplicas }} | |||
| metrics: | |||
| {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} | |||
| - type: Resource | |||
| resource: | |||
| name: cpu | |||
| targetAverageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} | |||
| {{- end }} | |||
| {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} | |||
| - type: Resource | |||
| resource: | |||
| name: memory | |||
| targetAverageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} | |||
| {{- end }} | |||
| {{- end }} | |||
| @@ -0,0 +1,41 @@ | |||
| {{- if .Values.ingress.enabled -}} | |||
| {{- $fullName := include "mastodon.fullname" . -}} | |||
| {{- $svcPort := .Values.service.port -}} | |||
| {{- if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} | |||
| apiVersion: networking.k8s.io/v1beta1 | |||
| {{- else -}} | |||
| apiVersion: extensions/v1beta1 | |||
| {{- end }} | |||
| kind: Ingress | |||
| metadata: | |||
| name: {{ $fullName }} | |||
| labels: | |||
| {{- include "mastodon.labels" . | nindent 4 }} | |||
| {{- with .Values.ingress.annotations }} | |||
| annotations: | |||
| {{- toYaml . | nindent 4 }} | |||
| {{- end }} | |||
| spec: | |||
| {{- if .Values.ingress.tls }} | |||
| tls: | |||
| {{- range .Values.ingress.tls }} | |||
| - hosts: | |||
| {{- range .hosts }} | |||
| - {{ . | quote }} | |||
| {{- end }} | |||
| secretName: {{ .secretName }} | |||
| {{- end }} | |||
| {{- end }} | |||
| rules: | |||
| - host: {{ .Values.ingress.hostname | quote }} | |||
| http: | |||
| paths: | |||
| - path: '/' | |||
| backend: | |||
| serviceName: {{ $fullName }}-web | |||
| servicePort: {{ $svcPort }} | |||
| - path: '/api/v1/streaming' | |||
| backend: | |||
| serviceName: {{ $fullName }}-streaming | |||
| servicePort: {{ .Values.application.streaming.port }} | |||
| {{- end }} | |||
| @@ -0,0 +1,69 @@ | |||
| apiVersion: batch/v1 | |||
| kind: Job | |||
| metadata: | |||
| name: {{ include "mastodon.fullname" . }}-assets-precompile | |||
| labels: | |||
| {{- include "mastodon.labels" . | nindent 4 }} | |||
| annotations: | |||
| "helm.sh/hook": post-install | |||
| "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded | |||
| "helm.sh/hook-weight": "-2" | |||
| spec: | |||
| template: | |||
| metadata: | |||
| name: {{ include "mastodon.fullname" . }}-assets-precompile | |||
| spec: | |||
| restartPolicy: Never | |||
| # ensure we run on the same node as the other rails components; only | |||
| # required when using PVCs that are ReadWriteOnce | |||
| {{- if or (eq "ReadWriteOnce" .Values.persistence.assets.accessMode) (eq "ReadWriteOnce" .Values.persistence.system.accessMode) }} | |||
| affinity: | |||
| podAffinity: | |||
| requiredDuringSchedulingIgnoredDuringExecution: | |||
| - labelSelector: | |||
| matchExpressions: | |||
| - key: component | |||
| operator: In | |||
| values: | |||
| - rails | |||
| topologyKey: kubernetes.io/hostname | |||
| {{- end }} | |||
| volumes: | |||
| - name: assets | |||
| persistentVolumeClaim: | |||
| claimName: {{ template "mastodon.fullname" . }}-assets | |||
| - name: system | |||
| persistentVolumeClaim: | |||
| claimName: {{ template "mastodon.fullname" . }}-system | |||
| containers: | |||
| - name: {{ include "mastodon.fullname" . }}-assets-precompile | |||
| image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" | |||
| imagePullPolicy: {{ .Values.image.pullPolicy }} | |||
| command: | |||
| - bash | |||
| - -c | |||
| - | | |||
| bundle exec rake assets:precompile && yarn cache clean | |||
| envFrom: | |||
| - configMapRef: | |||
| name: {{ include "mastodon.fullname" . }}-env | |||
| - secretRef: | |||
| name: {{ template "mastodon.fullname" . }} | |||
| env: | |||
| - name: "DB_PASS" | |||
| valueFrom: | |||
| secretKeyRef: | |||
| name: {{ .Release.Name }}-postgresql | |||
| key: postgresql-password | |||
| - name: "REDIS_PASSWORD" | |||
| valueFrom: | |||
| secretKeyRef: | |||
| name: {{ .Release.Name }}-redis | |||
| key: redis-password | |||
| - name: "PORT" | |||
| value: {{ .Values.application.web.port | quote }} | |||
| volumeMounts: | |||
| - name: assets | |||
| mountPath: /opt/mastodon/public/assets | |||
| - name: system | |||
| mountPath: /opt/mastodon/public/system | |||
| @@ -0,0 +1,71 @@ | |||
| {{- if .Values.elasticsearch.enabled }} | |||
| apiVersion: batch/v1 | |||
| kind: Job | |||
| metadata: | |||
| name: {{ include "mastodon.fullname" . }}-chewy-upgrade | |||
| labels: | |||
| {{- include "mastodon.labels" . | nindent 4 }} | |||
| annotations: | |||
| "helm.sh/hook": post-install | |||
| "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded | |||
| "helm.sh/hook-weight": "-1" | |||
| spec: | |||
| template: | |||
| metadata: | |||
| name: {{ include "mastodon.fullname" . }}-chewy-upgrade | |||
| spec: | |||
| restartPolicy: Never | |||
| # ensure we run on the same node as the other rails components; only | |||
| # required when using PVCs that are ReadWriteOnce | |||
| {{- if or (eq "ReadWriteOnce" .Values.persistence.assets.accessMode) (eq "ReadWriteOnce" .Values.persistence.system.accessMode) }} | |||
| affinity: | |||
| podAffinity: | |||
| requiredDuringSchedulingIgnoredDuringExecution: | |||
| - labelSelector: | |||
| matchExpressions: | |||
| - key: component | |||
| operator: In | |||
| values: | |||
| - rails | |||
| topologyKey: kubernetes.io/hostname | |||
| {{- end }} | |||
| volumes: | |||
| - name: assets | |||
| persistentVolumeClaim: | |||
| claimName: {{ template "mastodon.fullname" . }}-assets | |||
| - name: system | |||
| persistentVolumeClaim: | |||
| claimName: {{ template "mastodon.fullname" . }}-system | |||
| containers: | |||
| - name: {{ include "mastodon.fullname" . }}-chewy-setup | |||
| image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" | |||
| imagePullPolicy: {{ .Values.image.pullPolicy }} | |||
| command: | |||
| - bundle | |||
| - exec | |||
| - rake | |||
| - chewy:upgrade | |||
| envFrom: | |||
| - configMapRef: | |||
| name: {{ include "mastodon.fullname" . }}-env | |||
| - secretRef: | |||
| name: {{ template "mastodon.fullname" . }} | |||
| env: | |||
| - name: "DB_PASS" | |||
| valueFrom: | |||
| secretKeyRef: | |||
| name: {{ .Release.Name }}-postgresql | |||
| key: postgresql-password | |||
| - name: "REDIS_PASSWORD" | |||
| valueFrom: | |||
| secretKeyRef: | |||
| name: {{ .Release.Name }}-redis | |||
| key: redis-password | |||
| - name: "PORT" | |||
| value: {{ .Values.application.web.port | quote }} | |||
| volumeMounts: | |||
| - name: assets | |||
| mountPath: /opt/mastodon/public/assets | |||
| - name: system | |||
| mountPath: /opt/mastodon/public/system | |||
| {{- end }} | |||
| @@ -0,0 +1,76 @@ | |||
| {{- if .Values.createAdmin.enabled }} | |||
| apiVersion: batch/v1 | |||
| kind: Job | |||
| metadata: | |||
| name: {{ include "mastodon.fullname" . }}-create-admin | |||
| labels: | |||
| {{- include "mastodon.labels" . | nindent 4 }} | |||
| annotations: | |||
| "helm.sh/hook": post-install | |||
| "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded | |||
| "helm.sh/hook-weight": "-1" | |||
| spec: | |||
| template: | |||
| metadata: | |||
| name: {{ include "mastodon.fullname" . }}-create-admin | |||
| spec: | |||
| restartPolicy: Never | |||
| # ensure we run on the same node as the other rails components; only | |||
| # required when using PVCs that are ReadWriteOnce | |||
| {{- if or (eq "ReadWriteOnce" .Values.persistence.assets.accessMode) (eq "ReadWriteOnce" .Values.persistence.system.accessMode) }} | |||
| affinity: | |||
| podAffinity: | |||
| requiredDuringSchedulingIgnoredDuringExecution: | |||
| - labelSelector: | |||
| matchExpressions: | |||
| - key: component | |||
| operator: In | |||
| values: | |||
| - rails | |||
| topologyKey: kubernetes.io/hostname | |||
| {{- end }} | |||
| volumes: | |||
| - name: assets | |||
| persistentVolumeClaim: | |||
| claimName: {{ template "mastodon.fullname" . }}-assets | |||
| - name: system | |||
| persistentVolumeClaim: | |||
| claimName: {{ template "mastodon.fullname" . }}-system | |||
| containers: | |||
| - name: {{ include "mastodon.fullname" . }}-create-admin | |||
| image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" | |||
| imagePullPolicy: {{ .Values.image.pullPolicy }} | |||
| command: | |||
| - bin/tootctl | |||
| - accounts | |||
| - create | |||
| - {{ .Values.createAdmin.username }} | |||
| - {{ .Values.createAdmin.email }} | |||
| - --confirmed | |||
| - --role | |||
| - admin | |||
| envFrom: | |||
| - configMapRef: | |||
| name: {{ include "mastodon.fullname" . }}-env | |||
| - secretRef: | |||
| name: {{ template "mastodon.fullname" . }} | |||
| env: | |||
| - name: "DB_PASS" | |||
| valueFrom: | |||
| secretKeyRef: | |||
| name: {{ .Release.Name }}-postgresql | |||
| key: postgresql-password | |||
| - name: "REDIS_PASSWORD" | |||
| valueFrom: | |||
| secretKeyRef: | |||
| name: {{ .Release.Name }}-redis | |||
| key: redis-password | |||
| - name: "PORT" | |||
| value: {{ .Values.application.web.port | quote }} | |||
| volumeMounts: | |||
| - name: assets | |||
| mountPath: /opt/mastodon/public/assets | |||
| - name: system | |||
| mountPath: /opt/mastodon/public/system | |||
| {{- end }} | |||
| @@ -0,0 +1,69 @@ | |||
| apiVersion: batch/v1 | |||
| kind: Job | |||
| metadata: | |||
| name: {{ include "mastodon.fullname" . }}-db-migrate | |||
| labels: | |||
| {{- include "mastodon.labels" . | nindent 4 }} | |||
| annotations: | |||
| "helm.sh/hook": post-install,pre-upgrade | |||
| "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded | |||
| "helm.sh/hook-weight": "-2" | |||
| spec: | |||
| template: | |||
| metadata: | |||
| name: {{ include "mastodon.fullname" . }}-db-migrate | |||
| spec: | |||
| restartPolicy: Never | |||
| # ensure we run on the same node as the other rails components; only | |||
| # required when using PVCs that are ReadWriteOnce | |||
| {{- if or (eq "ReadWriteOnce" .Values.persistence.assets.accessMode) (eq "ReadWriteOnce" .Values.persistence.system.accessMode) }} | |||
| affinity: | |||
| podAffinity: | |||
| requiredDuringSchedulingIgnoredDuringExecution: | |||
| - labelSelector: | |||
| matchExpressions: | |||
| - key: component | |||
| operator: In | |||
| values: | |||
| - rails | |||
| topologyKey: kubernetes.io/hostname | |||
| {{- end }} | |||
| volumes: | |||
| - name: assets | |||
| persistentVolumeClaim: | |||
| claimName: {{ template "mastodon.fullname" . }}-assets | |||
| - name: system | |||
| persistentVolumeClaim: | |||
| claimName: {{ template "mastodon.fullname" . }}-system | |||
| containers: | |||
| - name: {{ include "mastodon.fullname" . }}-db-migrate | |||
| image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" | |||
| imagePullPolicy: {{ .Values.image.pullPolicy }} | |||
| command: | |||
| - bundle | |||
| - exec | |||
| - rake | |||
| - db:migrate | |||
| envFrom: | |||
| - configMapRef: | |||
| name: {{ include "mastodon.fullname" . }}-env | |||
| - secretRef: | |||
| name: {{ template "mastodon.fullname" . }} | |||
| env: | |||
| - name: "DB_PASS" | |||
| valueFrom: | |||
| secretKeyRef: | |||
| name: {{ .Release.Name }}-postgresql | |||
| key: postgresql-password | |||
| - name: "REDIS_PASSWORD" | |||
| valueFrom: | |||
| secretKeyRef: | |||
| name: {{ .Release.Name }}-redis | |||
| key: redis-password | |||
| - name: "PORT" | |||
| value: {{ .Values.application.web.port | quote }} | |||
| volumeMounts: | |||
| - name: assets | |||
| mountPath: /opt/mastodon/public/assets | |||
| - name: system | |||
| mountPath: /opt/mastodon/public/system | |||
| @@ -0,0 +1,13 @@ | |||
| --- | |||
| apiVersion: v1 | |||
| kind: PersistentVolumeClaim | |||
| metadata: | |||
| name: {{ template "mastodon.fullname" . }}-assets | |||
| labels: | |||
| {{- include "mastodon.labels" . | nindent 4 }} | |||
| spec: | |||
| accessModes: | |||
| - {{ .Values.persistence.system.accessMode }} | |||
| resources: | |||
| {{- toYaml .Values.persistence.assets.resources | nindent 4}} | |||
| storageClassName: {{ .Values.persistence.assets.storageClassName }} | |||
| @@ -0,0 +1,13 @@ | |||
| --- | |||
| apiVersion: v1 | |||
| kind: PersistentVolumeClaim | |||
| metadata: | |||
| name: {{ template "mastodon.fullname" . }}-system | |||
| labels: | |||
| {{- include "mastodon.labels" . | nindent 4 }} | |||
| spec: | |||
| accessModes: | |||
| - {{ .Values.persistence.system.accessMode }} | |||
| resources: | |||
| {{- toYaml .Values.persistence.system.resources | nindent 4}} | |||
| storageClassName: {{ .Values.persistence.system.storageClassName }} | |||
| @@ -0,0 +1,28 @@ | |||
| apiVersion: v1 | |||
| kind: Secret | |||
| metadata: | |||
| name: {{ template "mastodon.fullname" . }} | |||
| labels: | |||
| {{- include "mastodon.labels" . | nindent 4 }} | |||
| type: Opaque | |||
| data: | |||
| {{- if not (empty .Values.secrets.secret_key_base) }} | |||
| SECRET_KEY_BASE: "{{ .Values.secrets.secret_key_base | b64enc }}" | |||
| {{- else }} | |||
| SECRET_KEY_BASE: {{ required "secret_key_base is required" .Values.secrets.secret_key_base }} | |||
| {{- end }} | |||
| {{- if not (empty .Values.secrets.otp_secret) }} | |||
| OTP_SECRET: "{{ .Values.secrets.otp_secret | b64enc }}" | |||
| {{- else }} | |||
| OTP_SECRET: {{ required "otp_secret is required" .Values.secrets.otp_secret }} | |||
| {{- end }} | |||
| {{- if not (empty .Values.secrets.vapid.private_key) }} | |||
| VAPID_PRIVATE_KEY: "{{ .Values.secrets.vapid.private_key | b64enc }}" | |||
| {{- else }} | |||
| VAPID_PRIVATE_KEY: {{ required "vapid.private_key is required" .Values.secrets.vapid.private_key }} | |||
| {{- end }} | |||
| {{- if not (empty .Values.secrets.vapid.public_key) }} | |||
| VAPID_PUBLIC_KEY: "{{ .Values.secrets.vapid.public_key | b64enc }}" | |||
| {{- else }} | |||
| VAPID_PUBLIC_KEY: {{ required "vapid.public_key is required" .Values.secrets.vapid.public_key }} | |||
| {{- end }} | |||
| @@ -0,0 +1,15 @@ | |||
| apiVersion: v1 | |||
| kind: Service | |||
| metadata: | |||
| name: {{ include "mastodon.fullname" . }}-streaming | |||
| labels: | |||
| {{- include "mastodon.labels" . | nindent 4 }} | |||
| spec: | |||
| type: {{ .Values.service.type }} | |||
| ports: | |||
| - port: {{ .Values.application.streaming.port }} | |||
| targetPort: streaming | |||
| protocol: TCP | |||
| name: streaming | |||
| selector: | |||
| {{- include "mastodon.selectorLabels" . | nindent 4 }} | |||
| @@ -0,0 +1,15 @@ | |||
| apiVersion: v1 | |||
| kind: Service | |||
| metadata: | |||
| name: {{ include "mastodon.fullname" . }}-web | |||
| labels: | |||
| {{- include "mastodon.labels" . | nindent 4 }} | |||
| spec: | |||
| type: {{ .Values.service.type }} | |||
| ports: | |||
| - port: {{ .Values.service.port }} | |||
| targetPort: http | |||
| protocol: TCP | |||
| name: http | |||
| selector: | |||
| {{- include "mastodon.selectorLabels" . | nindent 4 }} | |||
| @@ -0,0 +1,12 @@ | |||
| {{- if .Values.serviceAccount.create -}} | |||
| apiVersion: v1 | |||
| kind: ServiceAccount | |||
| metadata: | |||
| name: {{ include "mastodon.serviceAccountName" . }} | |||
| labels: | |||
| {{- include "mastodon.labels" . | nindent 4 }} | |||
| {{- with .Values.serviceAccount.annotations }} | |||
| annotations: | |||
| {{- toYaml . | nindent 4 }} | |||
| {{- end }} | |||
| {{- end }} | |||
| @@ -0,0 +1,15 @@ | |||
| apiVersion: v1 | |||
| kind: Pod | |||
| metadata: | |||
| name: "{{ include "mastodon.fullname" . }}-test-connection" | |||
| labels: | |||
| {{- include "mastodon.labels" . | nindent 4 }} | |||
| annotations: | |||
| "helm.sh/hook": test-success | |||
| spec: | |||
| containers: | |||
| - name: wget | |||
| image: busybox | |||
| command: ['wget'] | |||
| args: ['{{ include "mastodon.fullname" . }}:{{ .Values.service.port }}'] | |||
| restartPolicy: Never | |||
| @@ -0,0 +1,163 @@ | |||
| replicaCount: 1 | |||
| image: | |||
| repository: tootsuite/mastodon | |||
| pullPolicy: Always | |||
| # https://hub.docker.com/r/tootsuite/mastodon/tags | |||
| tag: v3.1.4 | |||
| # alternatively, use `latest` for the latest release or `edge` for the image | |||
| # built from the most recent commit | |||
| # | |||
| # tag: latest | |||
| ingress: | |||
| enabled: false | |||
| annotations: | |||
| kubernetes.io/ingress.class: nginx | |||
| kubernetes.io/tls-acme: "true" | |||
| # cert-manager.io/cluster-issuer: "letsencrypt" | |||
| # this value is used for LOCAL_DOMAIN | |||
| hostname: mastodon.local | |||
| tls: | |||
| - secretName: mastodon-tls | |||
| hosts: | |||
| - mastodon.local | |||
| # create an initial administrator user; the password is autogenerated and will | |||
| # have to be reset | |||
| createAdmin: | |||
| enabled: false | |||
| username: not_gargron | |||
| email: not@example.com | |||
| # available locales: https://github.com/tootsuite/mastodon/blob/master/config/application.rb#L43 | |||
| locale: en | |||
| application: | |||
| web: | |||
| port: 3000 | |||
| streaming: | |||
| port: 4000 | |||
| # this should be set manually since os.cpus() returns the number of CPUs on | |||
| # the node running the pod, which is unrelated to the resources allocated to | |||
| # the pod by k8s | |||
| workers: 1 | |||
| sidekiq: | |||
| concurrency: 25 | |||
| # these must be set manually; autogenerated keys are rotated on each upgrade | |||
| secrets: | |||
| secret_key_base: "" | |||
| otp_secret: "" | |||
| vapid: | |||
| private_key: "" | |||
| public_key: "" | |||
| smtp: | |||
| auth_method: plain | |||
| ca_file: | |||
| delivery_method: smtp | |||
| domain: | |||
| enable_starttls_auto: true | |||
| from_address: notifications@example.com | |||
| login: | |||
| openssl_verify_mode: peer | |||
| password: | |||
| port: 587 | |||
| reply_to: | |||
| server: smtp.mailgun.org | |||
| tls: false | |||
| # https://github.com/bitnami/charts/tree/master/bitnami/elasticsearch#parameters | |||
| elasticsearch: | |||
| # `false` will disable full-text search | |||
| # | |||
| # if you enable ES after the initial install, you will need to manually run | |||
| # RAILS_ENV=production bundle exec rake chewy:sync | |||
| # (https://docs.joinmastodon.org/admin/optional/elasticsearch/) | |||
| enabled: true | |||
| # may be removed once https://github.com/tootsuite/mastodon/pull/13828 is part | |||
| # of a tagged release | |||
| image: | |||
| tag: 6 | |||
| # https://github.com/bitnami/charts/tree/master/bitnami/postgresql#parameters | |||
| postgresql: | |||
| postgresqlDatabase: mastodon_production | |||
| # you must set a password; the password generated by the postgresql chart will | |||
| # be rotated on each upgrade: | |||
| # https://github.com/bitnami/charts/tree/master/bitnami/postgresql#upgrade | |||
| postgresqlPassword: "" | |||
| postgresqlUsername: postgres | |||
| # https://github.com/bitnami/charts/tree/master/bitnami/redis#parameters | |||
| redis: | |||
| # you must set a password; the password generated by the redis chart will be | |||
| # rotated on each upgrade: | |||
| password: "" | |||
| persistence: | |||
| assets: | |||
| # ReadWriteOnce is more widely supported than ReadWriteMany, but limits | |||
| # scalability, since it requires the Rails and Sidekiq pods to run on the | |||
| # same node. | |||
| accessMode: ReadWriteOnce | |||
| resources: | |||
| requests: | |||
| storage: 100Gi | |||
| system: | |||
| accessMode: ReadWriteOnce | |||
| resources: | |||
| requests: | |||
| storage: 10Gi | |||
| service: | |||
| type: ClusterIP | |||
| port: 80 | |||
| # https://github.com/tootsuite/mastodon/blob/master/Dockerfile#L88 | |||
| # | |||
| # if you manually change the UID/GID environment variables, ensure these values | |||
| # match: | |||
| podSecurityContext: | |||
| runAsUser: 991 | |||
| runAsGroup: 991 | |||
| fsGroup: 991 | |||
| securityContext: {} | |||
| serviceAccount: | |||
| # Specifies whether a service account should be created | |||
| create: true | |||
| # Annotations to add to the service account | |||
| annotations: {} | |||
| # The name of the service account to use. | |||
| # If not set and create is true, a name is generated using the fullname template | |||
| name: "" | |||
| podAnnotations: {} | |||
| resources: {} | |||
| # We usually recommend not to specify default resources and to leave this as a conscious | |||
| # choice for the user. This also increases chances charts run on environments with little | |||
| # resources, such as Minikube. If you do want to specify resources, uncomment the following | |||
| # lines, adjust them as necessary, and remove the curly braces after 'resources:'. | |||
| # limits: | |||
| # cpu: 100m | |||
| # memory: 128Mi | |||
| # requests: | |||
| # cpu: 100m | |||
| # memory: 128Mi | |||
| autoscaling: | |||
| enabled: false | |||
| minReplicas: 1 | |||
| maxReplicas: 100 | |||
| targetCPUUtilizationPercentage: 80 | |||
| # targetMemoryUtilizationPercentage: 80 | |||
| nodeSelector: {} | |||
| tolerations: [] | |||
| affinity: {} | |||