第 15 章 · 生产化:高可用、备份、多环境与选型速查
本章汇总 上集群后如何稳态运行:容量规划、备份恢复、多环境隔离,以及应用商店 22 个分类 的选型速查表。
前置:完成第 1~14 章任一全栈剧本。
15.1 生产化成熟度模型
| 级别 | 特征 | 小紫对应能力 |
|---|
| L1 演示 | 单节点、单副本、NodePort 直连 | 应用商店四步向导 |
| L2 可运维 | 监控告警、日志、备份、命名空间隔离 | 第 6/10 章 + 管理 → 备份恢复 |
| L3 可扩展 | Ingress、CI/CD、配置中心 | 第 11~13 章 |
| L4 高可用 | 多副本无状态、外置 HA 中间件、跨节点 | 多节点 kubeadm + 外置 DB/MQ 集群 |
商店多数有状态组件默认 副本数 1 + 单 PVC(第 1 章约束)。生产 HA 通常需要:外置托管服务 或 多实例分片架构(如 TiDB 全组件、RocketMQ 多 Broker),超出单容器模板时需自定义 YAML 或专业版部署方案。
15.2 高可用(HA)策略
15.2.1 无状态应用(推荐先做多副本)
spec:
replicas: 3
strategy:
type: RollingUpdate
| 要点 | 说明 |
|---|
| 前置条件 | 应用无本地磁盘状态;Session 放 Redis |
| Service | ClusterIP 自动负载均衡 |
| 入口 | Ingress / APISIX 指到 Service |
| 发布 | 应用部署 → 升级 滚动更新;maxUnavailable: 0 |
15.2.2 有状态组件(单副本现实)
| 组件 | 商店默认 | 生产 HA 方向 |
|---|
| MySQL | 1 副本 + PVC | 主从复制(自建第二实例);或云 RDS |
| Redis | 1 副本 | Redis Sentinel / 云缓存 |
| Kafka | 单容器 KRaft | 3 Broker 集群(自定义) |
| RocketMQ | NameServer + 单 Broker | 多 Broker、DLedger |
| Elasticsearch | single-node | 3 节点集群 + 副本分片 |
| MinIO | 单节点 | 分布式 MinIO 4+ 节点 |
小紫界面:有状态组件先保证 PVC 在 Longhorn 资源池、定期 备份;HA 改造前在测试 Namespace 验证。
15.2.3 控制面与节点
| 项 | 建议 |
|---|
| 集群 | kubeadm 多 Master(小紫云计算第 3 章) |
| 存储 | Longhorn 多副本 策略(集群插件) |
| 调度 | 关键 Pod 用 podAntiAffinity 分散节点 |
15.3 备份与恢复
15.3.1 Namespace 级备份
管理 → 备份恢复:
| 操作 | 说明 |
|---|
| 导出 | 选择 data、app、middleware 等 Namespace |
| 定时 | 配置 cron 表达式(若界面支持) |
| 恢复 | 新集群导入 YAML + 还原 PVC 快照 |
15.3.2 组件级备份要点
| 组件 | 备份对象 | 方式 |
|---|
| MySQL | 数据目录 + 逻辑备份 | mysqldump;PVC 快照 |
| PostgreSQL | PGDATA | pg_dump;快照 |
| MongoDB | /data/db | mongodump |
| Redis | RDB/AOF | BGSAVE;PVC 快照 |
| MinIO | Bucket 对象 | mc mirror 到异地 |
| Jenkins | /var/jenkins_home | PVC 快照 |
| Gitea | /data | PVC 快照 |
| etcd(若自建) | 快照 API | 集群灾难恢复 |
15.3.3 备份验收
| # | 步骤 |
|---|
| 1 | 备份前写入测试数据(如 MySQL 表 backup_test) |
| 2 | 执行 Namespace 导出 |
| 3 | 删除 Deployment(保留 PVC 或连卷删) |
| 4 | 从备份恢复 |
| 5 | 验证 backup_test 数据仍在 |
15.4 多环境隔离
15.4.1 Namespace 规划
| 环境 | Namespace 示例 | 说明 |
|---|
| 开发 | dev-data、dev-app | 低配资源、可频繁重建 |
| 测试 | test-data、test-app | 与生产同拓扑、脱敏数据 |
| 预发 | staging-app | 连生产只读库或镜像库 |
| 生产 | data、app、middleware | 严格变更流程 |
15.4.2 配置隔离
| 方式 | 用法 |
|---|
| 环境变量 | 每环境 Deployment 不同 MYSQL_HOST |
| Nacos / Apollo | Namespace 或 Cluster 隔离配置 |
| 镜像 tag | api:dev / api:prod |
| Registry | 同一仓库不同 tag;生产禁止 latest |
15.4.3 网络与权限
- 生产 Namespace NetworkPolicy(若集群启用):仅允许
app → data
- RBAC:开发账号只读
dev-*;CI 服务账号仅能 kubectl set image 到 app
15.4.4 多环境联调剧本
| 步骤 | dev | prod |
|---|
| MySQL | mysql.dev-data | mysql.data |
| 连接串 | appdb_dev | appdb |
| 入口 | NodePort 直连 | Ingress + 域名 |
| 监控 | 可选 | Prometheus 告警必开 |