如何使用Helm在K8S上配置StatefulSet和PVC部署MySQL主从集群?
- 内容介绍
- 文章标签
- 相关推荐
本文共计955个文字,预计阅读时间需要4分钟。
直接说结论:
为什么必须用 StatefulSet 而不是 Deployment
MySQL 主从依赖稳定的网络标识(如 mysql-0.mysql-service)、有序启停、以及每个实例独占持久卷。Deployment 无法保证 Pod 名称固定、无法按序创建、也无法为每个副本绑定唯一 PVC —— 这会导致:
-
mysql-1启动时连不上mysql-0(DNS 解析失败或地址漂移) - 两个从库挂载同一份 PVC,造成数据损坏
- 滚动更新时主库被杀,复制链断裂且无法自动恢复
Bitnami Chart 中 architecture: "replication" 模式会自动启用 StatefulSet,但前提是 primary.replicaCount 和 secondary.replicaCount 都设为 1(非 0),且 storageClass 支持动态供给或已预置对应数量的 PV。
StatefulSet 下 PVC 的正确配置方式
主从 Pod 各需独立 PVC,不能共用 storageClass 的同一个 volumeClaimTemplate 名称(否则会被当成同一份存储)。
本文共计955个文字,预计阅读时间需要4分钟。
直接说结论:
为什么必须用 StatefulSet 而不是 Deployment
MySQL 主从依赖稳定的网络标识(如 mysql-0.mysql-service)、有序启停、以及每个实例独占持久卷。Deployment 无法保证 Pod 名称固定、无法按序创建、也无法为每个副本绑定唯一 PVC —— 这会导致:
-
mysql-1启动时连不上mysql-0(DNS 解析失败或地址漂移) - 两个从库挂载同一份 PVC,造成数据损坏
- 滚动更新时主库被杀,复制链断裂且无法自动恢复
Bitnami Chart 中 architecture: "replication" 模式会自动启用 StatefulSet,但前提是 primary.replicaCount 和 secondary.replicaCount 都设为 1(非 0),且 storageClass 支持动态供给或已预置对应数量的 PV。
StatefulSet 下 PVC 的正确配置方式
主从 Pod 各需独立 PVC,不能共用 storageClass 的同一个 volumeClaimTemplate 名称(否则会被当成同一份存储)。

