目录

问题

背景知识

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的清理相关推荐

  1. 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 ...

  2. kubernetes存储:local,openEBS,rook ceph

    文章目录 Local 存储(PV) 概念 hostPath Local PV storageClassName指定延迟绑定动作 pv的删除流程 OpenEBS存储 控制平面 OpenEBS PV Pr ...

  3. kubernetes部署 rook ceph

    环境: centos7.6, kubernetes 1.15.3, rook 1.3.4 部署 rook ceph 1.部署 rook ceph 官网下载 rook.解压后, cd rook-1.3. ...

  4. 基于Rook+Ceph的云原生存储架构剖析

     [摘要]Rook 是一款云原生存储编排服务工具,Ceph 是一种广泛使用的开源分布式存储方案,通过 Rook 可以大大简化 Ceph 在 Kubernetes 集群中的部署和维护工作.本文重点介绍 ...

  5. 使用Rook+Ceph在Kubernetes上作持久存储

    使用Rook+Ceph在Kubernetes上作持久存储 作者:Earl C. Ruby III 我想在新的Kubernetes集群上安装Prometheus和Grafana,但为了使这些软件包能够工 ...

  6. k8s + rook + Ceph 记录

    k8s 部署 ceph git clone git@github.com:rook/rook.git --single-branch --branch v1.6.11 failed to reconc ...

  7. K8S通过rook部署rook ceph集群、配置dashboard访问并创建pvc

    Rook概述 Ceph简介 Ceph是一种高度可扩展的分布式存储解决方案,提供对象.文件和块存储.在每个存储节点上,将找到Ceph存储对象的文件系统和Ceph OSD(对象存储守护程序)进程.在Cep ...

  8. Rook Ceph浅谈

    部署rook-ceph git clone --single-branch --branch v1.9.2 https://github.com/rook/rook.git Network 1.osd ...

  9. kubernetes 部署 rook (ceph集群)

    说明 存储初始化 部署 rook 存储初始化 常见存储磁盘结构 全部 ssd 磁盘组成 (推荐) ceph 数据存放独立 ssd 硬盘, journal 数据存放至独立 ssd 硬盘 ( 不知道 ro ...

最新文章

  1. linux c语言文件拷贝_linux - 远程拷贝文件之scp
  2. python生成csv文件带水印_Python从CSV文件导入数据和生成简单图表
  3. Spark杀死我们提交的application
  4. 什么是mixin,为什么它们有用?
  5. Excel——字符串操作函数
  6. imp 只导表前10条数据_2020年玉石行情,从10条数据就能略窥一二
  7. 软考数据库系统工程师教程知识点总结
  8. ffmpeg教程 如何输出任务日志?用于进度条显示
  9. win 11 无法打出中文句号问题(中/英文标点切换) 微软五笔输入法
  10. 计算机组成原理-计算机可靠性模型(串联并联系统/串并联混合系统)
  11. vmware mac os 10.11.6 安装xcode 8
  12. 图像形成(2) 基本的辐射图像形成模型(扩展内容,可不阅读)
  13. 我用Python爬了4400条淘宝商品数据,竟发现了这些“潜规则”
  14. 【java】IDEA设置自己的名字和时间(Created by)
  15. 禁止div被拖动 css,【Web前端问题】div在拖动时出现禁止图标
  16. 分析bootstrap class path not set in conjunction with -source 1.6
  17. Python-练习 43. 面向对象的分析和设计基础
  18. C语言实现顺序栈的基本操作(初始化、判断空、入栈、出栈、获取栈顶元素)
  19. Vultr 怎么修改 Root 账户密码
  20. 如何评估企业人力资源价值--人力资源产出指标

热门文章

  1. 如何制作一个连杆组简易四足机器人
  2. [解锁新姿势] 优化参数前置校验
  3. 有谁把强势放错了位置,用错了力道
  4. Properties的getProperty
  5. 怎么在计算机应用程序延时启动,Window 7 如何设置自动重启、自动关机、延时启动程序、开机恢复注册表启动项为初始值等批处理操作?...
  6. c++备份与恢复注册表-错误记录
  7. 办理生育服务证登记证明
  8. Ubuntu18.04安装ch340驱动
  9. 关于 win10 创建WiFi热点 问题(无法启动承载网络 , 我们无法设置移动热点,因为你的电脑未建立以太网,wifi或手机网络数据连接 )...
  10. oracle中pdb,Oracle 12C新特性-CDB和PDB 详解