Kubernetes集群管理员如何创建VolumeSnapshotContents
静态预配置Kubernetes EBS卷快照操作指南
Kubernetes卷快照概念文档提及卷快照支持预配置:
集群管理员可创建多个VolumeSnapshotContents,这类对象承载存储系统上真实卷快照的详细信息,可供集群用户使用,存在于Kubernetes API中可被消费。
报错根因
操作失败的核心原因是手动创建的PV使用了K8s内置的AWSElasticBlockStore存储类型,而卷快照功能仅支持CSI驱动管理的存储卷,快照控制器无法识别非CSI类型的PV源,因此抛出cannot find CSI PersistentVolumeSource for volume错误。
静态预配置EBS卷快照的正确流程
不需要额外创建PV、PVC,直接基于已有的EBS快照创建VolumeSnapshotContent(简称VSC)和VolumeSnapshot(简称VS)即可,步骤如下:
- 前置检查:确认集群已安装EBS CSI驱动、snapshot-controller组件,且已创建适配EBS CSI驱动的VolumeSnapshotClass,驱动字段为
ebs.csi.aws.com - 步骤1:创建VolumeSnapshotContent
示例YAML如下:
apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotContent metadata: name: precreated-ebs-snapshot-content spec: deletionPolicy: Retain # 若需要删除VS时同时删除后端EBS快照可改为Delete driver: ebs.csi.aws.com source: snapshotHandle: aws://<AWS区域ID>/<你的EBS快照ID> # 示例:aws://cn-northwest-1/snap-0123456789abcdef volumeSnapshotClassName: ebs-csi-snapshot-class # 替换为你实际的VolumeSnapshotClass名称 volumeSnapshotRef: name: mongodb-restore-snapshot namespace: <你的业务命名空间>
- 步骤2:创建VolumeSnapshot绑定上述VSC
示例YAML如下:
apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: mongodb-restore-snapshot namespace: <你的业务命名空间> spec: source: volumeSnapshotContentName: precreated-ebs-snapshot-content volumeSnapshotClassName: ebs-csi-snapshot-class # 和VSC配置的类名保持一致
- 步骤3:验证快照可用
执行kubectl get volumesnapshot mongodb-restore-snapshot -n <命名空间>,待READY_TO_USE字段变为true即可使用。 - 步骤4:用快照恢复MongoDB数据
创建PVC时指定数据源为上述VS,即可将EBS快照的数据恢复到新PVC中,再使用该PVC部署Bitnami MongoDB副本集即可,PVC示例如下:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mongodb-data-pvc namespace: <你的业务命名空间> spec: accessModes: - ReadWriteOnce storageClassName: ebs-csi-sc # 替换为你实际使用的EBS CSI StorageClass名称 resources: requests: storage: <和原快照容量一致的存储大小> dataSource: name: mongodb-restore-snapshot kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io
额外说明
如果确实需要手动创建PV用于其他场景,需要将PV的Source字段配置为CSI类型,和集群自动生成的PV格式一致,不要使用旧的AWSElasticBlockStore类型,否则无法使用快照、扩容等CSI专属功能。
内容的提问来源于stack exchange,提问作者David Resnick
相关产品推荐
相关产品推荐

