Rook Ceph Snapshot的清理
目录
问题
背景知识
Ceph rbd快照
VolumeSnapshotContent和rbd快照
删除一个rbd snapshot
删除多个rbd snapshot
参考
问题
平时用k8s进行开发测试时,如果使用了rbd的snapshot,并且清理不及时的话,或者清理方法有问题,可能会遇到以下的情况:
VolumeSnapshotContent不多
但是Ceph的snapshot很多
最终可能会导致Ceph不可用,比如因为disk空间不够。
背景知识
Ceph rbd快照
Ceph的rbd快照从定义来看,就是一个只读的image。Ceph官方文档建议在创建snapshot的时候把应用的IO停掉,或者先执行fsfreeze,这样得到的就是一个数据一致可用的快照。
由于Ceph image的layering设计,可以支持在一个快照之上快速的创建出一个可以读写的clone。
一个快照的clone从行为上跟一个普通的rbd image一样,可以读写、创建clone等。
VolumeSnapshotContent和rbd快照
通过CSI创建一个PV的VolumeSnapshot之后,会得到一个VolumeSnapshotContent,例如:
[root@sandrider~ ]# kubectl get volumesnapshotcontents.snapshot.storage.k8s.io snapcontent-062c610c-0c73-4963-9909-a5ff5c480234 -o yaml
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotContent
...
...
status:creationTime: 1656475215498012908readyToUse: truerestoreSize: 5368709120snapshotHandle: 0001-0009-rook-ceph-0000000000000001-fb1a79b8-f75f-11ec-925f-bafec6769230
这里的snapshotHandle就指向一个Ceph的rbd device。进入Rook Ceph的toolbox查看某个snapshot image:
sh-4.4$ rbd ls -l replicapool | grep snap | grep fb1a79b8-f75f-11ec-925f-bafec6769230
csi-snap-fb1a79b8-f75f-11ec-925f-bafec6769230
接着可以通过rbd info来查看这个snapshot的信息:
sh-4.4$ rbd info replicapool/csi-snap-fb1a79b8-f75f-11ec-925f-bafec6769230
rbd image 'csi-snap-fb1a79b8-f75f-11ec-925f-bafec6769230':size 5 GiB in 1280 objectsorder 22 (4 MiB objects)snapshot_count: 1id: 1f461bdf3d46fcblock_name_prefix: rbd_data.1f461bdf3d46fcformat: 2features: layering, deep-flatten, operationsop_features: clone-childflags:create_timestamp: Wed Jun 29 04:00:15 2022access_timestamp: Wed Jun 29 04:01:54 2022modify_timestamp: Wed Jun 29 04:00:15 2022parent: replicapool/csi-vol-054bf61a-f536-11ec-97e2-727ae8d37c4c@075d721c-9e5d-496c-814f-3c65f364a34eoverlap: 5 GiB
这时要注意的是,rbd在创建VolumeSnapshot的过程中,实际上一个VolumeSnapshot会对应创建出一个rbd snapshot和一个rbd的image,可以通过rbd ls -l看到:
sh-4.4$ rbd ls -l replicapool | grep snap | grep fb1a79b8-f75f-11ec-925f-bafec6769230
csi-snap-fb1a79b8-f75f-11ec-925f-bafec6769230 5 GiB replicapool/csi-vol-054bf61a-f536-11ec-97e2-727ae8d37c4c@075d721c-9e5d-496c-814f-3c65f364a34e 2
csi-snap-fb1a79b8-f75f-11ec-925f-bafec6769230@csi-snap-fb1a79b8-f75f-11ec-925f-bafec6769230 5 GiB replicapool/csi-vol-054bf61a-f536-11ec-97e2-727ae8d37c4c@075d721c-9e5d-496c-814f-3c65f364a34e
对应了两条记录,其中第一个csi-snap-fb1a79b8-f75f-11ec-925f-bafec6769230应该是rbd image,第二个csi-snap-fb1a79b8-f75f-11ec-925f-bafec6769230@csi-snap-fb1a79b8-f75f-11ec-925f-bafec6769230才是rbd snapshot。
分别通过rbd info查看:
sh-4.4$ rbd info replicapool/csi-snap-8ce9ced7-f81a-11ec-925f-bafec6769230
rbd image 'csi-snap-8ce9ced7-f81a-11ec-925f-bafec6769230':size 5 GiB in 1280 objectsorder 22 (4 MiB objects)snapshot_count: 1id: 1e97c38c9c5d0dblock_name_prefix: rbd_data.1e97c38c9c5d0dformat: 2features: layering, deep-flatten, operationsop_features: clone-childflags:create_timestamp: Thu Jun 30 02:15:45 2022access_timestamp: Thu Jun 30 02:18:40 2022modify_timestamp: Thu Jun 30 02:15:45 2022parent: replicapool/csi-vol-054bf61a-f536-11ec-97e2-727ae8d37c4c@f6958495-d367-450b-8e8c-164607ee0816overlap: 5 GiB
下面是rbd snapshot csi-snap-fb1a79b8-f75f-11ec-925f-bafec6769230@csi-snap-fb1a79b8-f75f-11ec-925f-bafec6769230:
sh-4.4$ rbd info replicapool/csi-snap-8ce9ced7-f81a-11ec-925f-bafec6769230@csi-snap-8ce9ced7-f81a-11ec-925f-bafec6769230
rbd image 'csi-snap-8ce9ced7-f81a-11ec-925f-bafec6769230':size 5 GiB in 1280 objectsorder 22 (4 MiB objects)snapshot_count: 1id: 1e97c38c9c5d0dblock_name_prefix: rbd_data.1e97c38c9c5d0dformat: 2features: layering, deep-flatten, operationsop_features: clone-childflags:create_timestamp: Thu Jun 30 02:15:45 2022access_timestamp: Thu Jun 30 02:18:40 2022modify_timestamp: Thu Jun 30 02:15:45 2022protected: Falseparent: replicapool/csi-vol-054bf61a-f536-11ec-97e2-727ae8d37c4c@f6958495-d367-450b-8e8c-164607ee0816overlap: 5 GiB
除了snapshot的信息多了一个protected: False之外,其他信息都一样。上面两个都是一个child的clone,都指向同一个parent:
sh-4.4$ rbd info replicapool/csi-vol-054bf61a-f536-11ec-97e2-727ae8d37c4c
rbd image 'csi-vol-054bf61a-f536-11ec-97e2-727ae8d37c4c':size 5 GiB in 1280 objectsorder 22 (4 MiB objects)snapshot_count: 4id: 16fa679a999612block_name_prefix: rbd_data.16fa679a999612format: 2features: layering, operationsop_features: clone-parent, snap-trashflags:create_timestamp: Sun Jun 26 09:54:50 2022access_timestamp: Thu Jun 30 16:02:12 2022modify_timestamp: Sun Jun 26 09:54:50 2022
由此可以推断,在创建VolumeSnapshot的时候,ceph的rbd实际上创建了一个只读的snapshot,又创建了一个snapshot的clone,这个clone跟一个普通的image表现一样。
删除一个rbd snapshot
1、假设用户误删了一个VolumeSnapshotContent
[root@~ ]# kubectl get volumesnapshotcontents.snapshot.storage.k8s.io snapcontent-062c610c-0c73-4963-9909-a5ff5c480234 -o yaml
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotContent
...uid: fb5744f8-c747-4f94-8e6a-8c33cebfe6c1
spec:deletionPolicy: Retain
...snapshotHandle: 0001-0009-rook-ceph-0000000000000001-fb1a79b8-f75f-11ec-925f-bafec67692
在Retain状态下删掉一个VolumeSnapshotContent:
[root@~ ]# kubectl delete volumesnapshotcontents.snapshot.storage.k8s.io snapcontent-062c610c-0c73-4963-9909-a5ff5c480234
volumesnapshotcontent.snapshot.storage.k8s.io "snapcontent-062c610c-0c73-4963-9909-a5ff5c480234" deleted
2、查看rbd snapshot状态 这时发现这个snapshot还在:
sh-4.4$ rbd ls -l replicapool | grep snap | grep fb1a79b8-f75f-11ec-925f-bafec6769230
csi-snap-fb1a79b8-f75f-11ec-925f-bafec6769230 5 GiB replicapool/csi-vol-054bf61a-f536-11ec-97e2-727ae8d37c4c@075d721c-9e5d-496c-814f-3c65f364a34e 2
csi-snap-fb1a79b8-f75f-11ec-925f-bafec6769230@csi-snap-fb1a79b8-f75f-11ec-925f-bafec6769230 5 GiB replicapool/csi-vol-054bf61a-f536-11ec-97e2-727ae8d37c4c@075d721c-9e5d-496c-814f-3c65f364a34e 2
对应了两条记录,其中第一个csi-snap-fb1a79b8-f75f-11ec-925f-bafec6769230是clone image,第二个csi-snap-fb1a79b8-f75f-11ec-925f-bafec6769230@csi-snap-fb1a79b8-f75f-11ec-925f-bafec6769230是rbd snapshot。
3、删除rbd snapshot 删除时,对rbd snapshot和rbd image要分别进行删除:
sh-4.4$ rbd snap rm replicapool/csi-snap-fb1a79b8-f75f-11ec-925f-bafec6769230@csi-snap-fb1a79b8-f75f-11ec-925f-bafec6769230
Removing snap: 100% complete...done.
sh-4.4$ rbd rm replicapool/csi-snap-fb1a79b8-f75f-11ec-925f-bafec6769230
Removing image: 100% complete...done.
删除完,可以通过rbd ls进行确认。
删除多个rbd snapshot
1、进入ceph的toolbox pod
kubectl exec -it -n rook-ceph rook-ceph-tools-xxx-xxx -- sh
2、查看现有的snapshot
rbd ls replicapool | grep snap | wc -l
以上命令可以判断出snapshot的数量,如果超过几十个,但是VolumeSnapshotContent又没几个,就可以考虑清理了。
3、清理
清理的时候,如果VolumeSnapshotContent数量比较少,那推荐先把所有的VolumeSnapshot和VolumeSnapshotContent都删掉,然后再做ceph snapshot的清理。否则还得exclude出不需要清理的rbd snapshot。
主要清理的命令如下:
清理snapshot
rbd ls -l replicapool | grep snap | awk 'BEGIN {s2="replicapool";OFS="/"} {print s2,$1}' | grep @ | xargs -n 1 rbd snap rm
清理snapshot的clone
rbd ls -l replicapool | grep snap | awk 'BEGIN {s2="replicapool";OFS="/"} {print s2,$1}' | grep -v @ | xargs -n 1 rbd rm
参考
1、https://docs.ceph.com/en/mimic/rbd/rbd-snapshot/
2、https://docs.ceph.com/en/quincy/man/8/rbd/#examples
Rook Ceph Snapshot的清理相关推荐
- K8S部署rook+ceph云原生存储
1. 概念 1.1. Ceph 1.2. Rook 1.3. 架构 2. 部署rook+ceph 2.1. 准备事项 2.1.1. 建议配置 2.1.2. 本文环境 2.1.3. 注意事项 2.1.4 ...
- kubernetes存储:local,openEBS,rook ceph
文章目录 Local 存储(PV) 概念 hostPath Local PV storageClassName指定延迟绑定动作 pv的删除流程 OpenEBS存储 控制平面 OpenEBS PV Pr ...
- kubernetes部署 rook ceph
环境: centos7.6, kubernetes 1.15.3, rook 1.3.4 部署 rook ceph 1.部署 rook ceph 官网下载 rook.解压后, cd rook-1.3. ...
- 基于Rook+Ceph的云原生存储架构剖析
[摘要]Rook 是一款云原生存储编排服务工具,Ceph 是一种广泛使用的开源分布式存储方案,通过 Rook 可以大大简化 Ceph 在 Kubernetes 集群中的部署和维护工作.本文重点介绍 ...
- 使用Rook+Ceph在Kubernetes上作持久存储
使用Rook+Ceph在Kubernetes上作持久存储 作者:Earl C. Ruby III 我想在新的Kubernetes集群上安装Prometheus和Grafana,但为了使这些软件包能够工 ...
- k8s + rook + Ceph 记录
k8s 部署 ceph git clone git@github.com:rook/rook.git --single-branch --branch v1.6.11 failed to reconc ...
- K8S通过rook部署rook ceph集群、配置dashboard访问并创建pvc
Rook概述 Ceph简介 Ceph是一种高度可扩展的分布式存储解决方案,提供对象.文件和块存储.在每个存储节点上,将找到Ceph存储对象的文件系统和Ceph OSD(对象存储守护程序)进程.在Cep ...
- Rook Ceph浅谈
部署rook-ceph git clone --single-branch --branch v1.9.2 https://github.com/rook/rook.git Network 1.osd ...
- kubernetes 部署 rook (ceph集群)
说明 存储初始化 部署 rook 存储初始化 常见存储磁盘结构 全部 ssd 磁盘组成 (推荐) ceph 数据存放独立 ssd 硬盘, journal 数据存放至独立 ssd 硬盘 ( 不知道 ro ...
最新文章
- linux c语言文件拷贝_linux - 远程拷贝文件之scp
- python生成csv文件带水印_Python从CSV文件导入数据和生成简单图表
- Spark杀死我们提交的application
- 什么是mixin,为什么它们有用?
- Excel——字符串操作函数
- imp 只导表前10条数据_2020年玉石行情,从10条数据就能略窥一二
- 软考数据库系统工程师教程知识点总结
- ffmpeg教程 如何输出任务日志?用于进度条显示
- win 11 无法打出中文句号问题(中/英文标点切换) 微软五笔输入法
- 计算机组成原理-计算机可靠性模型(串联并联系统/串并联混合系统)
- vmware mac os 10.11.6 安装xcode 8
- 图像形成(2) 基本的辐射图像形成模型(扩展内容,可不阅读)
- 我用Python爬了4400条淘宝商品数据,竟发现了这些“潜规则”
- 【java】IDEA设置自己的名字和时间(Created by)
- 禁止div被拖动 css,【Web前端问题】div在拖动时出现禁止图标
- 分析bootstrap class path not set in conjunction with -source 1.6
- Python-练习 43. 面向对象的分析和设计基础
- C语言实现顺序栈的基本操作(初始化、判断空、入栈、出栈、获取栈顶元素)
- Vultr 怎么修改 Root 账户密码
- 如何评估企业人力资源价值--人力资源产出指标
热门文章
- 如何制作一个连杆组简易四足机器人
- [解锁新姿势] 优化参数前置校验
- 有谁把强势放错了位置,用错了力道
- Properties的getProperty
- 怎么在计算机应用程序延时启动,Window 7 如何设置自动重启、自动关机、延时启动程序、开机恢复注册表启动项为初始值等批处理操作?...
- c++备份与恢复注册表-错误记录
- 办理生育服务证登记证明
- Ubuntu18.04安装ch340驱动
- 关于 win10 创建WiFi热点 问题(无法启动承载网络 , 我们无法设置移动热点,因为你的电脑未建立以太网,wifi或手机网络数据连接 )...
- oracle中pdb,Oracle 12C新特性-CDB和PDB 详解