diff --git a/templates/deployment-sidekiq.yaml b/templates/deployment-sidekiq.yaml index 0fcb239..1b3042d 100644 --- a/templates/deployment-sidekiq.yaml +++ b/templates/deployment-sidekiq.yaml @@ -203,6 +203,8 @@ spec: value: {{ coalesce $context.Values.mastodon.sidekiq.otel.endpointUri $context.Values.mastodon.otel.endpointUri }} - name: OTEL_SERVICE_NAME_PREFIX value: {{ coalesce $context.Values.mastodon.sidekiq.otel.namePrefix $context.Values.mastodon.otel.namePrefix }} + - name: OTEL_SERVICE_NAME_SEPARATOR + value: "{{ coalesce $context.Values.mastodon.sidekiq.otel.nameSeparator $context.Values.mastodon.otel.nameSeparator }}" {{- end }} volumeMounts: {{- if (not $context.Values.mastodon.s3.enabled) }} diff --git a/templates/deployment-web.yaml b/templates/deployment-web.yaml index c7b288f..d787c3f 100644 --- a/templates/deployment-web.yaml +++ b/templates/deployment-web.yaml @@ -193,6 +193,8 @@ spec: value: {{ coalesce .Values.mastodon.web.otel.endpointUri .Values.mastodon.otel.endpointUri }} - name: OTEL_SERVICE_NAME_PREFIX value: {{ coalesce .Values.mastodon.web.otel.namePrefix .Values.mastodon.otel.namePrefix }} + - name: OTEL_SERVICE_NAME_SEPARATOR + value: "{{ coalesce .Values.mastodon.web.otel.nameSeparator .Values.mastodon.otel.nameSeparator }}" {{- end }} volumeMounts: {{- if (not .Values.mastodon.s3.enabled) }} diff --git a/templates/job-assets-copy.yaml b/templates/job-assets-copy.yaml new file mode 100644 index 0000000..f4ec87f --- /dev/null +++ b/templates/job-assets-copy.yaml @@ -0,0 +1,90 @@ +{{- if .Values.mastodon.hooks.s3Upload.enabled -}} +apiVersion: batch/v1 +kind: Job +metadata: + name: {{ include "mastodon.fullname" . }}-assets-upload + labels: + {{- include "mastodon.labels" . | nindent 4 }} + annotations: + "helm.sh/hook": pre-install,pre-upgrade + "helm.sh/hook-delete-policy": before-hook-creation + "helm.sh/hook-weight": "-1" +spec: + template: + metadata: + name: {{ include "mastodon.fullname" . }}-assets-upload + {{- with .Values.jobAnnotations }} + annotations: + {{- toYaml . | nindent 8 }} + {{- end }} + spec: + {{- with .Values.imagePullSecrets }} + imagePullSecrets: + {{- toYaml . | nindent 8 }} + {{- end }} + volumes: + restartPolicy: Never + initContainers: + - name: extract-assets + image: "{{ coalesce .Values.mastodon.web.image.repository .Values.image.repository }}:{{ coalesce .Values.mastodon.web.image.tag .Values.image.tag .Chart.AppVersion }}" + imagePullPolicy: Always + command: + - cp + args: + - -rv + - public + - /assets + volumeMounts: + - mountPath: /assets + name: assets + containers: + - name: upload-assets + image: rclone/rclone:1 + imagePullPolicy: Always + env: + - name: RCLONE_S3_NO_CHECK_BUCKET + value: "true" + - name: RCLONE_CONFIG_REMOTE_TYPE + value: s3 + - name: RCLONE_CONFIG_REMOTE_PROVIDER + value: AWS + - name: RCLONE_CONFIG_REMOTE_ENDPOINT + value: {{ required "Please specify an endpoint for S3 asset uploads" .Values.mastodon.hooks.s3Upload.endpoint }} + - name: RCLONE_CONFIG_REMOTE_ACCESS_KEY_ID + valueFrom: + secretKeyRef: + name: {{ required "Please specify a secret with S3 credentials for S3 asset uploads" .Values.mastodon.hooks.s3Upload.secretRef.name }} + key: {{ .Values.mastodon.hooks.s3Upload.secretRef.keys.accesKeyId }} + - name: RCLONE_CONFIG_REMOTE_SECRET_ACCESS_KEY + valueFrom: + secretKeyRef: + name: {{ required "Please specify a secret with S3 credentials for S3 asset uploads" .Values.mastodon.hooks.s3Upload.secretRef.name }} + key: {{ .Values.mastodon.hooks.s3Upload.secretRef.keys.secretAccessKey }} + {{- with .Values.mastodon.hooks.s3Upload.rclone.env }} + {{- toYaml . | nindent 12 }} + {{- end }} + command: + - rclone + args: + - copy + - /assets/public + - "remote:{{ required "Please specify a bucket for S3 asset uploads" .Values.mastodon.hooks.s3Upload.bucket }}" + - --fast-list + - --transfers=32 + - --include + - "{assets,packs}/**" + - --progress + - -vv + volumeMounts: + - mountPath: /assets + name: assets + resources: + requests: + cpu: 100m + memory: 256Mi + limits: + memory: 500Mi + volumes: + - name: assets + emptyDir: {} +{{- end -}} diff --git a/values.yaml b/values.yaml index 5117a6d..e6ab46d 100644 --- a/values.yaml +++ b/values.yaml @@ -28,6 +28,27 @@ mastodon: enabled: true assetsPrecompile: enabled: true + # Upload website assets to S3 before deploying using rclone. + # Whenever there is an update to Mastodon, sometimes there are assets files + # that are renamed. As the pods are getting redeployed, and old/new pods are + # present simultaneously, there is a chance that old asset files are + # requested from pods that don't have them anymore, or new asset files are + # requested from old pods. Uploading asset files to S3 in this manner solves + # this potential conflict. + # Note that you will need to CDN/proxy to send all requests to /assets and + # /packs to this bucket. + s3Upload: + enabled: false + endpoint: + bucket: + secretRef: + name: + keys: + accesKeyId: acces-key-id + secretAccessKey: secret-access-key + rclone: + # Any additional environment variables to pass to rclone. + env: {} # Custom labels to add to kubernetes resources #labels: cron: @@ -185,6 +206,7 @@ mastodon: enabled: exporterUri: namePrefix: + nameSeparator: workers: - name: all-queues @@ -384,6 +406,7 @@ mastodon: enabled: exporterUri: namePrefix: + nameSeparator: # HTTP cache buster configuration. # See the documentation for more information about this feature: @@ -413,6 +436,7 @@ mastodon: enabled: false exporterUri: namePrefix: mastodon + nameSeparator: "-" # Sets the PREPARED_STATEMENTS environment variable: https://docs.joinmastodon.org/admin/config/#prepared_statements preparedStatements: true