[MARIADB] Provide S3 Backup for MariaDB instances
[oom.git] / kubernetes / common / common / templates / _mariadb.tpl
index 7e127e2..a0dd49d 100644 (file)
 */}}
 {{- define "common.mariadbService" -}}
   {{- if .Values.global.mariadbGalera.localCluster -}}
+  {{-   if and .Values.global.mariadbGalera.useOperator  (index .Values "mariadb-galera" "mariadbOperator" "galera" "enabled") }}
+    {{- printf "%s-primary" (index .Values "mariadb-galera" "nameOverride") -}}
+  {{-   else }}
     {{- index .Values "mariadb-galera" "nameOverride" -}}
+  {{-   end }}
   {{- else -}}
+  {{-   if .Values.global.mariadbGalera.useOperator }}
+    {{- printf "%s-primary" (.Values.global.mariadbGalera.service) }}
+  {{-   else }}
     {{- .Values.global.mariadbGalera.service -}}
+  {{-   end }}
   {{- end -}}
 {{- end -}}
 
 apiVersion: mariadb.mmontes.io/v1alpha1
 kind: Database
 metadata:
-  name: {{ $dbname }}
+  name: {{ $dbinst }}-{{ $dbname }}
 spec:
+  name: {{ $dbname }}
   mariaDbRef:
     name: {{ $dbinst }}
   characterSet: utf8
   collate: utf8_general_ci
+  retryInterval: 5s
 {{- end -}}
 
 {{/*
@@ -140,10 +150,9 @@ spec:
 apiVersion: mariadb.mmontes.io/v1alpha1
 kind: User
 metadata:
-  name: {{ $dbuser }}
+  name: {{ $dbinst }}-{{ $dbuser }}
 spec:
-  # If you want the user to be created with a different name than the resource name
-  # name: user-custom
+  name: {{ $dbuser }}
   mariaDbRef:
     name: {{ $dbinst }}
   passwordSecretKeyRef:
@@ -151,6 +160,7 @@ spec:
     key: password
   # This field is immutable and defaults to 10
   maxUserConnections: 100
+  retryInterval: 5s
 {{- end -}}
 
 {{/*
@@ -174,6 +184,7 @@ spec:
   database: {{ $dbname }}
   table: "*"
   username: {{ $dbuser }}
+  retryInterval: 5s
   grantOption: true
 {{- end -}}
 
@@ -183,26 +194,37 @@ spec:
 {{- define "common.mariadbOpBackup" -}}
 {{- $dot := default . .dot -}}
 {{- $dbinst := include "common.name" $dot -}}
+{{- $name := default $dbinst $dot.Values.backup.nameOverride -}}
+---
+apiVersion: mariadb.mmontes.io/v1alpha1
 kind: Backup
 metadata:
-  name: backup-scheduled
+  name: {{ $name }}
 spec:
   mariaDbRef:
     name: {{ $dbinst }}
   schedule:
-    cron: "*/1 * * * *"
+    cron: {{ $dot.Values.backup.cron }}
     suspend: false
-  maxRetentionDays: 30
+  maxRetention: {{ $dot.Values.backup.maxRetention }}
   storage:
+    {{- if eq $dot.Values.backup.storageType "PVC" }}
     persistentVolumeClaim:
       resources:
         requests:
-          storage: 100Mi
-      {{- if .Values.mariadbOperator.storageClassName }}
-      storageClassName: {{ .Values.mariadbOperator.storageClassName }}
+          storage: {{ $dot.Values.backup.persistence.size }}
+      {{- if $dot.Values.mariadbOperator.storageClassName }}
+      storageClassName: {{ $dot.Values.mariadbOperator.storageClassName }}
       {{- end }}
       accessModes:
-        - ReadWriteOnce
+        - {{ $dot.Values.backup.persistence.accessMode }}
+    {{- end }}
+    {{- if eq $dot.Values.backup.storageType "S3" }}
+    s3: {{- include "common.tplValue" ( dict "value" .Values.backup.s3 "context" $) | nindent 6 }}
+    {{- end }}
+    {{- if eq $dot.Values.backup.storageType "volume" }}
+    volume: {{- include "common.tplValue" ( dict "value" .Values.backup.volume "context" $) | nindent 6 }}
+    {{- end }}
   resources:
     requests:
       cpu: 100m
@@ -241,27 +263,20 @@ spec:
   rootPasswordSecretKeyRef:
     name: {{ $dbrootsecret }}
     key: password
-  image:
-    repository: {{ include "repositoryGenerator.dockerHubRepository" . }}/{{ .Values.mariadbOperator.image }}
-    tag: {{ $dot.Values.mariadbOperator.appVersion }}
-    pullPolicy: IfNotPresent
+  image: {{ include "repositoryGenerator.dockerHubRepository" . }}/{{ .Values.mariadbOperator.image }}:{{ $dot.Values.mariadbOperator.appVersion }}
+  imagePullPolicy: IfNotPresent
   imagePullSecrets:
     - name: {{ include "common.namespace" . }}-docker-registry-key
   port: 3306
   replicas: {{ $dot.Values.replicaCount }}
+  {{- if $dot.Values.mariadbOperator.galera.enabled }}
   galera:
-    {{- if eq (int $dot.Values.replicaCount) 1 }}
-    enabled: false
-    {{- else }}
-    enabled: {{ $dot.Values.mariadbOperator.galera.enabled }}
-    {{- end }}
+    enabled: true
     sst: mariabackup
     replicaThreads: 1
     agent:
-      image:
-        repository: {{ include "repositoryGenerator.githubContainerRegistry" . }}/{{ .Values.mariadbOperator.galera.agentImage }}
-        tag: {{ $dot.Values.mariadbOperator.galera.agentVersion }}
-        pullPolicy: IfNotPresent
+      image: {{ include "repositoryGenerator.githubContainerRegistry" . }}/{{ .Values.mariadbOperator.galera.agentImage }}:{{ $dot.Values.mariadbOperator.galera.agentVersion }}
+      imagePullPolicy: IfNotPresent
       port: 5555
       kubernetesAuth:
         enabled: true
@@ -269,21 +284,23 @@ spec:
       gracefulShutdownTimeout: 5s
     recovery:
       enabled: true
-      clusterHealthyTimeout: 5m
-      clusterBootstrapTimeout: 10m
-      podRecoveryTimeout: 5m
-      podSyncTimeout: 10m
+      clusterHealthyTimeout: 5m0s
+      clusterBootstrapTimeout: 10m0s
+      podRecoveryTimeout: 5m0s
+      podSyncTimeout: 10m0s
     initContainer:
-      image:
-        repository: {{ include "repositoryGenerator.githubContainerRegistry" . }}/{{ $dot.Values.mariadbOperator.galera.initImage }}
-        tag: {{ $dot.Values.mariadbOperator.galera.initVersion }}
-        pullPolicy: IfNotPresent
+      image: {{ include "repositoryGenerator.githubContainerRegistry" . }}/{{ $dot.Values.mariadbOperator.galera.initImage }}:{{ $dot.Values.mariadbOperator.galera.initVersion }}
+      imagePullPolicy: IfNotPresent
     volumeClaimTemplate:
+      {{- if .Values.mariadbOperator.storageClassName }}
+      storageClassName: {{ .Values.mariadbOperator.storageClassName }}
+      {{- end }}
       resources:
         requests:
           storage: 50Mi
       accessModes:
         - ReadWriteOnce
+  {{- end }}
   livenessProbe:
     exec:
       command:
@@ -302,6 +319,10 @@ spec:
     initialDelaySeconds: 20
     periodSeconds: 10
     timeoutSeconds: 5
+  {{- if default false .Values.global.metrics.enabled }}
+  metrics:
+    enabled: true
+  {{- end }}
   affinity:
     podAntiAffinity:
       requiredDuringSchedulingIgnoredDuringExecution:
@@ -314,19 +335,6 @@ spec:
     maxUnavailable: 50%
   updateStrategy:
     type: RollingUpdate
-  #myCnf: |
-  #  [mysqld]
-  #  bind-address=0.0.0.0
-  #  default_storage_engine=InnoDB
-  #  binlog_format=row
-  #  innodb_autoinc_lock_mode=2
-  #  max_allowed_packet=256M
-  #  lower_case_table_names = 1
-
-  #  ## Character set
-  #  collation_server=utf8_unicode_ci
-  #  init_connect='SET NAMES utf8'
-  #  character_set_server=utf8
 
   myCnfConfigMapKeyRef:
     key: my.cnf
@@ -334,11 +342,11 @@ spec:
   resources: {{ include "common.resources" . | nindent 4 }}
   volumeClaimTemplate:
     {{- if $dot.Values.mariadbOperator.storageClassName }}
-    storageClassName: {{ $dot.Values.k8ssandraOperator.persistence.storageClassName }}
+    storageClassName: {{ $dot.Values.mariadbOperator.storageClassName }}
     {{- end }}
     resources:
       requests:
-        storage: {{ $dot.Values.persistence.size | quote }}
+        storage: {{ $dot.Values.mariadbOperator.persistence.size | quote }}
     accessModes:
       - ReadWriteOnce
 {{-  if $dot.Values.db.user }}