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

?

背景

许多存储系统提供了创建存储卷“快照”(snapshot)的能力,以防止数据丢失。快照可以替代传统的备份系统来备份和还原主要数据和关键数据。快照能够快速备份数据(例如,创建GCE PD快照仅需要几分之一秒), 并提供快速恢复时间目标(RTO)和恢复点目标(RPO)。快照还可用于数据复制、分发和迁移。

早在kubernetes 1.8版本中,卷快照系统原型已经发布,其实现位于external-storage(https://github.com/kubernetes-incubator/external-storage)库中。该原型基于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对象

 

VolumeSnapshotContent对象

 

VolumeSnapshotClass对象

 

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

Snapshot Controller  设计要点

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

    • 通常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标志或重试终止时间戳,以允许用户控制是否需要重试。

原文地址:https://www.cnblogs.com/CCE-SWR/p/10576566.html

时间: 2024-10-08 19:30:43

K8S 1.12大特性最快最深度解析:Kubernetes CSI Snapshot(上)的相关文章

技术与架构,解析如何将大数据最快落地到实践

免费开通大数据服务:https://www.aliyun.com/product/odps 直播回顾: https://yq.aliyun.com/webinar/history?spm=5176.8067841.wnold.1.rLvSkQ 3月9日14点,业内首个结合技术与应用的在线大数据技术峰会即将展开,届时6位阿里技术大咖与4位行业资深实践者将从技术与业务两个方面,与大家探讨大数据如何最快落地到实践.较为有看点的是: 最深入的实践:本次在线峰会上,6个阿里规模的大数据实践将被深入分享,包

《微服务》九大特性重读笔记

http://blog.didispace.com/20160917-microservices-note/ 今天重读了Martin Fowler的<Microservices>,在此记录一下对九大特性的理解. 服务组件化 组件,是一个可以独立更换和升级的单元.就像PC中的CPU.内存.显卡.硬盘一样,独立且可以更换升级而不影响其他单元. 在"微服务"架构中,需要我们对服务进行组件化分解.服务,是一种进程外的组件,它通过http等通信协议进行协作,而不是传统组件以嵌入的方式

Java JUC之Atomic系列12大类实例讲解和原理分解

Java JUC之Atomic系列12大类实例讲解和原理分解 2013-02-21      0个评论       作者:xieyuooo 收藏    我要投稿 在java6以后我们不但接触到了Lock相关的锁,也接触到了很多更加乐观的原子修改操作,也就是在修改时我们只需要保证它的那个瞬间是安全的即可,经过相应的包装后可以再处理对象的并发修改,以及并发中的ABA问题,本文讲述Atomic系列的类的实现以及使用方法,其中包含: 基本类:AtomicInteger.AtomicLong.Atomic

细说关键字sizeof及其十大特性

     Sizeof是c/c++中的关键字,它是一个运算符,其作用是取得一个对象(数据类型或数据对象)的长度(即占用内存的大小,以byte为单位).其中类型包括基本数据类型(不包括void).用户自定义类型(结构体.类).函数类型.数据对象是指用前面提到的类型定义的普通变量和指针变量(包含void指针). 十大特性: 特性0:sizeof是运算符,不是函数: 特性1:sizeof不能求void类型的长度: 特性2:sizeof能求void类型的指针的长度:    其实指针也是变量,只不过这个变

atitit.Oracle 9 10 11 12新特性attilax总结

atitit.Oracle 9  10 11  12新特性 1. ORACLE 11G新特性 1 1.1. oracle11G新特性 1 1.2. 审计 1 1.3. 1.   审计简介 1 1.4. 其他(大部分是管理功能) 2 2. Oracle 12c 的 12 个新特性 2 2.1. 2 Improved Defaults 增强了DEFAULT, default目前可以直接指代sequence了,同时增强了default充当identity的能力 2 2.2. Easy Top-N an

土地用途 新的12大类

dldm code name pcode 01 耕地   011 水田 01 012 水浇地 01 013 旱地 01 02 园地   021 果园 02 022 茶园 02 023 其它园地 02 03 林地   031 有林地 03 032 灌木林地 03 033 其它林地 03 04 草地   041 天然牧草地 04 042 人工牧草地 04 043 其它草地 04 051 批发零售用地 05 052 住宿餐饮用地 05 053 商务金融用地 05 054 其它商服用地 05 061 工

Node.js V0.12 新特性之性能优化

v0.12悠长的开发周期(已经过去九个月了,并且还在继续,是有史以来最长的一次)让核心团队和贡献者们有充分的机会对性能做一些优化. 本文会介绍其中最值得注意的几个. http://www.infoq.com/cn/articles/nodejs-v012-optimize-performance?utm_source=infoq&utm_medium=related_content_link&utm_campaign=relatedContent_articles_clk Node.js和

网络安全的未来——WAF应当具备的十大特性

概述 据Forrester统计,2013年有超过半数的企业的Web应用被泄露,其中不少因此遭到严重的财务损失.近年来,企业安全事件屡见报端:2011年,多家公司和政府网站被黑客攻击;2012年的DDoS攻击令众多美国银行网站瘫痪;更不用提那些造成数百万用户信用卡信息泄露的网络安全事故了.传统的网络安全防护体系已无法招架如今的黑客们了. 今天,网络罪犯已不仅仅把目光锁定在知名大公司上,每一个存在漏洞的网站都可能成为被攻击的目标.黑客们的攻击方式一般可以分为以下三种:技术性Web攻击.业务逻辑处理攻

大三终于快结束了

感觉眨眨眼就要大四了... 大学很快就要过去了. 三年,感概良多. 努力,终会有收获. 终于忙完了各种课设各种考试各种论文. 后天要去考驾照中的科目二. 然后回家休息十来天. 然后出来继续奋斗. all  is  well. -------致即将大四的自己! 大三终于快结束了