# MySQL ![Version: 0.1.4](https://img.shields.io/badge/Version-0.1.4-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 8.0.31](https://img.shields.io/badge/AppVersion-8.0.31--oracle-informational?style=flat-square) ## Changelog see [RELEASENOTES.md](RELEASENOTES.md) A Helm chart for MySQL on Kubernetes ## TL;DR ```bash helm repo add groundhog2k https://groundhog2k.github.io/helm-charts/ helm install my-release groundhog2k/mysql ``` ## Introduction This chart uses the original [MySQL image from Docker Hub](https://hub.docker.com/_/mysql) to deploy a stateful MySQL instance in a Kubernetes cluster. It fully supports deployment of the multi-architecture docker image. ## Prerequisites - Kubernetes 1.12+ - Helm 3.x - PV provisioner support in the underlying infrastructure ## Installing the Chart To install the chart with the release name `my-release`: ```bash helm install my-release groundhog2k/mysql ``` ## Uninstalling the Chart To uninstall/delete the `my-release` deployment: ```bash helm uninstall my-release ``` ## Common parameters | Key | Type | Default | Description | |-----|------|---------|-------------| | fullnameOverride | string | `""` | Fully override the deployment name | | nameOverride | string | `""` | Partially override the deployment name | ## Deployment parameters | Key | Type | Default | Description | |-----|------|---------|-------------| | image.pullPolicy | string | `"IfNotPresent"` | Image pull policy | | image.registry | string | `"docker.io"` | Image registry | | image.repository | string | `"mysql"` | Image name | | image.tag | string | `""` | Image tag | | imagePullSecrets | list | `[]` | Image pull secrets | | extraInitContainers | list | `[]` | Extra init containers | | extaContainers | list | `[]` | Extra containers for usage as sidecars | | startupProbe | object | `see values.yaml` | Startup probe configuration | | livenessProbe | object | `see values.yaml` | Liveness probe configuration | | readinessProbe | object | `see values.yaml` | Readiness probe configuration | | customStartupProbe | object | `{}` | Custom startup probe (overwrites default startup probe configuration) | | customLivenessProbe | object | `{}` | Custom liveness probe (overwrites default liveness probe configuration) | | customReadinessProbe | object | `{}` | Custom readiness probe (overwrites default readiness probe configuration) | | resources | object | `{}` | Resource limits and requests | | nodeSelector | object | `{}` | Deployment node selector | | podAnnotations | object | `{}` | Additional pod annotations | | podSecurityContext | object | `see values.yaml` | Pod security context | | securityContext | object | `see values.yaml` | Container security context | | env | list | `[]` | Additional container environmment variables | | serviceAccount.annotations | object | `{}` | Additional service account annotations | | serviceAccount.create | bool | `false` | Enable service account creation | | serviceAccount.name | string | `""` | Name of the service account | | affinity | object | `{}` | Affinity for pod assignment | | tolerations | list | `[]` | Tolerations for pod assignment | | podManagementPolicy | string | `"OrderedReady"` | Pod management policy | | updateStrategyType | string | `"RollingUpdate"` | Pod update strategy | | revisionHistoryLimit | int | `nil` | Maximum number of revisions maintained in revision history ## Service paramters | Key | Type | Default | Description | |-----|------|---------|-------------| | service.type | string | `"ClusterIP"` | Service type | | service.port | int | `3306` | MySQL service port | | service.nodePort | int | `nil` | The node port (only relevant for type LoadBalancer or NodePort) | | service.clusterIP | string | `nil` | The cluster ip address (only relevant for type LoadBalancer or NodePort) | | service.loadBalancerIP | string | `nil` | The load balancer ip address (only relevant for type LoadBalancer) | | service.annotations | object | `{}` | Additional service annotations | ## Storage parameters | Key | Type | Default | Description | |-----|------|---------|-------------| | storage.accessModes[0] | string | `"ReadWriteOnce"` | Storage access mode | | storage.persistentVolumeClaimName | string | `nil` | PVC name when existing storage volume should be used | | storage.volumeName | string | `"db-volume"` | Internal volume name and prefix of a created PVC | | storage.requestedSize | string | `nil` | Size for new PVC, when no existing PVC is used | | storage.className | string | `nil` | Storage class name | ## MySQL parameters | Key | Type | Default | Description | |-----|------|---------|-------------| | userDatabase | object | `{}` | Optional MySQL user database | | userDatabase.name | string | `""` | Name of the user database | | userDatabase.user | string | `""` | User name with full access to user database| | userDatabase.password | string | `""` | Password of created user | | settings.rootPassword | string | `nil` | MySQL root password | | settings.allowEmptyRootPassword | bool | `false` | Set true to allow an empty root password | | settings.skipTZInfo | bool | `false` | Set true to skip loading timezone data during init | | settings.arguments | list | `[]` | Additional arguments for mysqld (entrypoint process) | | customConfig | string | `nil` | Additional MySQL custom configuration mounted as `/etc/mysql/custom.cnf` | | extraEnvSecrets | list | `[]` | A list of existing secrets that will be mounted into the container as environment variables | | extraSecretConfigs | string | `nil` | An existing secret with files that will be mounted into the container as custom MySQL configuration files (`*.cnf`) in `/etc/mysql/conf.d` | | customScripts | object | `nil` | Optional custom scripts that can be defined inline and will be mounted as files in `/docker-entrypoint-initdb.d` | | extraScripts | string | `nil` | An existing configMap with files that will be mounted into the container as script files (`*.sql`, `*.sh`) in `/docker-entrypoint-initdb.d` | | extraSecrets | list | `[]` | A list of additional existing secrets that will be mounted into the container | | extraSecrets[].name | string | `nil` | Name of the existing K8s secret | | extraSecrets[].mountPath | string | `nil` | Mount path where the secret should be mounted into the container (f.e. /mysecretfolder) |