✅ Kubernetes 单节点 MySQL(使用本地存储)有状态服务部署方案
⚠️ 注意:
- 本文不阐述 集群搭建 需准备至少 1个master + 1个worker(最好两个)
- 本文应用的是k8s v1.33.4 搭建的集群,不见得适合其他版本(未验证)
- 使用 手动创建的 Local PV(PersistentVolume) + PVC(PersistentVolumeClaim),属于 非动态、但标准、免费、可控 的本地存储方案。
- 不适合多节点高可用,但可通过 备份、监控、定期维护 保障业务连续性。
一. 📦部署总览
我们将按如下顺序部署以下 Kubernetes 资源,以确保依赖关系正确、存储先就绪:
- 🔐 Secret – 安全注入 MySQL root 密码
- 📂 ConfigMap – 配置 MySQL 参数(字符集、时区、连接数等)
- 🧩 PV & PVC(手动创建) – 手动创建本地 PV 与 PVC,绑定节点目录
- 🐳 StatefulSet – 运行 MySQL 容器,挂载 PVC 与 ConfigMap
- 🌐 Service – 提供集群内访问入口(ClusterIP)
- 🛡️ PodDisruptionBudget (PDB) – 保障服务可用性
二. 🔐 Secret:设置 MySQL Root 密码(安全注入)
📄 文件名:mysql-secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: mysql-secret
namespace: default
type: Opaque
stringData:
mysql-root-password: yumeko123!!! # 🔒 请替换为您自己的强密码!
✅ 请将
yumeko123!!!
替换为真正的强密码,比如包含大小写、数字、特殊符号。
三. 📂 ConfigMap:配置 MySQL(字符集、时区、连接数等)
📄 文件名:mysql-config-cm.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-custom-config
namespace: default
data:
my-custom.cnf: |
[mysqld]
# 字符集
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# 时区(推荐使用 UTC 偏移,避免依赖时区表)
default-time-zone = '+08:00' # 东八区,等同于 Asia/Shanghai
# InnoDB 缓冲池(根据节点内存调整,比如 256M~1G)
innodb_buffer_pool_size = 256M
四. 🧩 手动创建 PV 与 PVC(关键!绑定节点本地存储)
✅ 本步骤先于 StatefulSet,确保 PVC 已存在并被正确绑定到本地 PV