k8s云原生rook-ceph pvc快照与恢复(上)

#作者:Unstopabler

文章目录

前言

Rook 是一个开源的云原生存储编排器,为各种存储解决方案提供平台、框架和支持,以便与云原生环境进行原生集成。

Rook 将分布式存储系统转变为自管理、自扩展、自修复的存储服务。它使存储管理员的部署、引导、配置、配置、扩展、升级、迁移、灾难恢复、监控和资源管理等任务自动化。简而言之,Rook 就是一组 Kubernetes 的 Operator,它可以完全控制多种数据存储解决方案(例如 Ceph、EdgeFS、Minio、Cassandra)的部署,管理以及自动恢复。rook利用Kubernetes平台的强大功能,通过Kubernetes Operator为每个存储提供商提供服务。Rook目前支持Ceph、NFS、Minio Object Store和CockroachDB。

部署rook-ceph on kubernets条件

  • 已经部署好的kubernetes集群1.19版本或者更高
  • osd节点需要有未格式化文件系统磁盘,至少需要3块硬盘

注:这里pvc快照基于rook-ceph为云原生存储支撑,

部署参考文档:https://rook.io/docs/rook/v1.10/Getting-Started/quickstart/#tldr

rook与kubernets结合架构如如下

Ceph快照概述

Ceph rbd块原生提供了快照与克隆的能力,什么是快照?快照就是镜像某个时刻的状态,包括当时已经落盘的数据。制作快照后成为一个只读镜像文件,无法对快照的数据进行写入操作,因此需要保护起来,数据丢失之后可以基于快照进行回滚操作。rbd提供一个好用的功能copy-on-write,即基于快照快速的克隆功能,克隆处理的子镜像和快照是一个相互依赖的关系,可以完成虚拟机秒级的高级特性。

快照卷作为源数据,提供给上层业务使用应用于对数据只读场景,如开发测试的部分场景。该场景下,先对逻辑卷进行快照创建,将创建好的快照卷提供给上层业务使用,快照卷的只读特性不仅可满足上层业务的访问需求,也可以有效防止误操作对原逻辑卷数据的更改。

Ceph-rbd快照详解 官方文档:https://docs.ceph.com/en/latest/rbd/rbd-snapshot/

什么是PVC

PVC是PersistentVolumeClaim的缩写,pvc描述 Pod想要使用的持久化属性,比如存储大小、读写权限等。PVC是在Kubernetes中一种抽象的存储卷类型,代表了某个具体类型存储的数据卷表达。 其设计意图是分离存储与应用编排,将存储细节抽象出来并实现存储的编排。 这样Kubernetes中存储卷对象独立于应用编排而单独存在,在编排层面使应用和存储解耦。

容器中并没有直接使用rbd块集成,而是通过pvc实现和底层块存储的调用,容器中完成快照制作,需要snapshot的控制器来实现这个功能,snapshot控制器是一个第三方crd,其通过crds的方式和kubernets集成,能够完成pvc快照到底层rbd块的控制逻辑。

安装快照控制器和CRD

1.安装crds资源

下载第三方crds

复制代码
[root@k8s-master~]#git clone https://github.com/kubernetes-csi/external-snapshotter.git
Cloning into 'external-snapshotter'...
remote: Enumerating objects: 51112, done.
remote: Total 51112 (delta 0), reused 0 (delta 0), pack-reused 51112
Receiving objects: 100% (51112/51112), 64.98 MiB | 1.85 MiB/s, done.
Resolving deltas: 100% (26577/26577), done.
Updating files: 100% (4018/4018), done.

应用crd资源

复制代码
[root@k8s-master ~]# kubectl apply -f external-snapshotter/client/config/crd/
customresourcedefinition.apiextensions.k8s.io/volumesnapshotclasses.snapshot.storage.k8s.io configured
customresourcedefinition.apiextensions.k8s.io/volumesnapshotcontents.snapshot.storage.k8s.io configured
customresourcedefinition.apiextensions.k8s.io/volumesnapshots.snapshot.storage.k8s.io configured
[root@k8s-master ~]#

查看crd资源

复制代码
[root@k8s-master ~]# kubectl get customresourcedefinitions.apiextensions.k8s.io | grep volumesnap
volumesnapshotclasses.snapshot.storage.k8s.io    2022-11-23T01:51:36Z
volumesnapshotcontents.snapshot.storage.k8s.io   2022-11-23T01:51:36Z
volumesnapshots.snapshot.storage.k8s.io          2022-11-23T01:51:36Z
[root@k8s-master ~]#

2.安装控制器

复制代码
[root@k8s-master ~]# kubectl apply -f external-snapshotter/deploy/kubernetes/snapshot-controller/
serviceaccount/snapshot-controller created
clusterrole.rbac.authorization.k8s.io/snapshot-controller-runner created
clusterrolebinding.rbac.authorization.k8s.io/snapshot-controller-role created
role.rbac.authorization.k8s.io/snapshot-controller-leaderelection created
rolebinding.rbac.authorization.k8s.io/snapshot-controller-leaderelection created
deployment.apps/snapshot-controller created
[root@k8s-master ~]#

查看控制器pod运行状态

复制代码
[root@k8s-master ~]# kubectl get pod -n kube-system -l app=snapshot-controller
NAME                                   READY   STATUS    RESTARTS   AGE
snapshot-controller-5655ff978f-dh5dc   1/1     Running   0          8m12s
snapshot-controller-5655ff978f-fbtch   1/1     Running   0          8m12s
[root@k8s-master ~]#

3.安装快照类

控制器和crds后,为了能够使用快照的功能,需要定义一个volumesnapshotclass,类似storageclass,volumesnapshotclass是专门针对快照功能而提供的存储类,是kubernets中定义的一个特性。

安装方法如下

复制代码
[root@k8s-master rbd]# pwd
/root/yml/rook/deploy/examples/csi/rbd
[root@k8s-master rbd]# kubectl apply -f snapshotclass.yaml
volumesnapshotclass.snapshot.storage.k8s.io/csi-rbdplugin-snapclass created
[root@k8s-master rbd]#

查看快照类

复制代码
[root@k8s-master rbd]# kubectl get volumesnapshotclasses.snapshot.storage.k8s.io
NAME                      DRIVER                       DELETIONPOLICY   AGE
csi-rbdplugin-snapclass   rook-ceph.rbd.csi.ceph.com   Delete           38s
[root@k8s-master rbd]#
相关推荐
东风微鸣1 小时前
职场生存指南:如何优雅应对"双面人"同事
docker·云原生·kubernetes·可观察性
●VON2 小时前
重生之我在暑假学习微服务第七天《微服务之服务治理篇》
java·学习·微服务·云原生·nacos·架构·springcloud
云和数据.ChenGuang2 小时前
云计算k8s集群部署配置问题总结
云原生·容器·kubernetes·云计算
阿里云云原生2 小时前
Vibecoding 新体验:实测 Qwen3 Coder 代码生成效果
云原生
斯普信专业组3 小时前
k8s云原生rook-ceph pvc快照与恢复(下)
ceph·云原生·kubernetes
爱吃芝麻汤圆3 小时前
k8s之DevicePlugin
云原生·容器·kubernetes
kaliarch3 小时前
迈向云基础设施自动化 - Terraformer 助力腾讯云资源管理转型
后端·云原生·自动化运维
赵文宇(温玉)6 小时前
1.6万 Star 的流行容器云平台停止开源
云原生·容器·开源·容器云·kubespere
David爱编程6 小时前
K8s 的工作机制原理:控制器如何“自动修复”
云原生·容器·kubernetes
David爱编程6 小时前
Kubernetes 中 StorageClass 高级用法与实战
云原生·容器·kubernetes