对rbd进行进行快照
参考:
https://www.cnblogs.com/hukey/p/13283351.html
https://www.cnblogs.com/potato-chip/p/12350720.html
一. 找到某个k8s中pod使用存储镜像的具体位置
方法如下. 以kuaikong 名字空间下的mysql为例子
1.找到此pod所在的节点
kubectl get pod -n kuaikong -o wide
2.进入到容器内部, 执行df -h, 找到挂载的磁盘
kubectl exec -it mysql-ha-mysqlha-0 -n kuaikong -- bash
root@mysql-ha-mysqlha-0:/# df -h
Filesystem Size Used Avail Use% Mounted on
overlay 2.2T 60G 2.0T 3% /
/dev/mapper/ubuntu--vg-ubuntu--lv 2.2T 60G 2.0T 3% /etc/hosts
shm 64M 0 64M 0% /dev/shm
/dev/rbd1 197G 64G 134G 33% /var/lib/mysql
这里为/dev/rbd1
3.在pod所在的节点上执行rbd showmapped,找到对应的image
root@k8s-master1:/mnt/ceph-block-device-test10# rbd showmapped
id pool namespace image snap device
0 replicapool csi-vol-21de62eb-fc10-11eb-b89e-62196757365f - /dev/rbd0
1 replicapool csi-vol-2cc12d1a-fb4f-11eb-b89e-62196757365f - /dev/rbd1
2 replicapool csi-vol-1668e0a3-71db-11ec-9442-1657fcb4c9aa - /dev/rbd2
存储镜像为csi-vol-2cc12d1a-fb4f-11eb-b89e-62196757365f
二. 测试使用testPool池中的test10镜像
1.查看所有的池
ceph osd lspools
2.查看某个池中有哪些镜像
# 这里查看testPool这个池中的镜像
rbd ls testPool
3.rbd映射特定镜像到主机
rbd map testPool/test10
rbd showmapped 查看本机所有的映射信息
取消块设备映射:rbd unmap /dev/rbd4 #挂载位置根据实际情况填写
4.格式化块设备
mkfs.ext4 -q /dev/rbd4
5.挂载使用
mkdir -p /mnt/ceph-block-device-test10
mount /dev/rbd4 /mnt/ceph-block-device-test10
6.扩展image大小
rbd resize testPool/test10 --size 100m
resize2fs /dev/rbd4
三. 对rbd快照
1.写入测试文件
在/mnt/ceph-block-device-test10中写入一个测试文件
echo "snapshot test1" > 1.txt
echo "snapshot test2" > 2.txt
2.创建快照
rbd snap create testPool/test10@snap1
3.查看快照列表
rbd snap ls testPool/test10
4.还原快照
为了检验快照恢复后数据的正确性,先把上面的2.txt删除
rm 2.txt
卸载image
umount /dev/rbd4
rbd unmap testPool/test10 或者 rbd unmap /dev/rbd4 取消块设备映射
查看快照是否还存在
rbd snap ls testPool/test10
进行快照还原
rbd snap rollback testPool/test10@snap1
映射image
rbd map testPool/test10
mount /dev/rbd4 /mnt/ceph-block-device-test10
查看数据是否恢复到快照前
ls /mnt/ceph-block-device-test10
四. 克隆
1.保护快照
rbd snap protect testPool/test10@snap1
rbd snap ls testPool/test10
2.创建克隆
克隆的名字testPool/test10-snap1-clone可以随意写,这里用"/"表明是哪个pool的,是个好习惯
rbd clone testPool/test10@snap1 testPool/test10-snap1-clone
3.查看克隆
root@k8s-master1:/mnt/ceph-block-device-test10# rbd ls testPool -l
NAME SIZE PARENT FMT PROT LOCK
image1 100 MiB 2
test10 100 MiB 2
test10@snap1 100 MiB 2 yes
test10-snap1-clone 100 MiB testPool/test10@snap1 2
注意:如果不加-l 看不到快照信息
发现新克隆的名字中没有testPool/
4.查看克隆的详细信息
克隆成功的镜像是依赖于快照的,能看到 parent 和 overlap
rbd info testPool/test10-snap1-clone
rbd image 'test10-snap1-clone':
size 100 MiB in 25 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: 213dfa95277790
block_name_prefix: rbd_data.213dfa95277790
format: 2
features: layering
op_features:
flags:
create_timestamp: Wed Jan 12 14:03:43 2022
access_timestamp: Wed Jan 12 14:03:43 2022
modify_timestamp: Wed Jan 12 14:03:43 2022
parent: testPool/test10@snap1
overlap: 100 MiB
5.对克隆进行合并
比如想要 克隆独立存在,不依赖于快照,就需要对克隆和快照做一个合并:
rbd flatten testPool/test10-snap1-clone
查看克隆是否独立存在了
rbd info testPool/test10-snap1-clone
6.删除快照
克隆独立后,此时就可以删除快照了
首先解除快照的保护模式
rbd snap unprotect testPool/test10@snap1
rbd info testPool/test10@snap1
rbd ls testPool -l
进行快照删除操作
rbd snap rm testPool/test10@snap1
rbd ls testPool -l
努力生活,融于自然