Kubernetes 1.20:Kubernetes卷快照提升到GA

你填了吗?2020年CNCF中国云原生问卷

Image

问卷链接(https://www.wjx.cn/jq/9714648...


作者:Xing Yang, VMware & Xiangqian Yu, Google

Kubernetes卷快照特性现在在Kubernetes v1.20中是GA。它在Kubernetes v1.12中以alpha的形式引入,随后在Kubernetes v1.13中进行了第二次alpha,并在Kubernetes 1.17中升级为beta版本。这篇博客总结了从beta版到GA版的变化。

什么是卷快照?

许多存储系统(如谷歌云持久磁盘、Amazon弹性块存储和许多内部存储系统)都提供了创建持久卷的“快照”的能力。快照表示卷的时间点副本。快照可以用于重新生成新卷(用快照数据预填充),也可以用于将现有卷恢复到以前的状态(由快照表示)。

为什么要向Kubernetes添加卷快照?

Kubernetes的目标是在分布式应用程序和底层集群之间创建一个抽象层,以便应用程序可以不知道它们运行的集群的具体情况,并且应用程序部署不需要“特定于集群的”知识。

Kubernetes Storage SIG将快照操作识别为许多有状态工作负载的关键功能。例如,数据库管理员可能希望在启动数据库操作之前快照数据库的卷。

通过提供在Kubernetes中触发卷快照操作的标准方法,该特性允许Kubernetes用户以可移植的方式在任何Kubernetes环境中合并快照操作,而不管底层存储是什么。

此外,这些Kubernetes快照特性/原语(primitive)充当基本构建块,释放了为Kubernetes开发高级企业级存储管理特性(包括应用程序或集群级备份解决方案)的能力。

beta之后有什么新特性吗?

随着卷快照提升到GA,该特性在标准Kubernetes部署中默认启用,并且不能关闭。

已经对该特性进行了许多增强,以提高其质量并使其达到生产级。

  • 卷快照API和客户端库被移动到单独的Go模块。
  • 添加了快照验证webhook来对卷快照对象执行必要的验证。更多细节可以在卷快照验证Webhook Kubernetes增强建议中找到。
  • 与验证webhook一起,卷快照控制器将开始标记已经存在的无效快照对象。这允许用户识别、删除任何无效对象,并纠正他们的工作流。一旦API切换到v1类型,这些无效对象将不能从系统中删除。
  • 为了更好地了解快照特性是如何执行的,在卷快照控制器中添加了一组初始操作指标。
  • 还有更多(在GCP上运行的)端到端测试,可以在真正的Kubernetes集群中验证该特性。引入了压力测试(基于谷歌持久磁盘和hostPath CSI驱动程序)来测试系统的健壮性。

除了引入了更严格的验证之外,v1beta1和v1 Kubernetes卷快照API之间没有任何区别。在这个版本中(使用Kubernetes 1.20),提供了v1和v1beta1,而存储的API版本仍然是v1beta1。未来的版本将把存储的版本切换到v1,并逐渐删除对v1beta1的支持。

哪些CSI驱动程序支持卷快照?

快照只支持CSI驱动程序,不支持树内或FlexVolume驱动程序。确保集群上部署的CSI驱动程序实现了快照接口。有关更多信息,请参见Kubernetes GA的容器存储接口(CSI)。

目前有50多个CSI驱动程序支持卷快照特性。GCE持久磁盘CSI驱动程序已经通过了从卷快照beta升级到GA的测试。对其他CSI驱动程序的GA级支持应该很快就可以使用了。

谁使用卷快照构建产品?

在本博客发布之时,以下来自Kubernetes数据保护工作组的参与者正在使用Kubernetes卷快照构建产品或已经构建了产品。

  • Dell-EMC: PowerProtect
  • Druva
  • Kasten K10
  • Pure Storage (Pure Service Orchestrator)
  • Red Hat OpenShift Container Storage
  • TrilioVault for Kubernetes
  • Velero plugin for CSI

如何部署卷快照?

卷快照功能包含以下组件:

  • Kubernetes Volume Snapshot CRDs
  • Volume snapshot controller
  • Snapshot validation webhook
  • CSI Driver along with CSI Snapshotter sidecar

强烈建议Kubernetes发行商捆绑并部署卷快照控制器、CRD和验证webhook,作为Kubernetes集群管理进程的一部分(独立于任何CSI驱动程序)。

警告:快照验证webhook在从使用v1beta1平稳过渡到使用v1 API时起着关键作用。如果不安装快照验证webhook,就不可能阻止无效卷快照对象的创建/更新,这反过来会阻止无效卷快照对象在未来的升级中被删除。

如果你的集群没有预先安装正确的组件,你可以手动安装它们。详见CSI Snapshotter README。

如何使用卷快照?

假设所有必需的组件(包括CSI驱动程序)已经部署并运行在集群上,你可以使用VolumeSnapshot API对象创建卷快照,或者通过在PVC上指定VolumeSnapshot数据源,使用现有的VolumeSnapshot来恢复PVC。有关更多细节,请参阅卷快照文档。

注意:Kubernetes Snapshot API不提供任何应用程序一致性保证。在手动或使用更高级别的API/控制器进行快照之前,你必须准备好你的应用程序(暂停应用程序,冻结文件系统等等)。

动态创建卷快照

要动态创建卷快照,首先创建一个VolumeSnapshotClass API对象。

apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
 name: test-snapclass
driver: testdriver.csi.k8s.io
deletionPolicy: Delete
parameters:
 csi.storage.k8s.io/snapshotter-secret-name: mysecret
 csi.storage.k8s.io/snapshotter-secret-namespace: mysecretnamespace

然后通过指定卷快照类从PVC创建一个VolumeSnapshot API对象。

apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
 name: test-snapshot
 namespace: ns1
spec:
 volumeSnapshotClassName: test-snapclass
 source:
 persistentVolumeClaimName: test-pvc

使用Kubernetes导入现有卷快照

要将预先存在的卷快照导入Kubernetes,请首先手动创建一个VolumeSnapshotContent对象。

apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotContent
metadata:
 name: test-content
spec:
 deletionPolicy: Delete
 driver: testdriver.csi.k8s.io
 source:
 snapshotHandle: 7bdd0de3-xxx
 volumeSnapshotRef:
 name: test-snapshot
 namespace: default

然后创建一个指向VolumeSnapshotContent对象的VolumeSnapshot对象。

apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
 name: test-snapshot
spec:
 source:
 volumeSnapshotContentName: test-content

从快照创建新卷

绑定并准备就绪的VolumeSnapshot对象可用于通过快照数据预先填充的数据创建新卷,如下所示:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
 name: pvc-restore
 namespace: demo-namespace
spec:
 storageClassName: test-storageclass
 dataSource:
 name: test-snapshot
 kind: VolumeSnapshot
 apiGroup: snapshot.storage.k8s.io
 accessModes:
 - ReadWriteOnce
 resources:
 requests:
 storage: 1Gi

如何在CSI驱动程序中添加对快照的支持?

有关如何在CSI驱动程序中实现快照特性的更多细节,请参阅CSI规范和Kubernetes-CSI驱动程序开发指南。

有什么限制?

Kubernetes卷快照的GA实现有以下限制:

  • 不支持将现有PVC恢复到快照所表示的早期状态(只支持从快照中创建新卷)。

如何学习更多?

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

查看快照特性的其他文档:
http://k8s.io/docs/concepts/s...
https://kubernetes-csi.github...

如何参与?

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

我们对在过去的几个季度里帮助GA实现该项目的贡献者表示非常感谢。我们要感谢Saad Ali、Michelle Au、Tim Hockin和Jordan Liggitt对设计的深刻见解和透彻考虑;感谢Andi Li在增加快照验证Webhook的支持方面所做的工作;感谢Grant Griffiths对实施指标支持 在快照控制器中并在验证Webhook中处理密码轮换;感谢Chris Henzie、Raunak Shah和Manohar Reddy编写了关键的e2e测试以满足升级的可伸缩性和稳定性要求;感谢Kartik Sharma将快照API和客户端库迁移到了 单独的go模块;并感谢Raunak Shah和Prafull Ladha在从Beta到GA的升级测试中所提供的帮助。

还有很多人帮助将快照功能从beta版本提升到GA版本。我们要感谢为这一努力作出贡献的每一个人:

  • Andi Li
  • Ben Swartzlander
  • Chris Henzie
  • Christian Huffman
  • Grant Griffiths
  • Humble Devassy Chirammal
  • Jan Šafránek
  • Jiawei Wang
  • Jing Xu
  • Jordan Liggitt
  • Kartik Sharma
  • Madhu Rajanna
  • Manohar Reddy
  • Michelle Au
  • Patrick Ohly
  • Prafull Ladha
  • Prateek Pandey
  • Raunak Shah
  • Saad Ali
  • Saikat Roychowdhury
  • Tim Hockin
  • Xiangqian Yu
  • Xing Yang
  • Zhu Can

对于那些有兴趣参与CSI或Kubernetes存储系统的任何部分的设计和开发的人,加入Kubernetes存储特别兴趣组(SIG)。我们正在快速发展,欢迎新的贡献者。

我们亦定期举行保障资料工作小组会议。欢迎新参会者加入讨论。

点击阅读网站原文


CNCF (Cloud Native Computing Foundation)成立于2015年12月,隶属于Linux  Foundation,是非营利性组织。
CNCF(云原生计算基金会)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。我们通过将最前沿的模式民主化,让这些创新为大众所用。扫描二维码关注CNCF微信公众号。
image

你可能感兴趣的:(cncf,kubernetes,快照,容器)