4. 快照技术基础:etcd 快照、节点快照、Volume 快照的区别与联系

在 Kubernetes 集群升级与回退演练中,快照是保障数据一致性和可恢复性的核心手段。不同维度的快照服务于不同的恢复目标,理解其差异与协同关系,是设计可靠回退策略的前提。

4.1 三类快照的定位与作用域

快照类型 作用对象 恢复粒度 典型场景
etcd 快照 集群控制面状态(Pod、Service、ConfigMap、RBAC 等) 整个集群或指定资源 控制面故障、版本回退、集群迁移
节点快照 节点操作系统、kubelet 配置、容器运行时状态 单节点 节点级升级失败、内核/驱动回退
Volume 快照 持久化存储卷(PVC 后端存储) 单个卷或卷组 有状态应用数据恢复、数据库回滚
关键认知:三类快照并非替代关系,而是互补关系。etcd 快照恢复集群“逻辑拓扑”,节点快照恢复“计算环境”,Volume 快照恢复“业务数据”。一次完整的回退演练通常需要三者协同。

4.2 三类快照的创建与存储机制

4.2.1 etcd 快照

  • 创建方式:使用 etcdctl snapshot save 命令或 kube-apiserver 的自动备份机制。
  • 存储位置:通常保存为本地文件或上传至对象存储(S3、GCS)。
  • 恢复方式:停止 etcd 服务,使用 etcdctl snapshot restore 重建数据目录后重启。
  • 注意事项:快照包含集群全部资源定义,但不包含 Pod 内临时文件或容器日志。
# 创建 etcd 快照示例
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-snapshot-$(date +%Y%m%d%H%M%S).db

# 恢复 etcd 快照示例
ETCDCTL_API=3 etcdctl snapshot restore /backup/etcd-snapshot-20250301120000.db \
  --data-dir=/var/lib/etcd-restored \
  --initial-cluster=master=https://192.168.1.10:2380 \
  --initial-cluster-=etcd-cluster-1 \
  --initial-advertise-peer-urls=https://192.168.1.10:2380

4.2.2 节点快照

  • 创建方式:通过云厂商快照 API(如 AWS EBS Snapshot、Azure VM Snapshot)或本地工具(LVM 快照、Btrfs 快照)。
  • 存储位置:云厂商存储后端或本地存储池。
  • 恢复方式:从快照创建新节点实例,或回滚至原节点磁盘。
  • 注意事项:节点快照通常包含整个根卷,恢复后需确保 kubelet 证书和节点身份与集群一致。

4.2.3 Volume 快照

  • 创建方式:通过 Kubernetes VolumeSnapshot CRD 对象触发 CSI 驱动创建。
  • 存储位置:由 CSI 驱动决定,通常为存储后端快照(如 Ceph RBD Snapshot、NFS Snapshot)。
  • 恢复方式:从 VolumeSnapshot 创建 PersistentVolumeClaim,挂载至 Pod。
  • 注意事项:需要集群安装 snapshot-controller 和对应 CSI 驱动,且存储后端支持快照功能。
# VolumeSnapshot 资源定义示例
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
  name: mysql-data-snapshot-20250301
spec:
  volumeSnapshotClassName: csi-hostpath-snapclass
  source:
    persistentVolumeClaimName: mysql-data-pvc

4.3 三类快照的协同关系

在节点池升级回退场景中,三类快照的协同关系可以用以下流程概括:

三类快照在节点池升级回退中的协同关系 节点池升级触发 快照创建阶段(升级前) etcd 快照 集群控制面状态 节点快照 节点 OS + kubelet Volume 快照 持久化业务数据 升级执行与验证 升级成功 → 清理快照 升级失败 → 回退恢复

4.4 三类快照的核心差异对比

对比维度 etcd 快照 节点快照 Volume 快照
数据一致性 强一致(Raft 协议保证) 崩溃一致(需文件系统冻结) 崩溃一致或应用一致(取决于 CSI 驱动)
恢复时间 分钟级(需重建 etcd 集群) 分钟级(需重建或回滚节点) 秒级至分钟级(取决于存储后端)
存储开销 小(仅存储 KV 数据) 大(整盘镜像) 中(仅存储卷差异数据)
依赖组件 etcdctl、etcd 集群 云厂商 API 或本地存储工具 snapshot-controller、CSI 驱动
回退粒度 集群级 节点级 卷级
实践建议:在节点池升级回退演练中,建议按以下优先级创建快照:
1. etcd 快照 — 必须,用于恢复集群控制面状态。
2. 节点快照 — 推荐,用于快速回滚节点环境。
3. Volume 快照 — 按需,仅对有状态应用的关键数据卷创建。

4.5 快照生命周期管理要点

  • 快照命名规范:建议包含集群名称、节点池名称、时间戳和快照类型,便于快速识别。
  • 快照保留策略:升级验证通过后,及时清理过期快照,避免存储成本膨胀。
  • 快照完整性校验:恢复演练前,应定期对快照进行恢复测试,确保快照可用。
  • 跨区域备份:关键 etcd 快照建议同步至异地存储,防止单点故障。
常见误区:仅创建 etcd 快照而忽略节点快照,可能导致节点升级失败后无法恢复节点级配置(如内核参数、CNI 插件版本)。反之,仅创建节点快照而忽略 etcd 快照,则可能因控制面状态不一致导致集群分裂。三类快照应视为一个整体策略。