2. K8s存储基础回顾:PV、PVC、StorageClass核心概念与生命周期管理
在深入卷加密与回滚策略之前,必须牢固掌握Kubernetes存储的三大核心抽象:PersistentVolume(PV)、PersistentVolumeClaim(PVC)和StorageClass。这三者构成了K8s声明式存储的基石,也是后续所有安全变更操作的操作对象。
2.1 三大核心概念速览
| 概念 | 角色 | 类比(传统运维) | 关键属性 |
|---|---|---|---|
| PV | 集群资源(存储的“物理”抽象) | 已挂载的NFS共享 / iSCSI LUN | 容量、访问模式、回收策略、存储类 |
| PVC | 用户请求(存储的“需求”声明) | 申请“50GB 读写多次”的工单 | 请求容量、访问模式、选择器、存储类 |
| StorageClass | 动态供应模板(存储的“品类”定义) | 云硬盘规格目录(SSD/HDD/加密型) | Provisioner、参数、回收策略、绑定模式 |
核心原则:PV是资源,PVC是请求,StorageClass是自动化工厂。PVC与PV的绑定是一对一的,绑定后PVC成为Pod内卷的“凭证”。
2.2 生命周期管理流程
K8s存储的生命周期分为静态供应和动态供应两条路径,理解这两条路径对后续设计加密回滚策略至关重要。
2.2.1 静态供应(Static Provisioning)
- 管理员预先创建PV,指定容量、访问模式和存储后端细节。
- 用户创建PVC,声明需求(如:5GB,ReadWriteOnce)。
- K8s调度器将PVC与满足条件的PV进行匹配绑定。
- Pod引用PVC,挂载到容器路径。
2.2.2 动态供应(Dynamic Provisioning)
- 用户创建PVC,并指定
storageClassName。 - StorageClass的Provisioner(如
kubernetes.io/aws-ebs、csi-hostpath)自动调用后端API创建存储卷。 - 系统自动生成对应的PV,并与PVC绑定。
- Pod引用PVC完成挂载。
生产建议:动态供应是主流方式,尤其在云原生环境中。StorageClass允许统一配置加密参数(如 encrypted: "true"、kmsKeyId),是实现“加密门禁”的第一道防线。
2.3 访问模式与回收策略
这两个属性直接决定了卷能否被多个Pod共享,以及删除PVC后数据如何处理——在加密场景中,回收策略尤其关键。
2.3.1 访问模式(Access Modes)
| 模式 | 缩写 | 说明 | 典型后端 |
|---|---|---|---|
| ReadWriteOnce | RWO | 单节点读写 | 大多数块存储(EBS、Cinder) |
| ReadOnlyMany | ROX | 多节点只读 | 共享文件系统(NFS、GlusterFS) |
| ReadWriteMany | RWX | 多节点读写 | 分布式文件系统(CephFS、EFS) |
| ReadWriteOncePod | RWOP | 单Pod读写(K8s 1.22+) | CSI驱动支持 |
2.3.2 回收策略(Reclaim Policy)
- Retain(保留):删除PVC后,PV进入
Released状态,数据保留,需管理员手动清理。适合加密卷审计场景。 - Delete(删除):删除PVC时,PV和后端存储卷一并删除。适合临时卷,但加密密钥需同步销毁。
- Recycle(回收):已弃用,不建议使用。
加密安全警示:若使用Delete回收策略,务必确保存储后端在删除卷时同步擦除加密元数据。对于敏感数据,建议使用Retain策略,并在回滚流程中增加手动密钥吊销步骤。
2.4 StorageClass关键参数与加密配置
StorageClass是动态供应的核心,也是注入加密策略的最佳位置。以下是一个启用AWS EBS加密的StorageClass示例:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: encrypted-ebs-sc
provisioner: ebs.csi.aws.com
parameters:
type: gp3
encrypted: "true" # 启用加密
kmsKeyId: "arn:aws:kms:..." # 指定KMS密钥
csi.storage.k8s.io/fstype: ext4
reclaimPolicy: Retain # 加密卷建议Retain
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
关键参数解读:encrypted: "true" 开启卷加密;kmsKeyId 指定加密密钥;volumeBindingMode: WaitForFirstConsumer 延迟绑定,确保Pod调度到节点后再创建卷,避免跨AZ加密密钥分发问题。
2.5 生命周期状态机
PV的状态转换是理解存储故障和回滚触发条件的基础。以下是PV的完整状态机:
| 状态 | 含义 | 触发条件 | 加密相关关注点 |
|---|---|---|---|
| Available | 可用,未绑定 | PV创建完成 | 检查加密属性是否已设置 |
| Bound | 已绑定到PVC | PVC匹配成功 | 加密密钥已关联,卷可正常使用 |
| Released | PVC已删除,PV待回收 | 删除PVC(Retain策略) | 数据仍加密存在,需手动处理密钥 |
| Failed | 自动回收失败 | Delete策略下后端删除出错 | 可能导致加密卷残留,需人工介入 |
回滚设计启示:当需要回滚存储变更时,若PV处于Bound状态,需先处理Pod和PVC;若处于Released状态,可直接操作PV的加密属性或重建。理解状态机是设计安全回滚步骤的前提。