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赞助方案出炉啦


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

查看所有标签

猜你喜欢:

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

游戏改变世界

游戏改变世界

[美] 简•麦戈尼格尔(Jane McGonigal) / 闾佳 / 浙江人民出版社 / 2012-9 / 59.90元

◆《游戏改变世界》是著名未来学家、TED大会新锐演讲者简•麦戈尼格尔探索互联时代重要趋势的最新力作。在书中,作者指出:游戏可以弥补现实世界的不足和缺陷,游戏化可以让现实变得更美好。 ◆作者在书中用大量事例告诉我们,游戏击中了人类幸福的核心,提供了令人愉悦的奖励、刺激性的挑战和宏大的胜利,而这些都是现实世界十分匮乏的。她的研究表明,我们可以借助游戏的力量,让生活变得像游戏一样精彩。 ◆作......一起来看看 《游戏改变世界》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换