Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
快照实例为什么收费_oracle快照查询,希望能够帮助你!!!。
Kubernetes v1.12引入了对volume snapshotting alpha的支持。此功能允许创建/删除卷快照,以及使用Kubernetes API本机创建新卷的功能。
1 什么是快照?
许多存储系统(如Google Cloud Persistent Disks、Amazon Elastic Block Storage和许多内部部署存储系统)都能够创建持久卷的“快照”。快照表示卷的时间点副本。快照可用于配置新卷(预先填充快照数据)或将现有卷还原到先前状态(由快照表示)。
2 为什么要将快照引入到Kubernetes?
Kubernetes卷插件系统已经提供了一个强大的抽象功能,可以自动化块和文件存储的配置、挂载和安装。
支持所有这些功能的是Kubernetes工作负载可移植性的目标:Kubernetes旨在在分布式系统应用程序和底层集群之间创建一个抽象层,以便应用程序可以与运行的集群的细节无关,并且应用程序部署不需要“特定于集群”的知识。
Kubernetes Storage SIG将快照操作定为许多有状态工作负载的关键功能。例如,数据库管理员可能希望在开始数据库操作之前对数据库卷进行快照。
通过提供在Kubernetes API中触发快照操作的标准方法,Kubernetes用户现在可以处理这样的用例,而无需绕过Kubernetes API(并手动执行特定于存储系统的操作)。
相反,Kubernetes用户现在有权将集群无关的快照操作合并到他们的工具和策略中,并且知道无论底层存储如何,它都可以对任意Kubernetes集群起作用。
此外,这些Kubernetes快照原语充当了基本构建块,可以为Kubernetes开发高级企业级存储管理功能:例如数据保护、数据复制和数据迁移。
3 哪个卷插件支持Kubernetes Snapshots?
Kubernetes支持三种类型的卷插件:in-tree、Flex和CSI。有关详细信息,请参阅Kubernetes Volume Plugin FAQ。
仅CSI驱动程序支持快照(不适用于in-tree或Flex)。要使用Kubernetes快照功能,请确保在集群上部署实现快照的CSI驱动程序。
目前,以下CSI驱动程序支持快照:GCE Persistent Disk CSI Driver、OpenSDS CSI Driver、Ceph RBD CSI Driver、Portworx CSI Driver。
其他驱动程序的快照支持工作正在进行,应该很快就可以使用。阅读“Kubernetes Goes Beta的容器存储接口(CSI)”博客文章,了解有关CSI以及如何部署CSI驱动程序的更多信息。
4 Kubernetes Snapshots API
与管理Kubernetes Persistent Volumes的API类似,Kubernetes Volume Snapshots引入了三个用于管理快照的新API对象:
值得注意的是,与核心Kubernetes Persistent Volume对象不同,这些Snapshot对象被定义为CustomResourceDefinitions(CRD)。Kubernetes项目正逐渐远离拥有API服务器中预定义的资源类型,并且正朝着API服务器独立于API对象的模型发展。这允许API服务器可以重用于Kubernetes以外的项目,而使用者(如Kubernetes)可以简单地安装它们作为CRD所需的资源类型。
支持快照的CSI驱动程序将自动安装所需的CRD。Kubernetes最终用户只需要验证支持快照的CSI驱动程序是否部署在其Kubernetes集群上。
除了这些新对象之外,还在PersistentVolumeClaim对象中添加了一个新的DataSource字段:
type PersistentVolumeClaimSpec struct { AccessModes []PersistentVolumeAccessMode Selector *metav1.LabelSelector Resources ResourceRequirements VolumeName string StorageClassName *string VolumeMode *PersistentVolumeMode DataSource *TypedLocalObjectReference }
此新的alpha字段可以创建新卷,并使用现有快照中的数据自动预填充。
5 Kubernetes快照要求
在使用Kubernetes Volume Snapshotting之前,你必须:
在创建快照之前,还需要通过创建VolumeSnapshotClass对象并将snapshotter字段设置为指向CSI驱动程序来为快照指定CSI驱动程序信息。在下面的VolumeSnapshotClass示例中,CSI驱动程序是com.example.csi-driver。每个快照配置程序至少需要一个VolumeSnapshotClass对象。你还可以通过在类定义中放置注释snapshot.storage.kubernetes.io/is-default-class:“true”来为每个单独的CSI驱动程序设置默认的VolumeSnapshotClass。
apiVersion: snapshot.storage.k8s.io/v1alpha1
kind: VolumeSnapshotClass
metadata:
name: default-snapclass
annotations:
snapshot.storage.kubernetes.io/is-default-class: "true"
snapshotter: com.example.csi-driver
apiVersion: snapshot.storage.k8s.io/v1alpha1
kind: VolumeSnapshotClass
metadata:
name: csi-snapclass
snapshotter: com.example.csi-driver
parameters:
fakeSnapshotOption: foo
csiSnapshotterSecretName: csi-secret
csiSnapshotterSecretNamespace: csi-namespace
你必须根据CSI驱动程序的文档设置任何所需的不透明参数。如上面的示例所示,参数fakeSnapshotOption:foo和任何引用的秘密将在快照创建和删除期间传递给CSI驱动程序。默认CSI外部快照程序保留参数秘密csiSnapshotterSecretName和csiSnapshotterSecretNamespace。如果指定,它将获取秘密并在创建和删除快照时将其传递给CSI驱动程序。
最后,在创建快照之前,你必须使用CSI驱动程序配置卷,并使用你想要快照的一些数据填充它(请参阅有关如何创建和使用CSI卷的CSI博客文章)。
6 使用Kubernetes创建新快照
定义VolumeSnapshotClass对象并且你有要快照的卷后,可以通过创建VolumeSnapshot对象来创建新快照。
快照源指定要从中创建快照的卷。它有两个参数:
假定卷的快照命名空间与VolumeSnapshot对象的命名空间相同。
apiVersion: snapshot.storage.k8s.io/v1alpha1
kind: VolumeSnapshot
metadata:
name: new-snapshot-demo
namespace: demo-namespace
spec:
snapshotClassName: csi-snapclass
source:
name: mypvc
kind: PersistentVolumeClaim
在VolumeSnapshot规范中,用户可以指定VolumeSnapshotClass,其中包含有关应使用哪个CSI驱动程序创建快照的信息。创建VolumeSnapshot对象时,VolumeSnapshotClass中的参数fakeSnapshotOption:foo和任何引用的秘密将通过CreateSnapshot调用传递给CSI插件com.example.csi-driver。
作为响应,CSI驱动程序触发卷的快照,然后自动创建VolumeSnapshotContent对象以表示新快照,并将新的VolumeSnapshotContent对象绑定到VolumeSnapshot,使其可以使用。如果CSI驱动程序无法创建快照并返回错误,则快照控制器将报告VolumeSnapshot对象状态中的错误,并且不会重试(这与Kubernetes中的其他控制器不同,并且是为了防止意外在错误的时间拍摄快照)。
如果未指定快照类,外部快照程序将尝试查找并为快照设置默认快照类。由默认快照类中的snapshotter指定的CSI驱动程序必须与PVC存储类中的配置程序指定的CSI驱动程序匹配。
请注意,Kubernetes Snapshot的alpha版本不提供任何一致性保证。在拍摄快照以确保数据一致性之前,你必须准备应用程序(暂停应用程序,冻结文件系统等)。
你可以通过运行kubectl describe volumesnapshot验证是否已创建VolumeSnapshot对象并使用VolumeSnapshotContent绑定:
7 使用Kubernetes导入现有快照
你始终可以通过手动创建VolumeSnapshotContent对象来将现有快照导入Kubernetes,以表示现有快照。由于VolumeSnapshotContent是非命名空间API对象,因此只有系统管理员才有权创建它。创建VolumeSnapshotContent对象后,用户可以创建指向VolumeSnapshotContent对象的VolumeSnapshot对象。在验证快照存在且VolumeSnapshot和VolumeSnapshotContent对象之间的绑定正确后,外部快照控制器会将快照标记为就绪。绑定后,快照就可以在Kubernetes中使用了。
应使用以下字段创建VolumeSnapshotContent对象,以表示预配置的快照:
apiVersion: snapshot.storage.k8s.io/v1alpha1 kind: VolumeSnapshotContent metadata: name: static-snapshot-content spec: csiVolumeSnapshotSource: driver: com.example.csi-driver snapshotHandle: snapshotcontent-example-id volumeSnapshotRef: kind: VolumeSnapshot name: static-snapshot-demo namespace: demo-namespace
应创建VolumeSnapshot对象以允许用户使用快照:
apiVersion: snapshot.storage.k8s.io/v1alpha1
kind: VolumeSnapshot
metadata:
name: static-snapshot-demo
namespace: demo-namespace
spec:
snapshotClassName: csi-snapclass
snapshotContentName: static-snapshot-content
创建这些对象后,快照控制器将它们绑定在一起,并将字段Ready(在Status下)设置为True以指示快照已准备就绪。
8 使用Kubernetes从快照配置新卷
要配置预先填充了来自快照对象的数据的新卷,请使用PersistentVolumeClaim中的新dataSource字段。 它有三个参数:
name——表示要用作源的快照的VolumeSnapshot对象的名称
kind —— 必须是VolumeSnapshot
apiGroup —— 必须是snapshot.storage.k8s.io
假定源VolumeSnapshot对象的命名空间与PersistentVolumeClaim对象的命名空间相同。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-restore Namespace: demo-namespace spec: storageClassName: csi-storageclass dataSource: name: new-snapshot-demo kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io accessModes: - ReadWriteOnce resources: requests: storage: 1Gi
创建PersistentVolumeClaim对象时,它将触发预先填充了来自指定快照的数据的新卷的配置。
9 作为存储供应商,如何向CSI驱动程序添加对快照的支持?
要实现快照功能,CSI驱动程序必须添加对其他控制器功能CREATE_DELETE_SNAPSHOT和LIST_SNAPSHOTS的支持,并实现其他控制器RPC:CreateSnapshot、DeleteSnapshot和ListSnapshots。有关详细信息,请参阅CSI规范。
尽管Kubernetes尽可能在CSI卷驱动程序的打包和部署方面具有最低限度的规定,但它提供了在Kubernetes上部署任意容器化CSI驱动程序的建议机制,以简化容器化CSI兼容卷驱动程序的部署。
作为推荐部署过程的一部分,Kubernetes团队提供了许多边车(辅助)容器,包括一个新的外部快照边车容器。
external-snapshotter监视Kubernetes API服务器以查找VolumeSnapshot和VolumeSnapshotContent对象,并针对CSI端点触发CreateSnapshot和DeleteSnapshot操作。 CSI外部供应商边车容器也已更新,以支持使用新的dataSource PVC字段从快照恢复卷。
为了支持快照功能,建议存储供应商除了外部配置器、外部挂载器以及它们的CSI驱动器之外,还要部署外部快照器边车容器,如下图所示。
在此示例中,部署yaml文件、两个边车容器、外部配置器和外部快照器以及CSI驱动程序与statefulset pod中的hostpath CSI插件一起部署。 Hostpath CSI插件是一个示例插件,不适用于生产。
10 alpha有什么限制?
Kubernetes快照的alpha实现具有以下限制:
11 下一步是什么?
根据反馈和采用情况,Kubernetes团队计划将CSI Snapshot实施推向1.13或1.14中的beta。
12 怎样才能了解更多?
请查看有关快照功能的其他文档:http://k8s.io/docs/concepts/storage/volume-snapshots和https://kubernetes-csi.github.io/docs/
13 如何参与?
像所有Kubernetes项目一样,这个项目是许多来自不同背景的贡献者共同努力的结果。
除了一直致力于快照功能的贡献者:Xing Yang(xing-yang)、Jing Xu(jingxu97)、Huamin Chen(rootfs)、Tomas Smetana(tsmetana)、Shiwei Xu(wackxu)之外,我们非常感谢Kubernetes Storage SIG和CSI社区的所有贡献者,他们帮助审核了项目的设计和实施,包括但不限于:Saad Ali (saadali)、Tim Hockin (thockin)、Jan Šafránek (jsafrane)、Luis Pabon (lpabon)、Jordan Liggitt (liggitt)、David Zhu (davidz627)、Garth Bushell (garthy)、Ardalan Kangarlou (kangarlou)、Seungcheol Ko (sngchlko)、Michelle Au (msau42)、Humble Devassy Chirammal (humblec)、Vladimir Vivien (vladimirvivien)、John Griffith (j-griffith)、Bradley Childs (childsb)、Ben Swartzlander (bswartz)、Michelle Au(msau42)、Humble Devassy Chirammal(humblec)、Vladimir Vivien(vladimirvivien)、John Griffith (j-griffith)、Bradley Childs (childsb)、Ben Swartzlander (bswartz)。
如果你有兴趣参与CSI或Kubernetes存储系统的任何部分的设计和开发,请加入Kubernetes存储特别兴趣小组(SIG)。我们正在快速成长,并始终欢迎新的贡献者
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
上一篇
已是最后文章
下一篇
已是最新文章