M2芯片Docker Desktop集群Helm部署MariaDB遇CrashLoopBackOff问题
问题描述
在搭载ARM64架构M2芯片的MacBook的Docker Desktop集群中,使用groundhog2k/mariadb Helm Chart部署MariaDB:
- 添加Helm仓库:
helm repo add groundhog2k https://groundhog2k.github.io/helm-charts/
- 执行安装命令:
helm upgrade --install my-local-cluster groundhog2k/mariadb \ --version 0.8.0 \ --namespace mariadb \ --set auth.rootPassword="my-root-pwd" \ --set master.persistence.size=10Gi \ --set auth.username="my-usr-name" \ --set auth.password="my-pwd"
部署完成后MariaDB pod处于CrashLoopBackOff状态,执行k describe pod <mariadb pod name>得到如下信息:
Name: mariadb-local-0 Namespace: mariadb Priority: 0 Service Account: default Node: docker-desktop/192.168.65.4 Start Time: Wed, 08 Mar 2023 23:57:53 +0200 Labels: app.kubernetes.io/instance=mariadb-local app.kubernetes.io/name=mariadb controller-revision-hash=mariadb-local-7ff6bf79d4 statefulset.kubernetes.io/pod-name=mariadb-local-0 Annotations: checksum/customconfig: 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b checksum/customscripts: 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b checksum/scripts: 671b226b2c464f6559c47550c781cec6fe270ace6b56430db7e2867584b8658a checksum/secureconfig: 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b Status: Running IP: 10.1.0.70 IPs: IP: 10.1.0.70 Controlled By: StatefulSet/mariadb-local Init Containers: mariadb-init: Container ID: docker://41b3ed6d7875f2245c0515cfe8b255b11e9361a1a0f769a8134abf63d443f57c Image: docker.io/mariadb:10.11.2 Image ID: docker-pullable://mariadb@sha256:ec97b993b11423a5b60448c85e01e3f696aaf6dfbf6f83c12d03bb02563f134e Port: <none> Host Port: <none> Command: /initscripts/init.sh State: Terminated Reason: Completed Exit Code: 0 Started: Wed, 08 Mar 2023 23:58:16 +0200 Ready: True Restart Count: 0 Environment: <none> Mounts: /configs from configs (rw) /initscripts from initscripts (rw) /scripts from scripts (rw) /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-7gx5p (ro) Containers: mariadb: Container ID: docker://16e35d1eb9165dc36b9015c19ba57d3a18b8f9244aa495324a12db5d32ebb5eb Image: docker.io/mariadb:10.11.2 Image ID: docker-pullable://mariadb@sha256:ec97b993b11423a5b60448c85e01e3f696aaf6dfbf6f83c12d03bb02563f134e Port: 3306/TCP Host Port: 0/TCP State: Waiting Reason: CrashLoopBackOff Last State: Terminated Reason: Error Exit Code: 1 Started: Thu, 09 Mar 2023 14:10:57 +0200 Finished: Thu, 09 Mar 2023 14:10:57 +0200 Ready: False Restart Count: 85 Liveness: exec [bash -c mysqladmin status -uroot -p$MARIADB_ROOT_PASSWORD] delay=120s timeout=5s period=10s #success=1 #failure=3 Readiness: exec [bash -c mysqladmin status -uroot -p$MARIADB_ROOT_PASSWORD] delay=30s timeout=5s period=10s #success=1 #failure=3 Startup: exec [bash -c mysqladmin status -uroot -p$MARIADB_ROOT_PASSWORD] delay=10s timeout=5s period=10s #success=1 #failure=30 Environment: <none> Mounts: /docker-entrypoint-initdb.d from scripts (rw) /etc/mysql/conf.d from configs (rw) /tmp from tmp-volume (rw) /var/lib/mysql from db-volume (rw) /var/run/mysqld from tmp-volume (rw) /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-7gx5p (ro) Conditions: Type Status Initialized True Ready False ContainersReady False PodScheduled True Volumes: tmp-volume: Type: EmptyDir (a temporary directory that shares a pod's lifetime) Medium: SizeLimit: <unset> configs: Type: EmptyDir (a temporary directory that shares a pod's lifetime) Medium: SizeLimit: <unset> scripts: Type: EmptyDir (a temporary directory that shares a pod's lifetime) Medium: SizeLimit: <unset> initscripts: Type: ConfigMap (a volume populated by a ConfigMap) Name: mariadb-local-scripts Optional: false db-volume: Type: EmptyDir (a temporary directory that shares a pod's lifetime) Medium: SizeLimit: <unset> kube-api-access-7gx5p: Type: Projected (a volume that contains injected data from multiple sources) TokenExpirationSeconds: 3607 ConfigMapName: kube-root-ca.crt ConfigMapOptional: <nil> DownwardAPI: true QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning BackOff 4m3s (x1707 over 14h) kubelet Back-off restarting failed container
可能的故障原因
- 缺少必要环境变量:从Pod描述可见,MariaDB容器的
Environment为空,而MariaDB镜像启动时需要MARIADB_ROOT_PASSWORD、MARIADB_USER、MARIADB_PASSWORD等环境变量完成初始化。你通过Helm设置了auth.rootPassword等参数,但Chart未正确将这些参数注入容器环境变量,导致数据库启动失败。 - 持久化配置未生效:你设置了
master.persistence.size=10Gi,但Pod中的db-volume为EmptyDir临时目录,说明Chart未启用持久化存储。通常需要显式设置master.persistence.enabled=true,同时Docker Desktop集群需配置可用存储类,否则持久化卷无法创建,可能引发数据库初始化异常。 - 镜像架构兼容性问题:尽管你提到Chart适配ARM64,但使用的
mariadb:10.11.2镜像可能存在ARM64架构兼容性问题。可以检查镜像是否支持ARM64,或指定明确的ARM64镜像标签(如mariadb:10.11.2-arm64v8)。 - 探针依赖未满足:容器的存活、就绪探针使用
mysqladmin status -uroot -p$MARIADB_ROOT_PASSWORD,但环境变量缺失导致探针执行失败,进一步加剧CrashLoopBackOff状态。不过这是容器启动失败后的连锁反应,核心原因仍是容器本身无法正常启动。
内容的提问来源于stack exchange,提问作者user842225
相关产品推荐
相关产品推荐

