270 lines
7.3 KiB
YAML
270 lines
7.3 KiB
YAML
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: mysql
|
|
namespace: {{ .Release.Namespace }}
|
|
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 }}
|
|
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 }}
|
|
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 }}
|
|
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 }}
|