适用场景

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 快照可恢复、证书有效期有余量、升级按支持路径执行且四类功能验证通过。

> 说明:文中命令为通用写法,不同型号/版本可能略有差异,落地前请对照设备实际版本的官方文档;带外管理与安全设备变更建议先在测试设备验证。