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
VolumeSnapshotCRD 对象触发 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 三类快照的协同关系
在节点池升级回退场景中,三类快照的协同关系可以用以下流程概括:
4.4 三类快照的核心差异对比
| 对比维度 | etcd 快照 | 节点快照 | Volume 快照 |
|---|---|---|---|
| 数据一致性 | 强一致(Raft 协议保证) | 崩溃一致(需文件系统冻结) | 崩溃一致或应用一致(取决于 CSI 驱动) |
| 恢复时间 | 分钟级(需重建 etcd 集群) | 分钟级(需重建或回滚节点) | 秒级至分钟级(取决于存储后端) |
| 存储开销 | 小(仅存储 KV 数据) | 大(整盘镜像) | 中(仅存储卷差异数据) |
| 依赖组件 | etcdctl、etcd 集群 | 云厂商 API 或本地存储工具 | snapshot-controller、CSI 驱动 |
| 回退粒度 | 集群级 | 节点级 | 卷级 |
实践建议:在节点池升级回退演练中,建议按以下优先级创建快照:
1. etcd 快照 — 必须,用于恢复集群控制面状态。
2. 节点快照 — 推荐,用于快速回滚节点环境。
3. Volume 快照 — 按需,仅对有状态应用的关键数据卷创建。
1. etcd 快照 — 必须,用于恢复集群控制面状态。
2. 节点快照 — 推荐,用于快速回滚节点环境。
3. Volume 快照 — 按需,仅对有状态应用的关键数据卷创建。
4.5 快照生命周期管理要点
- 快照命名规范:建议包含集群名称、节点池名称、时间戳和快照类型,便于快速识别。
- 快照保留策略:升级验证通过后,及时清理过期快照,避免存储成本膨胀。
- 快照完整性校验:恢复演练前,应定期对快照进行恢复测试,确保快照可用。
- 跨区域备份:关键 etcd 快照建议同步至异地存储,防止单点故障。
常见误区:仅创建 etcd 快照而忽略节点快照,可能导致节点升级失败后无法恢复节点级配置(如内核参数、CNI 插件版本)。反之,仅创建节点快照而忽略 etcd 快照,则可能因控制面状态不一致导致集群分裂。三类快照应视为一个整体策略。