共计 3035 个字符,预计需要花费 8 分钟才能阅读完成。
如何分析 Kubernetes 的卷克隆 Alpha,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
什么是克隆?
许多存储系统提供创建卷的“克隆”功能。克隆是一个现有卷的副本,它是系统上自己惟一的卷,但是源上的数据被复制到目标(克隆)。克隆类似于快照,因为它是卷的一个时间点副本,但是我们不是从卷创建一个新的快照对象,而是创建一个新的独立卷,有时被认为是预填充新创建的卷。
为什么要把克隆技术加到 Kubernetes
Kubernetes 卷插件系统已经提供了一个强大的抽象,可以自动提供、附加和挂载块和文件存储。Kubernetes v1.15 引入了对卷克隆的 alpha 支持。该特性允许使用 Kubernetes API 使用用户命名空间中现有卷的内容创建新卷。
所有这些特性的目标是支持 Kubernetes 工作负载的可移植性:Kubernetes 的目标是在分布式系统应用程序和底层集群之间创建一个抽象层,这样应用程序就可以不知道它们所运行的集群的具体情况,并且应用程序部署不需要特定的存储设备知识。
Kubernetes 存储 SIG 将克隆操作确定为许多有状态工作负载的关键功能。例如,数据库管理员可能希望复制数据库卷,并创建现有数据库的另一个实例。
https://github.com/kubernetes/community/tree/master/sig-storage
通过在 Kubernetes API 中提供触发克隆操作的标准方法,Kubernetes 用户现在可以处理这样的用例,而无需环绕 Kubernetes API(以及手动执行存储系统特定的操作)。虽然克隆在行为上类似于创建卷快照,然后从快照创建卷,但是克隆操作更精简,对于许多后端设备更有效。
Kubernetes 用户现在可以以一种集群无关的方式,将克隆操作合并到他们的工具和政策中,并且可以放心地知道,无论底层存储是什么,克隆操作都可以针对任意的 Kubernetes 集群工作。
Kubernetes API 和克隆
Kubernetes 中的克隆特性是通过 PersistentVolumeClaim.DataSource 字段启用的。在 v1.15 之前,惟一允许作为数据源(dataSource)使用的有效对象类型是 VolumeSnapshot。克隆特性扩展了允许的 PersistentVolumeclaim.DataSource.Kind 字段不仅允许 VolumeSnapshot,还允许 PersistentVolumeClaim。现有行为不会更改。
没有引入新的对象来启用克隆。而是对 PersistentVolumeClaim 对象中的现有数据源字段进行了扩展,以便能够接受同一命名空间中现有的 PersistentVolumeClaim 的名称。重要的是要注意,从用户的角度来看,克隆只是另一个 PersistentVolume 和 PersistentVolumeClaim,惟一的区别是这个 PersistentVolume 是在创建时用另一个 PersistentVolume 的内容填充的。创建之后,它的行为与任何其他 Kubernetes PersistentVolume 完全相同,并遵循相同的行为和规则。
哪些卷插件支持 Kubernetes 克隆?
Kubernetes 支持三种类型的卷插件:in-tree、Flex 和容器存储接口(Container Storage Interface,CSI)。有关详细信息,请参阅 Kubernetes Volume Plugin FAQ。
https://github.com/container-storage-interface/spec/blob/master/spec.md
https://github.com/kubernetes/community/blob/master/sig-storage/volume-plugin-faq.md
克隆只支持 CSI 驱动程序(不支持 in-tree 或 Flex)。要使用 Kubernetes 克隆特性,请确保在集群上部署了实现克隆的 CSI 驱动程序。有关当前支持克隆的 CSI 驱动程序列表,请参阅 CSI 驱动程序文档。
https://kubernetes-csi.github.io/docs/drivers.html
Kubernetes 克隆需求
在使用 Kubernetes 卷克隆之前,你必须:
确保在 Kubernetes 集群上部署并运行实现克隆的 CSI 驱动程序。
通过新的 Kubernetes 特性门启用 Kubernetes 卷克隆特性(alpha 默认禁用):
在 API 服务器二进制文件上设置以下标志:–features-gates=VolumePVCDataSource=true
源和目标声明必须位于相同的命名空间中。
在 Kubernetes 创建一个克隆
要使用现有 Kubernetes 卷中的数据预先填充新的卷,请使用 PersistentVolumeClaim 中的 dataSource 字段。有三个参数:
name – 要用作源的 PersistentVolumeClaim 对象的名称
kind – 必须是 PersistentVolumeClaim
apiGroup – 必须是
apiVersion: v1kind: PersistentVolumeClaimmetadata: name: pvc-clone Namespace: demo-namespacespec: storageClassName: csi-storageclass dataSource: name: src-pvc kind: PersistentVolumeClaim apiGroup: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi # NOTE this capacity must be specified and must be = the capacity of the source volume
当创建 PersistentVolumeClaim 对象时,它将触发一个新的卷的供应,该卷预先填充了来自指定数据源卷的数据。实现卷的克隆是 CSI 插件的责任。
作为存储供应商,我如何将对克隆的支持添加到我的 CSI 驱动程序中?
有关如何在 CSI 插件中实现克隆的更多信息,请参考 CSI 文档中给 Kubernetes 开发 CSI 驱动程序的部分。
https://kubernetes-csi.github.io/docs/developing.html
alpha 的局限性是什么?
克隆 Kubernetes 的 alpha 实现有以下限制:
不支持跨不同命名空间克隆卷
不支持跨不同存储类(后端)克隆卷
未来
根据反馈和采用情况,Kubernetes 团队计划将 CSI 克隆实现在 1.16 版本推进到 beta。
关于克隆,用户经常遇到的一个问题是“跨命名空间克隆怎么样?”。如前所述,当前版本要求源和目标位于同一个命名空间中。不过,目前正在努力提出命名空间传输 API,Kubernetes 的未来版本可能提供将卷资源从一个命名空间传输到另一个命名空间的能力。
关于如何分析 Kubernetes 的卷克隆 Alpha 问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注丸趣 TV 行业资讯频道了解更多相关知识。