apiVersion: v1 kind: Service metadata: name: mysql namespace: {{ .Release.Namespace }} annotations: argocd.argoproj.io/sync-wave: "-1" labels: app.kubernetes.io/name: mysql app.kubernetes.io/part-of: loops spec: clusterIP: None selector: app.kubernetes.io/name: mysql app.kubernetes.io/part-of: loops ports: - name: mysql port: 3306 targetPort: mysql --- apiVersion: apps/v1 kind: StatefulSet metadata: name: mysql namespace: {{ .Release.Namespace }} annotations: argocd.argoproj.io/sync-wave: "-1" labels: app.kubernetes.io/name: mysql app.kubernetes.io/part-of: loops spec: serviceName: mysql replicas: 1 selector: matchLabels: app.kubernetes.io/name: mysql app.kubernetes.io/part-of: loops template: metadata: labels: app.kubernetes.io/name: mysql app.kubernetes.io/part-of: loops spec: terminationGracePeriodSeconds: 120 securityContext: fsGroup: 999 fsGroupChangePolicy: OnRootMismatch containers: - name: mysql image: mysql:8.4.11 imagePullPolicy: IfNotPresent args: - --character-set-server=utf8mb4 - --collation-server=utf8mb4_unicode_ci - --innodb-file-per-table=1 ports: - name: mysql containerPort: 3306 env: - name: MYSQL_DATABASE value: loops - name: MYSQL_USER value: loops - name: MYSQL_PASSWORD valueFrom: secretKeyRef: name: {{ .Values.mysql.authSecret }} key: password - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: {{ .Values.mysql.authSecret }} key: root-password readinessProbe: exec: command: - sh - -ec - mysqladmin ping -h 127.0.0.1 -u root -p"$MYSQL_ROOT_PASSWORD" --silent initialDelaySeconds: 10 periodSeconds: 5 timeoutSeconds: 5 livenessProbe: exec: command: - sh - -ec - mysqladmin ping -h 127.0.0.1 -u root -p"$MYSQL_ROOT_PASSWORD" --silent initialDelaySeconds: 600 periodSeconds: 10 timeoutSeconds: 5 resources: requests: cpu: 250m memory: 768Mi limits: cpu: "2" memory: 2Gi volumeMounts: - name: data mountPath: /var/lib/mysql volumeClaimTemplates: - metadata: name: data spec: accessModes: - ReadWriteOnce storageClassName: {{ .Values.mysql.storageClass | quote }} resources: requests: storage: {{ .Values.mysql.storageSize }} --- apiVersion: v1 kind: Service metadata: name: valkey namespace: {{ .Release.Namespace }} annotations: argocd.argoproj.io/sync-wave: "-1" labels: app.kubernetes.io/name: valkey app.kubernetes.io/part-of: loops spec: clusterIP: None selector: app.kubernetes.io/name: valkey app.kubernetes.io/part-of: loops ports: - name: valkey port: 6379 targetPort: valkey --- apiVersion: apps/v1 kind: StatefulSet metadata: name: valkey namespace: {{ .Release.Namespace }} annotations: argocd.argoproj.io/sync-wave: "-1" labels: app.kubernetes.io/name: valkey app.kubernetes.io/part-of: loops spec: serviceName: valkey replicas: 1 selector: matchLabels: app.kubernetes.io/name: valkey app.kubernetes.io/part-of: loops template: metadata: labels: app.kubernetes.io/name: valkey app.kubernetes.io/part-of: loops spec: terminationGracePeriodSeconds: 60 securityContext: runAsNonRoot: true runAsUser: 999 runAsGroup: 999 fsGroup: 999 fsGroupChangePolicy: OnRootMismatch containers: - name: valkey image: valkey/valkey-bundle:9.0.6-alpine imagePullPolicy: IfNotPresent command: - sh - -ec - exec valkey-server --loadmodule /usr/lib/valkey/libvalkey_bloom.so --appendonly yes --appendfsync everysec --requirepass "$VALKEY_PASSWORD" env: - name: VALKEY_PASSWORD valueFrom: secretKeyRef: name: {{ .Values.valkey.authSecret }} key: password ports: - name: valkey containerPort: 6379 readinessProbe: exec: command: - sh - -ec - valkey-cli --no-auth-warning -a "$VALKEY_PASSWORD" ping | grep -qx PONG initialDelaySeconds: 3 periodSeconds: 5 timeoutSeconds: 3 livenessProbe: exec: command: - sh - -ec - valkey-cli --no-auth-warning -a "$VALKEY_PASSWORD" ping | grep -qx PONG initialDelaySeconds: 20 periodSeconds: 10 timeoutSeconds: 5 resources: requests: cpu: 100m memory: 256Mi limits: cpu: "1" memory: 1Gi volumeMounts: - name: data mountPath: /data volumeClaimTemplates: - metadata: name: data spec: accessModes: - ReadWriteOnce storageClassName: {{ .Values.valkey.storageClass | quote }} resources: requests: storage: {{ .Values.valkey.storageSize }} --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: app-data namespace: {{ .Release.Namespace }} labels: app.kubernetes.io/part-of: loops spec: accessModes: - ReadWriteMany storageClassName: {{ .Values.persistence.storageClass | quote }} resources: requests: storage: {{ .Values.persistence.storageSize }} {{- if .Values.s3BucketJob.enabled }} --- apiVersion: batch/v1 kind: Job metadata: name: create-media-bucket namespace: {{ .Release.Namespace }} labels: app.kubernetes.io/name: create-media-bucket app.kubernetes.io/part-of: loops spec: ttlSecondsAfterFinished: 300 backoffLimit: 5 template: metadata: labels: app.kubernetes.io/name: create-media-bucket app.kubernetes.io/part-of: loops spec: restartPolicy: OnFailure containers: - name: aws-cli image: amazon/aws-cli:2.28.22 command: - /bin/sh - -ec - >- aws --endpoint-url "$S3_ENDPOINT" s3api head-bucket --bucket {{ .Values.s3BucketJob.bucket }} >/dev/null 2>&1 || aws --endpoint-url "$S3_ENDPOINT" s3api create-bucket --bucket {{ .Values.s3BucketJob.bucket }} >/dev/null env: - name: S3_ENDPOINT value: {{ .Values.s3BucketJob.endpoint | quote }} - name: AWS_DEFAULT_REGION value: {{ .Values.s3BucketJob.region | quote }} - name: AWS_ACCESS_KEY_ID valueFrom: secretKeyRef: name: {{ .Values.s3BucketJob.secretName }} key: access-key-id - name: AWS_SECRET_ACCESS_KEY valueFrom: secretKeyRef: name: {{ .Values.s3BucketJob.secretName }} key: secret-access-key {{- end }}