Kubernetes 1.20:Kubernetes卷快照移至GA

2020-12-16 10:34:46 浏览数 (1)

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

翻译 | 乔克

原文 | https://kubernetes.io/blog/2020/12/10/kubernetes-1.20-volume-snapshot-moves-to-ga/

Kubernetes卷快照功能在Kubernetes v1.20已升至GA。它在Kubernetes v1.12版本中作为Alpha引入,在v1.13版本中升级为Alpha2,在Kubernetes 1.17中提升为Beta版。这篇博客文章总结了其从Beta到GA所做的更改。

什么是卷快照?

许多存储系统(例如Google Cloud Persistent Disks,Amazon Elastic Block Storage和许多本地存储系统)都可以创建持久卷的“快照”。卷快照是卷在某个时间点的副本,快照可用于填充新的Volume(预填充快照数据)或将现有卷恢复到先前状态(由快照表示)。

为什么要将卷快照添加到Kubernetes?

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

Kubernetes Storage SIG将快照操作确定为许多有状态工作负载的关键功能。例如,数据库管理员可能要在开始数据库操作之前对数据库的卷进行快照。

在Kubernetes中通过提供一种触发卷快照操作的标准方法,此功能允许Kubernetes用户以可移植的方式在任何Kubernetes环境中合并快照操作,而无需考虑基础存储。

此外,Kubernetes快照作为基本组件,可便于为Kubernetes提供开发高级企业级存储管理功能的能力,包括应用程序或集群级备份解决方案。

自测试版以来有什么新变化?

随着将Volume Snapshot升级为GA,在Kubernetes中默认启用了该功能,并且无法将其关闭。

为了提高此功能的质量并使其达到生产级,已进行了许多增强。

  • 卷快照API和客户端库已移至单独的Go模块。
  • 添加了快照验证Webhook,以对卷快照对象执行必要的验证。可以在《Volume Snapshot Validation Webhook Kubernetes Enhancement Proposal》中找到更多详细信息。
  • 与验证Webhook一起,卷快照控制器将标记已经存在的无效快照对象,这使用户可以识别、删除任何无效对象并更正其工作流程。一旦将API切换为v1类型,这些无效对象将无法从系统中删除。
  • 为了更好地了解快照功能的执行方式,已向卷快照控制器添加了一组初始的操作指标。
  • 在GCP上运行的更多端到端测试可以验证真实Kubernetes群集中的功能。hostPath引入了压力测试(基于Google Persistent Disk和hostPath CSI驱动)来测试系统的稳定性。

除了引入严格的验证之外,v1beta1和v1的Kubernetes卷快照API之间没有区别。在此版本(使用Kubernetes 1.20)中,同时提供了v1和v1beta1,而存储的API版本仍为v1beta1。将来的发行版会将存储的版本切换到v1,并逐渐删除对v1beta1的支持。

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

仅CSI驱动程序支持快照,in-tree或FlexVolume驱动程序不支持快照。确保群集上已部署的CSI驱动程序已实现快照接口,有关更多信息,请参见 Container Storage Interface (CSI) for Kubernetes GA。

当前,有50多个CSI驱动程序支持卷快照功能。在GCE Persistent Disk CSI Driver已通过了升级的测试时间里从卷快照公测GA。对其他CSI驱动程序的GA级别支持应尽快提供。

如何部署卷快照?

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

  • 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。

如何使用卷快照?

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

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

动态配置卷快照

要动态配置卷快照,请首先创建一个VolumeSnapshotClassAPI对象。

代码语言:javascript复制
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

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

代码语言:javascript复制
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对象。

代码语言:javascript复制
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

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

代码语言:javascript复制
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
  name: test-snapshot
spec:
  source:
        volumeSnapshotContentName: test-content

从快照预填充数据

绑定就绪VolumeSnapshot对象可以用于重新快照新的卷,其中包含从快照数据中预先填充的数据,如下所示:

代码语言:javascript复制
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

有什么限制?

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

  • 不支持将现有的PVC恢复为快照表示的较早状态(仅支持从快照配置新卷)。

其他

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

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

0 人点赞