From b1f8cc3532794801721972cc4bb5418f307fd337 Mon Sep 17 00:00:00 2001 From: Jacob Cody Wimer Date: Thu, 7 Nov 2024 13:26:15 -0500 Subject: [PATCH] Added a replica mariadb for a dr environment --- .../kubernetes/manifests/mariadb-replica.yaml | 214 ++++++++++++++++++ .../manifests/mariadb-standalone.yaml | 2 + 2 files changed, 216 insertions(+) create mode 100644 deploy/kubernetes/manifests/mariadb-replica.yaml diff --git a/deploy/kubernetes/manifests/mariadb-replica.yaml b/deploy/kubernetes/manifests/mariadb-replica.yaml new file mode 100644 index 0000000..602f1af --- /dev/null +++ b/deploy/kubernetes/manifests/mariadb-replica.yaml @@ -0,0 +1,214 @@ +apiVersion: v1 +kind: Service +metadata: + name: wrestlingdev-mariadb + labels: + app: wrestlingdev +spec: + ports: + - port: 3306 + selector: + app: wrestlingdev + tier: mariadb + clusterIP: None +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: wrestlingdev-mariadb-pv-claim + labels: + app: wrestlingdev +spec: + # storageClassName: standard + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 20Gi +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: wrestlingdev-mariadb + labels: + app: wrestlingdev +spec: + selector: + matchLabels: + app: wrestlingdev + strategy: + type: Recreate + template: + metadata: + labels: + app: wrestlingdev + tier: mariadb + annotations: + prometheus.io/port: "9125" + prometheus.io/scrape: "true" + spec: + containers: + - image: mariadb:10.3 + name: mariadb + env: + - name: MARIADB_ROOT_PASSWORD + valueFrom: + secretKeyRef: + name: wrestlingdev-secrets + key: dbpassword + ports: + - containerPort: 3306 + name: mariadb + volumeMounts: + - name: wrestlingdev-mariadb-persistent-storage + mountPath: /var/lib/mysql + - name: mysettings-config-volume + mountPath: /etc/mysql/mariadb.conf.d + # resources: + # limits: + # memory: "512Mi" + # requests: + # memory: "256Mi" + # cpu: "0.2" + - image: jcwimer/mariadb-rclone-backup-docker:10.3 + name: mariadb-backup + env: + - name: DB_PASSWORD + valueFrom: + secretKeyRef: + name: wrestlingdev-secrets + key: dbpassword + - name: CRON_SCHEDULE + value: "*/5 * * * *" # every 5 minutes + - name: DB_USERNAME + valueFrom: + secretKeyRef: + name: wrestlingdev-secrets + key: dbusername + - name: DB_HOST + value: "127.0.0.1" + - name: DAYS_TO_KEEP + value: "7" + - name: RCLONE_TYPE + valueFrom: + secretKeyRef: + name: wrestlingdev-secrets + key: rclone_type + - name: S3_ACCESS_ID + valueFrom: + secretKeyRef: + name: wrestlingdev-secrets + key: s3_access_id + - name: S3_ACCESS_KEY + valueFrom: + secretKeyRef: + name: wrestlingdev-secrets + key: s3_access_key + - name: S3_ENDPOINT + valueFrom: + secretKeyRef: + name: wrestlingdev-secrets + key: s3_endpoint + - name: S3_REGION + valueFrom: + secretKeyRef: + name: wrestlingdev-secrets + key: s3_region + - name: RCLONE_EXTRA_ARGS + valueFrom: + secretKeyRef: + name: wrestlingdev-secrets + key: rclone_extra_args + - name: RCLONE_PATH + valueFrom: + secretKeyRef: + name: wrestlingdev-secrets + key: rclone_path + volumeMounts: + - name: wrestlingdev-mariadb-persistent-storage + mountPath: /var/lib/mysql + # resources: + # limits: + # memory: "100Mi" + # requests: + # memory: "50Mi" + # cpu: "0.1" + - image: prom/mysqld-exporter:v0.11.0 + name: mariadb-exporter + ports: + - containerPort: 9125 + name: "http" + args: + - --web.listen-address=0.0.0.0:9125 + - --web.telemetry-path=/metrics + - --collect.heartbeat + - --collect.heartbeat.database=sys_operator + env: + - name: DB_PASSWORD + valueFrom: + secretKeyRef: + name: wrestlingdev-secrets + key: dbpassword + - name: DB_USERNAME + valueFrom: + secretKeyRef: + name: wrestlingdev-secrets + key: dbusername + - name: DB_HOST + value: "127.0.0.1:3306" + - name: DATA_SOURCE_NAME + value: $(DB_USERNAME):$(DB_PASSWORD)@($(DB_HOST))/ + - name: DAYS_TO_KEEP + value: "7" + # resources: + # limits: + # memory: "128Mi" + # requests: + # memory: "32Mi" + # cpu: "10m" + livenessProbe: + httpGet: + path: /metrics + port: 9125 + initialDelaySeconds: 30 + periodSeconds: 30 + timeoutSeconds: 30 + volumes: + - name: wrestlingdev-mariadb-persistent-storage + persistentVolumeClaim: + claimName: wrestlingdev-mariadb-pv-claim + - name: mysettings-config-volume + configMap: + name: mariadb-mysettings +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: mariadb-mysettings + labels: + kubernetes.io/cluster-service: "true" + addonmanager.kubernetes.io/mode: EnsureExists +data: + 70-mysettings.cnf: | + [mariadb] + # Slow log + slow_query_log=1 + #slow_query_log_file=/var/log/mariadb/slow.log + slow_query_log_file=/var/lib/mysql/slow.log + long_query_time=0.2 + # mysqltunner recommendations + tmp_table_size=32M + max_heap_table_size=32M + performance_schema=ON + innodb_log_file_size=32M + table_open_cache=4000 + # replica settings + server_id=2 # Default server_id, can be overridden for master/slave + log_bin=mysql-bin # Enable binary logging + binlog_format=ROW # Recommended for replication + log_slave_updates=ON # Ensure slaves log updates (useful for multi-source replication) + sync_binlog=1 # Flush binary logs after each transaction for safety + read_only=0 # Default, will be managed by the init script + expire_logs_days=7 # Retain binary logs for 7 days + + # /etc/mysql/mariadb.conf.d/70-mysettings.cnf diff --git a/deploy/kubernetes/manifests/mariadb-standalone.yaml b/deploy/kubernetes/manifests/mariadb-standalone.yaml index 81bb2e7..6592da4 100644 --- a/deploy/kubernetes/manifests/mariadb-standalone.yaml +++ b/deploy/kubernetes/manifests/mariadb-standalone.yaml @@ -127,6 +127,8 @@ spec: volumeMounts: - name: wrestlingdev-mariadb-persistent-storage mountPath: /var/lib/mysql + - name: mysettings-config-volume + mountPath: /etc/mysql/mariadb.conf.d # resources: # limits: # memory: "100Mi"