kubernetes - Kubernetes 集群管理员如何创建 VolumeSnapshotContents?
问题描述
Kubernetes卷快照概念文档提到卷快照可以预先配置;
集群管理员创建了许多 VolumeSnapshotContents。它们携带存储系统上的真实卷快照的详细信息,可供集群用户使用。它们存在于 Kubernetes API 中,可供使用。
这是怎么做到的?
一些背景知识:我正在尝试从 EBS 快照创建 k8s 卷快照(VS)。我想使用 VS 来恢复使用 Bitnami helm chart 部署的 mongodb 副本集。
我尝试使用此方法创建 VS 而不创建 VolumeSnapshotContents:
- 创建 EBS 快照。
- 从快照创建 EBS 卷。
- 从 EBS 卷创建持久卷 (PV)。
- 创建持久卷声明 (PVC) 以绑定到 PV。
- 通过使用 PVC 创建 pod 将 PVC 绑定到 PV。
- 从 PVC 创建 VolumeSnapshot (VS)。
最后一步失败并出现此错误:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning SnapshotContentCreationFailed 21s snapshot-controller Failed to create snapshot content with error cannot find CSI PersistentVolumeSource for volume mongo-with-data
这是因为在步骤 3 中创建的 PV 将其作为其 Source:
Source:
Type: AWSElasticBlockStore (a Persistent Disk resource in AWS)
VolumeID: vol-049483f660a6a66cf
FSType:
Partition: 0
ReadOnly: false
而通过使用 PVC 创建 pod 创建的 PV(在幕后)具有此 Source
Source:
Type: CSI (a Container Storage Interface (CSI) volume source)
Driver: ebs.csi.aws.com
FSType: ext4
VolumeHandle: vol-05b14044113937bee
ReadOnly: false
VolumeAttributes: storage.kubernetes.io/csiProvisionerIdentity=1625656807749-8081-ebs.csi.aws.com
两个 PV 具有相同的StorageClass
.
解决方案
这是怎么做到的?
底层驱动因素决定了这一点。该驱动程序可以是 CSI 驱动程序或传统的树驱动程序。大多数涉及两个不同驱动程序的场景(即使两者都是 CSI 但它们是不同的 CSI 驱动程序)不受支持,因为许多资源(如VolumeSnapshotContent
)本质上是不透明的。这就是第 6 步失败的原因。
我对整个工作流程感到有点迷茫,我不确定集群是如何设置的,CSI 驱动程序和树驱动程序都试图使用相同的存储类......但是,您可以逐步制作 CSI 类型的 PV 3. 你有关注这个样本吗?
我还认为,通过直接利用 EBS 卷而不是创建中间 PV,整个过程可以变得更容易。我没有要确认的 AWS 帐户,但似乎 AWS 为您提供了 EBS 快照 ID,您可以VolumeSnapshotContent
根据此示例直接在 中引用它。
推荐阅读
- mongodb - 将嵌入在数组中的文档的多个元素(集合中的字段)与一个元素进行比较
- vba - 如何读取txt文件并将其导入访问表
- r - 是否可以通过 eventReactive() 在全局环境中存储数据框
- ruby-on-rails - ruby 中的创建函数返回 ActiveRecord::Relation 对象而不是实际记录
- linux - 返回小于给定日期的月末日期并在 shell 中停止在 12 个日期
- linux - 为unix文件中的每一行附加不同的计数
- java - 无效的赋值运算符错误 >= Java
- java - 如何创建自定义类的数组
- forms - 尝试在 Gatsby 的 Hubspot 表单上设置自定义 ID
- visual-studio-code - 冲突的 eslint 规则:尾随逗号与意外标记