diff --git a/mariadb/Chart.yaml b/mariadb/Chart.yaml index 34cdff5da..7660428ed 100644 --- a/mariadb/Chart.yaml +++ b/mariadb/Chart.yaml @@ -15,7 +15,7 @@ apiVersion: v1 appVersion: v10.6.7 description: OpenStack-Helm MariaDB name: mariadb -version: 0.2.31 +version: 0.2.32 home: https://mariadb.com/kb/en/ icon: http://badges.mariadb.org/mariadb-badge-180x60.png sources: diff --git a/mariadb/templates/bin/_liveness.sh.tpl b/mariadb/templates/bin/_liveness.sh.tpl new file mode 100644 index 000000000..485b61793 --- /dev/null +++ b/mariadb/templates/bin/_liveness.sh.tpl @@ -0,0 +1,68 @@ +#!/usr/bin/env bash + +{{/* +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/}} + +set -e + +MYSQL="mysql \ + --defaults-file=/etc/mysql/admin_user.cnf \ + --host=localhost \ +{{- if .Values.manifests.certificates }} + --ssl-verify-server-cert=false \ + --ssl-ca=/etc/mysql/certs/ca.crt \ + --ssl-key=/etc/mysql/certs/tls.key \ + --ssl-cert=/etc/mysql/certs/tls.crt \ +{{- end }} + --connect-timeout 2" + +mysql_status_query () { + STATUS=$1 + $MYSQL -e "show status like \"${STATUS}\"" | \ + awk "/${STATUS}/ { print \$NF; exit }" +} + +{{- if eq (int .Values.pod.replicas.server) 1 }} +if ! $MYSQL -e 'select 1' > /dev/null 2>&1 ; then + exit 1 +fi + +{{- else }} +if [ -f /var/lib/mysql/sst_in_progress ]; then + # SST in progress, with this node receiving a snapshot. + # MariaDB won't be up yet; avoid killing. + exit 0 +fi + +if [ "x$(mysql_status_query wsrep_ready)" != "xON" ]; then + # WSREP says the node can receive queries + exit 1 +fi + +if [ "x$(mysql_status_query wsrep_connected)" != "xON" ]; then + # WSREP connected + exit 1 +fi + +if [ "x$(mysql_status_query wsrep_cluster_status)" != "xPrimary" ]; then + # Not in primary cluster + exit 1 +fi + +wsrep_local_state_comment=$(mysql_status_query wsrep_local_state_comment) +if [ "x${wsrep_local_state_comment}" != "xSynced" ] && [ "x${wsrep_local_state_comment}" != "xDonor/Desynced" ]; then + # WSREP not synced or not sending SST + exit 1 +fi +{{- end }} diff --git a/mariadb/templates/configmap-bin.yaml b/mariadb/templates/configmap-bin.yaml index a1e3657ec..cc92eb69e 100644 --- a/mariadb/templates/configmap-bin.yaml +++ b/mariadb/templates/configmap-bin.yaml @@ -29,6 +29,8 @@ data: {{- end }} readiness.sh: | {{ tuple "bin/_readiness.sh.tpl" . | include "helm-toolkit.utils.template" | indent 4 }} + liveness.sh: | +{{ tuple "bin/_liveness.sh.tpl" . | include "helm-toolkit.utils.template" | indent 4 }} start.py: | {{ tuple "bin/_start.py.tpl" . | include "helm-toolkit.utils.template" | indent 4 }} stop.sh: | diff --git a/mariadb/templates/statefulset.yaml b/mariadb/templates/statefulset.yaml index 31d322b5c..b78f69d7c 100644 --- a/mariadb/templates/statefulset.yaml +++ b/mariadb/templates/statefulset.yaml @@ -17,6 +17,11 @@ exec: command: - /tmp/readiness.sh {{- end }} +{{- define "mariadbLivenessProbe" }} +exec: + command: + - /tmp/liveness.sh +{{- end }} {{- if (.Values.global).subchart_release_name }} {{- $_ := set . "deployment_name" .Chart.Name }} @@ -200,7 +205,7 @@ spec: command: - /tmp/stop.sh {{ dict "envAll" . "component" "server" "container" "mariadb" "type" "readiness" "probeTemplate" (include "mariadbReadinessProbe" . | fromYaml) | include "helm-toolkit.snippets.kubernetes_probe" | indent 10 }} -{{ dict "envAll" . "component" "server" "container" "mariadb" "type" "liveness" "probeTemplate" (include "mariadbReadinessProbe" . | fromYaml) | include "helm-toolkit.snippets.kubernetes_probe" | indent 10 }} +{{ dict "envAll" . "component" "server" "container" "mariadb" "type" "liveness" "probeTemplate" (include "mariadbLivenessProbe" . | fromYaml) | include "helm-toolkit.snippets.kubernetes_probe" | indent 10 }} volumeMounts: - name: pod-tmp mountPath: /tmp @@ -220,6 +225,10 @@ spec: mountPath: /tmp/readiness.sh subPath: readiness.sh readOnly: true + - name: mariadb-bin + mountPath: /tmp/liveness.sh + subPath: liveness.sh + readOnly: true - name: mariadb-etc mountPath: /etc/mysql/my.cnf subPath: my.cnf diff --git a/releasenotes/notes/mariadb.yaml b/releasenotes/notes/mariadb.yaml index c7a9ca84b..75f5f8d14 100644 --- a/releasenotes/notes/mariadb.yaml +++ b/releasenotes/notes/mariadb.yaml @@ -47,4 +47,5 @@ mariadb: - 0.2.29 Uplift Mariadb-ingress to 1.5.1 - 0.2.30 Replace node-role.kubernetes.io/master with control-plane - 0.2.31 Update kubernetes registry to registry.k8s.io + - 0.2.32 Prevent liveness probe from killing pods during SST ...