适用场景
K8s 集群最容易出大事的两件事:etcd 没了(集群状态全丢)和证书过期(集群「集体失联」)。这两件事都有标准解法,而且必须提前演练,不能等到出事再查文档。
配置步骤(etcd 备份与恢复)
# 1) 快照备份(在控制面节点执行)
ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
snapshot save /backup/etcd/snap-$(date +%Y%m%d%H%M).db
# 2) 校验快照
ETCDCTL_API=3 etcdctl snapshot status /backup/etcd/snap-*.db -w table
# 3) 定时任务(cron 示例:每小时一次,保留 72 份)
# 0 * * * * /opt/etcd-backup.sh >> /var/log/etcd-backup.log 2>&1
# 4) 恢复(在测试集群或故障恢复时)
# ETCDCTL_API=3 etcdctl snapshot restore /backup/etcd/snap.db \
# --data-dir=/var/lib/etcd-restore
# 然后修改 etcd 静态 Pod 的 hostPath 指向新目录并重启
关键参数与建议
- etcd 备份:定时快照(snapshot save)到外部存储,保留多份并校验
- 备份验证:定期在测试集群用快照恢复一次,确认可用
- 升级顺序:先升级控制面(逐个),再升级工作节点,最后升级组件(CNI/CSI/Ingress)
- 版本跳跃:跨大版本必须按官方支持的路径逐级升级,禁止跨两级
- 证书:确认 kubelet/API Server 证书有效期,到期前轮换,并纳入监控
- 回滚:etcd 快照 + 节点镜像保留,明确回滚触发条件
- 验证:升级后验证 Pod 调度、网络、存储、Ingress 四类功能
- 文档:升级记录含版本、时间、执行人、问题与回滚点
容易踩的坑
- 没做 etcd 快照,集群故障只能重建
- 快照存本地磁盘,与控制面同盘一起坏
- 只备份不校验,恢复时发现快照损坏
- 从不演练恢复,真恢复时权限与路径都是错的
- 备份文件没加密、权限过宽,被非授权获取
- 恢复过程改错目录,导致集群起不来
验证与巡检
ls -lh /backup/etcd/ | tail -5
ETCDCTL_API=3 etcdctl snapshot status /backup/etcd/$(ls -t /backup/etcd | head -1) -w table
# 目标:快照定时生成、状态可读、异地存一份、季度恢复演练
- 巡检:快照新鲜度 < 1 小时、状态校验通过、异地副本存在、演练记录在案
小结
K8s 生命周期验收:etcd 快照可恢复、证书有效期有余量、升级按支持路径执行且四类功能验证通过。
> 说明:文中命令为通用写法,不同型号/版本可能略有差异,落地前请对照设备实际版本的官方文档;带外管理与安全设备变更建议先在测试设备验证。