K8S 1.12大特性最快最深度解析:Kubernetes CSI Snapshot(上)

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

内容简介:CSI snapshot 是由华为在 Kubernetes 社区主导开发的存储特性,在 K8S 1.12进入Alpha阶段。接下来,我们将分为上下两篇,分别介绍snapshot的创建删除等API以及从snapshot还原数据卷,同时,我们将使用CSI hostpath 插件来演示,如何使用这两种特性。许多存储系统提供了创建存储卷“快照”(snapshot)的能力,以防止数据丢失。快照可以替代传统的备份系统来备份和还原主要数据和关键数据。快照能够快速备份数据(例如,创建GCE PD快照仅需要几分之一秒),

CSI snapshot 是由华为在 Kubernetes 社区主导开发的存储特性,在 K8S 1.12进入Alpha阶段。接下来,我们将分为上下两篇,分别介绍snapshot的创建删除等API以及从snapshot还原数据卷,同时,我们将使用CSI hostpath 插件来演示,如何使用这两种特性。

Kubernetes CSI Snapshot(上篇)

背景

许多存储系统提供了创建存储卷“快照”(snapshot)的能力,以防止数据丢失。快照可以替代传统的备份系统来备份和还原主要数据和关键数据。快照能够快速备份数据(例如,创建GCE PD快照仅需要几分之一秒), 并提供快速恢复时间目标(RTO)和恢复点目标(RPO)。快照还可用于数据复制、分发和迁移。 早在kubernetes 1.8版本中,卷快照系统原型已经发布,其实现位于 external-storage( github.com/kubernetes-… )库中。该原型基于 CRD 实现,提供了外部 controller 和 provisioner 两个二进制,支持 GCE PD,AWS EBS,OpenStack Cinder,GlusterFS 和 Kubernetes hostPath 等存储卷。

Kubernetes 的社区存储趋势是采用 CSI 实现存储插件,本文添加对 CSI 存储插件的快照支持。Kubernetes 的趋势是保持核心 API 尽可能小,因此我们采用 CRD 实现,并添加一个外部快照控制器来处理卷快照,external provisioner 也会升级以支持从快照创建 volume,CSI snapshot规范详情可以在https://github.com/container-storage-interface/spec/pull/224 查看。

目标

对于 Kubernetes 中的第一个快照支持版本,我们仅支持 CSI 卷插件按需创建快照。

  • 目标1 :实现标准化的快照操作,支持创建,列出和删除快照等 REST API。目前,API 将使用 CRD(CustomResourceDefinitions)实现。
  • 目标2 :实现CSI卷快照支持。 external-snapshotter 将与 CSI 卷插件的其他外部组件(例如, external-attacher, external-provisioner )一起部署。
  • 目标3 :提供一种从快照创建新存储卷和还原现有卷的便捷方法。 以下目标本阶段将不会实现,但将在稍后阶段考虑。
  • 目标4 :通过提供 pre/post 快照钩子来冻结/解冻应用程序和/或卸载/挂载文件系统,从而提供应用程序一致性快照。
  • 目标5 :提供更高级别的管理,例如备份和还原 pod 和 statefulSet,以及创建一致性的快照组。

详细设计

在此提案中,卷快照被视为 Kubernetes 管理的另一种存储资源。 因此,快照 API 和控制器遵循现有卷管理的设计模式。

  • VolumeSnapshot
  • VolumeSnapshotContent
  • VolumeSnapshotClass

三个 API,它们与 PersistentVolumeClaim 和 PersistentVolume 以及 storageClass 的结构类似。外部快照控制器的功能类似于 in-tree 的 PV 控制器。同时建议在 PersistentVolumeClaim(PVC)API 中添加新的数据源结构,以支持从快照还原数据卷。 以下部分将详细介绍 API 和控制器设计。

Snapshot API设计

VolumeSnapshot 和 VolumeSnapshotContent API 是在 PersistentVolumeClaim 和 PersistentVolume 之后建模设计的。 在第一个版本中,VolumeSnapshot 生命周期完全独立于其来源(PVC)。 删除 PVC / PV 时,相应的 VolumeSnapshot 和 VolumeSnapshotContent 对象将继续存在。 但是,对于某些卷插件,快照依赖于其存储卷。 在未来的版本中,我们计划进行完整的生命周期管理,以便更好地处理快照与其卷之间的关系。(例如,添加finalizer,当有快照依赖于存储卷时,可防止存储卷被删除)。

VolumeSnapshot对象

K8S 1.12大特性最快最深度解析:Kubernetes CSI Snapshot(上)
K8S 1.12大特性最快最深度解析:Kubernetes CSI Snapshot(上)

VolumeSnapshotContent对象

K8S 1.12大特性最快最深度解析:Kubernetes CSI Snapshot(上)
K8S 1.12大特性最快最深度解析:Kubernetes CSI Snapshot(上)

VolumeSnapshotClass对象

我们将添加新的 API 对象 VolumeSnapshotClass,而不是复用现有的 StorageClass,以避免在 snapshot 和 volume 之间混合参数。每个 CSI 卷插件都可以拥有自己的默认 VolumeSnapshotClass。如果未提供 VolumeSnapshotClass,则将使用默认值。VolumeSnapshotClass 将为快照添加新的参数。

K8S 1.12大特性最快最深度解析:Kubernetes CSI Snapshot(上)

Snapshot Controller 设计要点

如下图所示,CSI 快照控制器体系结构由 external-snapshotter (外部快照器)组成, external-snapshotter 通过套接字与 out-of-tree CSI 卷插件进行通信(默认情况下为 / run / csi / socket ,可由 -csi-address 配置)。external-snapshotter 是 Kubernetes 实现容器存储接口(CSI)的一部分。 它是一个外部控制器,用于监视 VolumeSnapshot 和 VolumeSnapshotContent 对象并创建/删除快照。

K8S 1.12大特性最快最深度解析:Kubernetes CSI Snapshot(上)
  • 通常 external-snapshotter 使用 ControllerGetCapabilities 来验证 CSI 驱动程序是否支持 CREATE_DELETE_SNAPSHOT 调用。
  • external-snapshotter 负责创建/删除快照及绑定 VolumeSnapshot 和 VolumeSnapshotContent 对象。它遵循 kubernetes 控制器模式并使用 informer 来监视 VolumeSnapshot 和 VolumeSnapshotContent 创建/更新/删除事件。通过 Snapshotter == <CSI 卷插件名字>过滤掉不符合的 VolumeSnapshot 实例,并使用具有指数退避的工作队列处理这些事件。
  • 对于动态创建的快照,它应该关联某个 VolumeSnapshotClass。用户可以在 VolumeSnapshot API 对象中显式指定 VolumeSnapshotClass。如果用户未指定 VolumeSnapshotClass,则将使用 admin 创建的默认 VolumeSnapshotClass。这和使用默认的 StorageClass 来配置 PersistentVolumeClaim 相似。
  • 对于静态绑定快照, user/admin 必须为 VolumeSnapshot 和 VolumeSnapshotContent 正确指定双向指针,以便控制器知道如何绑定它们。否则,如果 VolumeSnapshot 指向不存在的 VolumeSnapshotContent,或者是 VolumeSnapshotContent 并未指向 VolumeSnapshot,则将 VolumeSnapshot 设置为错误状态。
  • 针对每一个 CSI 卷插件,external-snapshotter、external-attacher和external-provisioner 运行在同一个 sidecar 中。
  • 在当前设计中,当存储系统无法创建快照时,将不会在控制器中执行重试。这是因为当快照创建的时间很重要时,用户可能不想在获取一致性快照或计划快照时重试。在将来的版本中,将添加 maxRetries 标志或重试终止时间戳,以允许用户控制是否需要重试。

本篇文章主要介绍了 snapshot 的 API 对象,以及 external-snapshotter 的架构设计和实现原理,下篇文章,我们将会介绍从snapshot 还原数据卷,以及演示如何使用这两种特性,敬请期待。


以上所述就是小编给大家介绍的《K8S 1.12大特性最快最深度解析:Kubernetes CSI Snapshot(上)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

Head First Python

Head First Python

Paul Barry / O'Reilly Media / 2010-11-30 / USD 49.99

Are you keen to add Python to your programming skills? Learn quickly and have some fun at the same time with Head First Python. This book takes you beyond typical how-to manuals with engaging images, ......一起来看看 《Head First Python》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

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

URL 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具