Kubernetes对卷快照Alpha支持的现况

栏目: 编程工具 · 发布时间: 5年前

内容简介:作者:Jing Xu(谷歌)、Xing Yang(华为)、Saad Ali(谷歌)Kubernetes v1.12引入了卷快照(volume snapshot)支持作为alpha功能。在Kubernetes v1.13,它仍然是alpha功能,但增加了一些强化和一些重大更改。这篇文章总结了这些变化。

Kubernetes对卷快照Alpha支持的现况

作者:Jing Xu(谷歌)、Xing Yang(华为)、Saad Ali(谷歌)

Kubernetes v1.12引入了卷快照(volume snapshot)支持作为alpha功能。在Kubernetes v1.13,它仍然是alpha功能,但增加了一些强化和一些重大更改。这篇文章总结了这些变化。

重大更改

CSI spec v1.0 对卷快照功能进行了一些重大更改。CSI驱动程序维护者在升级其驱动程序以支持v1.0时,应该了解这些更改。

SnapshotStatus替换为Boolean ReadyToUse

在CSI v0.3.0,CreateSnapshotResponse中定义了SnapshotStatus枚举(enum),表示快照是READY,UPLOADING,还是ERROR_UPLOADING。在CSI v1.0,SnapshotStatus已从CreateSnapshotResponse中删除,并替换为布尔值(boolean)ReadyToUse。ReadyToUse值为true,表示完成后快照处理(post snapshot processing),例如上载,并且快照已准备好用作创建卷的源。

需要进行后快照处理的存储系统(例如在快照完成后上传),应该在快照完成后返回成功的CreateSnapshotResponse,并将ReadyToUse字段设置为false。这表示容器箱编排系统(Container Orchestration System,CO),可以恢复因为进行快照而停顿的任何工作负载。然后,CO可以重复调用CreateSnapshot,直到ReadyToUse字段设置为true,或该调用返回一个错误,指示处理中出现问题。CSI ListSnapshot调用可以与snapshot_id过滤一起使用,以确定快照是否可以使用,但不推荐使用这个方式,因为它无法在处理过程中检测错误(ReadyToUse字段只是无限期地保持为false)。

CSI外部快照边车容器(external-snapshotter sidecar container)的 v1.x.x版本 ,已通过调用CreateSnapshot,而不是ListSnapshots来处理此更改,以检查快照是否可以使用。当升级驱动程序到CSI 1.0时,驱动程序维护者应使用相应的1.0兼容边车(sidecar)容器。

为了与CSI规范的更改保持一致,VolumeSnapshot API对象中的Ready字段已重命名为ReadyToUse。当执行kubectl describe volumesnapshot以查看快照的详细信息时,用户可以看到此更改。

时间戳数据类型

快照的创建时间作为VolumeSnapshotContent API对象的一部分可供Kubernetes管理员使用。该字段使用CSI CreateSnapshotResponse中的creation_time字段填充。在CSI v1.0中,此creation_time字段类型已更改为.google.protobuf.Timestamp,而不是int64。将驱动程序升级到CSI 1.0时,驱动程序维护者必须相应地进行更改。CSI外部快照程序边车容器的 v1.x.x版本 已更新以处理此更改。

弃用

以下VolumeSnapshotClass参数已被弃用(deprecated),将在以后的版本中删除。它们将替换为下面Replacement“替换”部分中列出的参数。

弃用csiSnapshotterSecretName,替换csi.storage.k8s.io/snapshotter-secret-name

弃用csiSnapshotterSecretNameSpace,替换csi.storage.k8s.io/snapshotter-secret-namespace

新功能

SnapshotContent删除/保留(Deletion/Retain)政策

如在 宣布快照alpha的初始博客文章 中所述,Kubernetes快照API类似于PV/PVC API:就像卷(volume),由绑定的PVC和PV对表示一样,快照由绑定的VolumeSnapshot和VolumeSnapshotContent对表示。

对于PV/PVC对,当用户完成使用卷时,他们可以删除PVC。PV上的回收政策决定PV之后的处理(是删除,还是保留)。

在最初的alpha版本中,快照不支持指定回收政策的功能。当删除快照对象时,它总是导致快照被删除。在Kubernetes v1.13中,添加了快照内容DeletionPolicy。它使管理员,能够配置VolumeSnapshotContent在绑定的VolumeSnapshot对象被删除后的处理方式。卷快照的DeletionPolicy可以是Retain(删除)或Delete(保留)。如果未指定该值,则缺省值取决于SnapshotContent对象,是通过静态绑定,还是动态配置创建的。

Retain(保留)

Retain(保留)政策允许手动回收资源。如果是静态创建并绑定VolumeSnapshotContent,则默认的DeletionPolicy为Retain。删除VolumeSnapshot时,VolumeSnapshotContent继续存在,VolumeSnapshotContent被视为“已释放”(“released”)。但它不能用于绑定到其他VolumeSnapshot对象,因为它包含数据。由管理员决定如何处理剩余的API对象和资源清理。

Delete(删除)

Delete(删除)政策允许从Kubernetes自动删除绑定的VolumeSnapshotContent对象,以及外部基础结构中的关联存储资产(例如AWS EBS快照,或GCE PD快照等)。动态配置的快照会继承其VolumeSnapshotClass的删除政策,该政策默认为Delete。

管理员应使用所需的保留政策配置VolumeSnapshotClass。创建政策后,通过修补(patching)对象,可以更改单个VolumeSnapshotContent的政策。

以下示例演示如何检查动态调配的VolumeSnapshotContent的删除政策。

$ kubectl create -f ./examples/kubernetes/demo-defaultsnapshotclass.yaml
$ kubectl create -f ./examples/kubernetes/demo-snapshot.yaml
$ kubectl get volumesnapshots demo-snapshot-podpvc -o yaml
apiVersion: snapshot.storage.k8s.io/v1alpha1
kind: VolumeSnapshot
metadata:
  creationTimestamp: "2018-11-27T23:57:09Z"
...
spec:
  snapshotClassName: default-snapshot-class
  snapshotContentName: snapcontent-26cd0db3-f2a0-11e8-8be6-42010a800002
  source:
    apiGroup: null
    kind: PersistentVolumeClaim
    name: podpvc
status:
…
$ kubectl get volumesnapshotcontent snapcontent-26cd0db3-f2a0-11e8-8be6-42010a800002 -o yaml
apiVersion: snapshot.storage.k8s.io/v1alpha1
kind: VolumeSnapshotContent
…
spec:
  csiVolumeSnapshotSource:
    creationTime: 1546469777852000000
    driver: pd.csi.storage.gke.io
    restoreSize: 6442450944
    snapshotHandle: projects/jing-k8s-dev/global/snapshots/snapshot-26cd0db3-f2a0-11e8-8be6-42010a800002
  deletionPolicy: Delete
  persistentVolumeRef:
    apiVersion: v1
    kind: PersistentVolume
    name: pvc-853622a4-f28b-11e8-8be6-42010a800002
    resourceVersion: "21117"
    uid: ae400e9f-f28b-11e8-8be6-42010a800002
  snapshotClassName: default-snapshot-class
  volumeSnapshotRef:
    apiVersion: snapshot.storage.k8s.io/v1alpha1
    kind: VolumeSnapshot
    name: demo-snapshot-podpvc
    namespace: default
    resourceVersion: "6948065"
    uid: 26cd0db3-f2a0-11e8-8be6-42010a800002

用户可以使用补丁(patch)更改删除政策:

$ kubectl patch volumesnapshotcontent snapcontent-26cd0db3-f2a0-11e8-8be6-42010a800002 -p '{"spec":{"deletionPolicy":"Retain"}}' --type=merge

$ kubectl get volumesnapshotcontent snapcontent-26cd0db3-f2a0-11e8-8be6-42010a800002 -o yaml
apiVersion: snapshot.storage.k8s.io/v1alpha1
kind: VolumeSnapshotContent
...
spec:
  csiVolumeSnapshotSource:
...
  deletionPolicy: Retain
  persistentVolumeRef:
    apiVersion: v1
    kind: PersistentVolume
    name: pvc-853622a4-f28b-11e8-8be6-42010a800002
...

保护使用中的快照对象

“保护使用中的快照对象”(Snapshot Object in Use Protection)功能的目的,是确保不会从系统中删除正在使用的快照API对象(因为这可能会导致数据丢失)。有两种情况需要“使用中”(“in-use”)保护:

  • 如果卷快照正在被PVC作为创建卷的源。
  • 如果VolumeSnapshotContent API对象绑定到VolumeSnapshot API对象,会认为该内容对象正在使用中。

如果用户删除PVC正在使用的VolumeSnapshot API对象,VolumeSnapshot对象不会被立即删除。删除VolumeSnapshot对象被推迟,直到任何PVC不再使用VolumeSnapshot。同样,如果管理员删除了绑定到VolumeSnapshot的VolumeSnapshotContent,VolumeSnapshotContent不会被立即删除。删除VolumeSnapshotContent被推迟,直到VolumeSnapshotContent没有绑定到VolumeSnapshot对象。

哪些卷插件支持Kubernetes快照?

快照仅在CSI驱动程序支持(不适用于树内“in-tree”或Flexvolume)。要使用Kubernetes快照功能,请确保在群集上部署实现快照的CSI驱动程序。

截至本博文发布时,以下CSI驱动程序支持快照:

其他 驱动程序 的快照支持正在等待阶段,应该很快就可以使用。阅读“Kubernetes的容器存储接口(CSI)GA了”博客文章,了解有关CSI以及如何部署CSI驱动程序的更多信息。

下一步?

根据反馈和采用情况,Kubernetes团队计划将CSI Snapshot实施在1.15或1.16版本推向beta。我们感兴趣的一些功能包括一致性组(consistency group)、应用程序一致性快照、工作负载停顿、就地恢复等。

怎样才能了解更多?

快照API和控制器的代码存储库位于: https://github.com/kubernetes...

在此处查看有关快照功能的其他文档: http://k8s.io/docs/concepts/s... ://kubernetes-csi.github.io/docs/

怎样参与?

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

特别感谢所有帮助增加CSI v1.0支持,并改进此版本快照功能的贡献者,包括Saad Ali( saadali )、Michelle Au( msau42 )、Deep Debroy( ddebroy )、James DeFelice( jdef )、John Griffith ( j-griffith )、Julian Hjortshoj( julian-hj )、Tim Hockin( thockin )、Patrick Ohly( pohly )、Luis Pabon( lpabon )、Cheng Xing( verult )、Jing Xu( jingxu97 )、Shiwei Xu( wackxu )、Xing Yang( xing-yang )、Jie Yu( jieyu )、David Zhu( davidz627 )。

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

我们还定期召开 SIG-Storage Snapshot工作组会议 。欢迎新的参与者加入设计和开发的讨论。

2019年KubeCon + CloudNativeCon中国论坛提案征集(CFP)现已开放

KubeCon + CloudNativeCon 论坛让用户、开发人员、从业人员汇聚一堂,面对面进行交流合作。与会人员有 Kubernetes、Prometheus 及其他云原生计算基金会 (CNCF) 主办项目的领导,和我们一同探讨云原生生态系统发展方向。

2019年中国开源峰会提案征集(CFP)现已开放

在中国开源峰会上,与会者将共同合作及共享信息,了解最新和最有趣的开源技术,包括 Linux 、容器、云技术、网络、微服务等;并获得如何在开源社区中导向和引领的信息。

大会日期:

  • 提案征集截止日期:太平洋标准时间 2 月 15 日,星期五,晚上 11:59
  • 提案征集通知日期:2019 年 4 月 1 日
  • 会议日程通告日期:2019 年 4 月 3 日
  • 幻灯片提交截止日期:6 月 17 日,星期一
  • 会议活动举办日期:2019 年 6 月 24 至 26 日

2019年KubeCon + CloudNativeCon + Open Source Summit China赞助方案出炉啦


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Where Wizards Stay Up Late

Where Wizards Stay Up Late

Katie Hafner / Simon & Schuster / 1998-1-21 / USD 16.00

Twenty five years ago, it didn't exist. Today, twenty million people worldwide are surfing the Net. "Where Wizards Stay Up Late" is the exciting story of the pioneers responsible for creating the most......一起来看看 《Where Wizards Stay Up Late》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

MD5 加密
MD5 加密

MD5 加密工具

SHA 加密
SHA 加密

SHA 加密工具