前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >介绍Kubernetes的卷克隆Alpha

介绍Kubernetes的卷克隆Alpha

作者头像
CNCF
发布2019-12-04 16:29:59
1.4K0
发布2019-12-04 16:29:59
举报
文章被收录于专栏:CNCF

作者:John Griffith(红帽)

Kubernetes v1.15引入了对卷克隆的alpha支持。该特性允许使用Kubernetes API使用用户命名空间中现有卷的内容创建新卷。

什么是克隆?

许多存储系统提供创建卷的“克隆”功能。克隆是一个现有卷的副本,它是系统上自己惟一的卷,但是源上的数据被复制到目标(克隆)。克隆类似于快照,因为它是卷的一个时间点副本,但是我们不是从卷创建一个新的快照对象,而是创建一个新的独立卷,有时被认为是预填充新创建的卷。

为什么要把克隆技术加到Kubernetes

Kubernetes卷插件系统已经提供了一个强大的抽象,可以自动提供、附加和挂载块和文件存储。

所有这些特性的目标是支持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 - 必须是""
代码语言:javascript
复制
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-clone
  Namespace: demo-namespace
spec:
  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的未来版本可能提供将卷资源从一个命名空间传输到另一个命名空间的能力。这个特性还在讨论和设计中,可能在将来的版本中可用,也可能不可用。

我怎样才能学到更多?

你可以在存储概念文档和CSI文档中找到关于克隆特性的附加文档。

https://k8s.io/docs/concepts/storage/volume-pvc-datasource.md

https://kubernetes-csi.github.io/docs/volume-cloning.html

我如何参与其中?

和所有Kubernetes一样,这个项目也是来自不同背景的贡献者共同努力的结果。

我们非常感谢Kubernetes存储SIG和CSI社区的所有贡献者,他们帮助审查了项目的设计和实施,包括但不限于以下内容:

Saad Ali(saadali)

Tim Hockin(thockin)

Jan Šafránek(jsafrane)

Michelle Au(msau42)

Xing Yang(xing-yang)

如果你有兴趣参与CSI或Kubernetes存储系统的任何部分的设计和开发,请加入Kubernetes存储特殊兴趣小组(SIG)。我们正在快速成长,并且一直欢迎新的贡献者。

https://github.com/kubernetes/community/tree/master/sig-storage

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CNCF 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档