3 min read

Helm install Bitnami MariaDB Galera to hostPath

$ kubectl apply -f pvc.yaml

---
kind: Namespace
apiVersion: v1
metadata:
  name: mariadb-galera-new

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mariadb-galera-new-pv
  namespace: mariadb-galera-new
spec:
  storageClassName: manual
#  mountOptions:
#    - dir_mode=0777
#    - file_mode=0777
  capacity:
    storage: 40Gi
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: "/bitnami/mariadb-galera-new/"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mariadb-galera-new-pvc
  namespace: mariadb-galera-new
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 40Gi
  storageClassName: manual
  volumeMode: Filesystem
  volumeName: mariadb-galera-new-pv
---
apiVersion: v1
kind: Secret
metadata:
  name: mariadb-galera-new
  namespace: mariadb-galera-new
type: Opaque
data:
# base64 encoded!
  mariadb-galera-mariabackup-password: 
  mariadb-password: 
  mariadb-root-password: 
$ helm repo add bitnami https://charts.bitnami.com/bitnami
$ helm install mariadb-galera-new --namespace=mariadb-galera-new --values values.yaml bitnami/mariadb-galera

values.yaml

existingSecret: mariadb-galera-new
persistence.existingClaim: mariadb-galera-new-pvc
podAntiAffinityPreset: hard

or

$ helm install mariadb-galera-new --namespace=mariadb-galera-new -f fullConfig.yaml bitnami/mariadb-galera

fullConfig.yaml

affinity: {}
args: []
clusterDomain: cluster.local
command: []
commonAnnotations: {}
commonLabels: {}
configurationConfigMap: ''
containerPorts:
  galera: 4567
  ist: 4568
  mysql: 3306
  sst: 4444
containerSecurityContext:
  enabled: true
  runAsNonRoot: true
  runAsUser: 1001
customLivenessProbe: {}
customPasswordFiles: {}
customReadinessProbe: {}
customStartupProbe: {}
db:
  forcePassword: false
  name: my_database
  password: ''
  user: ''
diagnosticMode:
  args:
    - infinity
  command:
    - sleep
  enabled: false
existingSecret: 'mariadb-galera-new'
extraDeploy: []
extraEnvVars: []
extraEnvVarsCM: ''
extraEnvVarsSecret: ''
extraFlags: ''
extraVolumeMounts: []
extraVolumes: []
fullnameOverride: ''
galera:
  bootstrap:
    bootstrapFromNode: 0
    forceBootstrap: false
    forceSafeToBootstrap: false
  mariabackup:
    forcePassword: false
    password: ''
    user: mariabackup
  name: galera
global:
  imagePullSecrets: []
  imageRegistry: ''
  storageClass: ''
hostAliases: []
image:
  debug: false
  digest: ''
  pullPolicy: IfNotPresent
  pullSecrets: []
  registry: docker.io
  repository: bitnami/mariadb-galera
  tag: 10.6.11-debian-11-r0
initContainers: []
initdbScripts: {}
initdbScriptsConfigMap: ''
kubeVersion: ''
ldap:
  base: ''
  binddn: ''
  bindpw: ''
  bslookup: ''
  enabled: false
  filter: ''
  map: ''
  nss_initgroups_ignoreusers: root,nslcd
  scope: ''
  tls_reqcert: ''
  uri: ''
lifecycleHooks: {}
livenessProbe:
  enabled: true
  failureThreshold: 3
  initialDelaySeconds: 120
  periodSeconds: 10
  successThreshold: 1
  timeoutSeconds: 1
mariadbConfiguration: >-
  [client]

  port=3306

  socket=/opt/bitnami/mariadb/tmp/mysql.sock

  plugin_dir=/opt/bitnami/mariadb/plugin


  [mysqld]

  default_storage_engine=InnoDB

  basedir=/opt/bitnami/mariadb

  datadir=/bitnami/mariadb/data

  plugin_dir=/opt/bitnami/mariadb/plugin

  tmpdir=/opt/bitnami/mariadb/tmp

  socket=/opt/bitnami/mariadb/tmp/mysql.sock

  pid_file=/opt/bitnami/mariadb/tmp/mysqld.pid

  bind_address=0.0.0.0


  ## Character set

  ##

  collation_server=utf8_unicode_ci

  init_connect='SET NAMES utf8'

  character_set_server=utf8


  ## MyISAM

  ##

  key_buffer_size=32M

  myisam_recover_options=FORCE,BACKUP


  ## Safety

  ##

  skip_host_cache

  skip_name_resolve

  max_allowed_packet=16M

  max_connect_errors=1000000

  sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ONLY_FULL_GROUP_BY

  sysdate_is_now=1


  ## Binary Logging

  ##

  log_bin=mysql-bin

  expire_logs_days=14

  # Disabling for performance per
  http://severalnines.com/blog/9-tips-going-production-galera-cluster-mysql

  sync_binlog=0

  # Required for Galera

  binlog_format=row


  ## Caches and Limits

  ##

  tmp_table_size=32M

  max_heap_table_size=32M

  # Re-enabling as now works with Maria 10.1.2

  query_cache_type=1

  query_cache_limit=4M

  query_cache_size=256M

  max_connections=500

  thread_cache_size=50

  open_files_limit=65535

  table_definition_cache=4096

  table_open_cache=4096


  ## InnoDB

  ##

  innodb=FORCE

  innodb_strict_mode=1

  # Mandatory per https://github.com/codership/documentation/issues/25

  innodb_autoinc_lock_mode=2

  # Per https://www.percona.com/blog/2006/08/04/innodb-double-write/

  innodb_doublewrite=1

  innodb_flush_method=O_DIRECT

  innodb_log_files_in_group=2

  innodb_log_file_size=128M

  innodb_flush_log_at_trx_commit=1

  innodb_file_per_table=1

  # 80% Memory is default reco.

  # Need to re-evaluate when DB size grows

  innodb_buffer_pool_size=2G

  innodb_file_format=Barracuda


  ## Logging

  ##

  log_error=/opt/bitnami/mariadb/logs/mysqld.log

  slow_query_log_file=/opt/bitnami/mariadb/logs/mysqld.log

  log_queries_not_using_indexes=1

  slow_query_log=1


  ## SSL

  ## Use extraVolumes and extraVolumeMounts to mount /certs filesystem

  # ssl_ca=/certs/ca.pem

  # ssl_cert=/certs/server-cert.pem

  # ssl_key=/certs/server-key.pem


  [galera]

  wsrep_on=ON

  wsrep_provider=/opt/bitnami/mariadb/lib/libgalera_smm.so

  wsrep_sst_method=mariabackup

  wsrep_slave_threads=4

  wsrep_cluster_address=gcomm://

  wsrep_cluster_name=galera

  wsrep_sst_auth="root:"

  # Enabled for performance per
  https://mariadb.com/kb/en/innodb-system-variables/#innodb_flush_log_at_trx_commit

  innodb_flush_log_at_trx_commit=2

  # MYISAM REPLICATION SUPPORT #

  wsrep_replicate_myisam=ON


  [mariadb]

  plugin_load_add=auth_pam


  ## Data-at-Rest Encryption

  ## Use extraVolumes and extraVolumeMounts to mount /encryption filesystem

  # plugin_load_add=file_key_management

  # file_key_management_filename=/encryption/keyfile.enc

  # file_key_management_filekey=FILE:/encryption/keyfile.key

  # file_key_management_encryption_algorithm=AES_CTR

  # encrypt_binlog=ON

  # encrypt_tmp_files=ON


  ## InnoDB/XtraDB Encryption

  # innodb_encrypt_tables=ON

  # innodb_encrypt_temporary_tables=ON

  # innodb_encrypt_log=ON

  # innodb_encryption_threads=4

  # innodb_encryption_rotate_key_age=1


  ## Aria Encryption

  # aria_encrypt_tables=ON

  # encrypt_tmp_disk_tables=ON
metrics:
  enabled: false
  extraFlags: []
  image:
    digest: ''
    pullPolicy: IfNotPresent
    pullSecrets: []
    registry: docker.io
    repository: bitnami/mysqld-exporter
    tag: 0.14.0-debian-11-r55
  prometheusRules:
    additionalLabels:
      app: prometheus-operator
      release: prometheus
    enabled: false
    rules: {}
  resources:
    limits: {}
    requests: {}
  service:
    annotations:
      prometheus.io/port: '9104'
      prometheus.io/scrape: 'true'
    clusterIP: ''
    externalTrafficPolicy: Cluster
    loadBalancerIP: ''
    loadBalancerSourceRanges: []
    port: 9104
    type: ClusterIP
  serviceMonitor:
    enabled: false
    honorLabels: false
    interval: ''
    jobLabel: ''
    labels: {}
    metricRelabelings: []
    namespace: ''
    relabelings: []
    scrapeTimeout: ''
    selector: {}
nameOverride: ''
namespaceOverride: ''
nodeAffinityPreset:
  key: ''
  type: ''
  values: []
nodeSelector: {}
persistence:
  accessModes:
    - ReadWriteOnce
  annotations: {}
  enabled: true
  existingClaim: 'mariadb-galera-new-pvc'
  labels: {}
  mountPath: /bitnami/mariadb
  selector: {}
  size: 8Gi
  storageClass: ''
  subPath: ''
podAffinityPreset: ''
podAnnotations: {}
podAntiAffinityPreset: hard
podDisruptionBudget:
  create: false
  maxUnavailable: ''
  minAvailable: 1
podLabels: {}
podManagementPolicy: OrderedReady
podSecurityContext:
  enabled: true
  fsGroup: 1001
  runAsUser: 1001
priorityClassName: ''
rbac:
  create: false
readinessProbe:
  enabled: true
  failureThreshold: 3
  initialDelaySeconds: 30
  periodSeconds: 10
  successThreshold: 1
  timeoutSeconds: 1
replicaCount: 3
resources:
  limits: {}
  requests: {}
rootUser:
  forcePassword: false
  password: ''
  user: root
schedulerName: ''
service:
  annotations: {}
  clusterIP: ''
  externalIPs: []
  externalTrafficPolicy: Cluster
  extraPorts: []
  headless:
    annotations: {}
    publishNotReadyAddresses: true
  loadBalancerIP: ''
  loadBalancerSourceRanges: []
  nodePorts:
    mysql: ''
  ports:
    mysql: 3306
  sessionAffinity: None
  sessionAffinityConfig: {}
  type: ClusterIP
serviceAccount:
  annotations: {}
  automountServiceAccountToken: false
  create: false
  name: ''
sidecars: []
startupProbe:
  enabled: false
  failureThreshold: 48
  initialDelaySeconds: 120
  periodSeconds: 10
  successThreshold: 1
  timeoutSeconds: 1
tls:
  autoGenerated: false
  certCAFilename: ''
  certFilename: ''
  certKeyFilename: ''
  certificatesSecret: ''
  enabled: false
tolerations: []
topologySpreadConstraints: []
updateStrategy:
  type: RollingUpdate
usePasswordFiles: false