如何分析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支持三种类型的卷插件: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默认禁用):
源和目标声明必须位于相同的命名空间中。
在Kubernetes创建一个克隆
要使用现有Kubernetes卷中的数据预先填充新的卷,请使用PersistentVolumeClaim中的dataSource字段。有三个参数:
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问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程之家行业资讯频道了解更多相关知识。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。