Kubernetes中MySQL Helm Chart设置多副本(replicas=3)后就绪/存活探针失败及PVC绑定问题排查
问题分析与解决方案
首先,咱们先明确核心问题:你使用的这个旧版MySQL Helm Chart(原stable仓库的)本身不支持直接通过设置replicas=3来部署多副本MySQL——它默认是为单实例设计的,直接改副本数会触发一系列问题,咱们拆解来看:
问题成因
- PVC绑定失败:默认情况下,这个Chart的PersistentVolumeClaim(PVC)访问模式是
ReadWriteOnce,意味着每个PV只能被单个Pod挂载。当你设置replicas=3时,Kubernetes会尝试创建3个PVC,但如果集群里没有足够的可用PV,就会出现FailedScheduling的错误。 - MySQL实例启动失败:就算有足够的PV,直接启动3个独立的MySQL实例也会出问题——这个Chart的初始化脚本、探针配置都是针对单实例设计的,多实例情况下(没有配置主从复制机制),MySQL进程可能因为初始化逻辑冲突、数据目录异常等原因无法正常启动,导致
/var/run/mysqld/mysqld.sock文件缺失,进而触发存活/就绪探针失败。
可通过Helm参数修改的解决方案
这个Chart其实内置了主从复制的配置项,要部署3个Pod的MySQL集群,你需要开启主从模式,而不是直接设置replicas:
- 在
values.yaml中配置以下参数:mysql: replication: enabled: true # 开启主从复制功能 slaveReplicas: 2 # 设置从节点数量,加上主节点一共3个Pod persistence: storageClass: "你的存储类名称" # 确保存储类能动态创建PV,或者集群有足够的静态PV - 重新部署Chart:
helm upgrade --install 你的发布名 stable/mysql -f 你的values.yaml
这样配置后,Chart会自动创建1个主Pod和2个从Pod,并且配置好主从复制的逻辑,每个Pod会绑定自己的PVC,探针也能正常工作。
关于Chart的多副本支持说明
这个旧版stable/mysql Chart支持主从模式的多副本部署,但不支持直接设置replicas来启动多个独立实例——因为MySQL本身是有状态服务,独立实例无法保证数据一致性,而主从模式才是官方Chart设计的多副本部署方式。另外需要注意,现在Helm的stable仓库已经被归档,建议后续考虑迁移到更完善的MySQL Chart版本。
内容的提问来源于stack exchange,提问作者IntoxicateR




