目录
3.修改rook toolbox.yaml将本地目录挂载到pod中:
1.ceph rbd数据恢复思路:
1、为rbd image创建快照:rbd snap create
2、将快照导出成文件备份
(1)全量导出:rbd export
(2)增量导出:rbd export-diff
3、将备份文件导入为新的rbd image
(1)全量导入:rbd import (与 “全量导出” 相对应)
(2)增量导入:rbd import-diff(与“增量导出”相对应)
2.kubevrit虚拟机pvc导出(全量):
1.查看虚拟机 pvc 使用的是哪个 rbd image : 虚拟机pvcpvrbd image
# kubectl describe pv pvc-f144141a-771c-404c-9559-698dfc6c5da7
Name: pvc-f144141a-771c-404c-9559-698dfc6c5da7
Labels: <none>
Annotations: pv.kubernetes.io/provisioned-by: rook-ceph.rbd.csi.ceph.com
Finalizers: [kubernetes.io/pv-protection]
StorageClass: rook-ceph-block
Status: Bound
Claim: default/win10-vm1
Reclaim Policy: Delete
Access Modes: RWX
VolumeMode: Block
Capacity: 100Gi
Node Affinity: <none>
Message:
Source:
Type: CSI (a Container Storage Interface (CSI) volume source)
Driver: rook-ceph.rbd.csi.ceph.com
FSType:
VolumeHandle: 0001-0009-rook-ceph-0000000000000002-5d17ef16-d002-11ec-81db-00000071e21a
ReadOnly: false
VolumeAttributes: clusterID=rook-ceph
csi.storage.k8s.io/pv/name=pvc-f144141a-771c-404c-9559-698dfc6c5da7
csi.storage.k8s.io/pvc/name=win10-vm1
csi.storage.k8s.io/pvc/namespace=default
imageFeatures=layering
imageFormat=2
imageName=csi-vol-5d17ef16-d002-11ec-81db-00000071e21a
journalPool=replicapool
pool=replicapool
storage.kubernetes.io/csiProvisionerIdentity=1651892876408-8081-rook-ceph.rbd.csi.ceph.com
Events: <none>
详解:Source.VolumeAttributes.pool:是ceph pool的名字
Source.VolumeAttributes.imageName:是ceph rbd image的名称
3.修改rook toolbox.yaml将本地目录挂载到pod中:
# mkdir -p /data/vms-backup
# chmod 777 vms-backup
# kubectl apply -f toolbox.yaml
在原有的yaml文件中增加:
- name: vms-disk
mountPath: /etc/ceph/vms- name: vms-disk
hostPath:
path: /data/vms-backup
type: Directory
apiVersion: apps/v1
kind: Deployment
metadata:
name: rook-ceph-tools
namespace: rook-ceph # namespace:cluster
labels:
app: rook-ceph-tools
spec:
replicas: 1
selector:
matchLabels:
app: rook-ceph-tools
template:
metadata:
labels:
app: rook-ceph-tools
spec:
dnsPolicy: ClusterFirstWithHostNet
containers:
- name: rook-ceph-tools
image: rook/ceph:v1.8.7
command: ["/bin/bash"]
args: ["-m", "-c", "/usr/local/bin/toolbox.sh"]
imagePullPolicy: IfNotPresent
tty: true
securityContext:
runAsNonRoot: true
runAsUser: 2016
runAsGroup: 2016
env:
- name: ROOK_CEPH_USERNAME
valueFrom:
secretKeyRef:
name: rook-ceph-mon
key: ceph-username
- name: ROOK_CEPH_SECRET
valueFrom:
secretKeyRef:
name: rook-ceph-mon
key: ceph-secret
volumeMounts:
- mountPath: /etc/ceph
name: ceph-config
- name: mon-endpoint-volume
mountPath: /etc/rook
- name: vms-disk
mountPath: /etc/ceph/vms
volumes:
- name: mon-endpoint-volume
configMap:
name: rook-ceph-mon-endpoints
items:
- key: data
path: mon-endpoints
- name: ceph-config
emptyDir: {}
- name: vms-disk
hostPath:
path: /data/vms-backup
type: Directory
tolerations:
- key: "node.kubernetes.io/unreachable"
operator: "Exists"
effect: "NoExecute"
tolerationSeconds: 5
4.全量导出 rbd export
# kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- bash
查看的pool
$ ceph osd lspools
1 device_health_metrics
2 replicapool
$ rbd ls replicapool
csi-snap-b8999bb0-cdc8-11ec-81db-00000071e21a
csi-vol-32acd0e4-cdb4-11ec-81db-00000071e21a
csi-vol-41f4dcc5-cf84-11ec-81db-00000071e21a
csi-vol-5d17ef16-d002-11ec-81db-00000071e21a
csi-vol-88b12812-cdc8-11ec-81db-00000071e21a
csi-vol-88b12812-cdc8-11ec-81db-00000071e21a-temp
csi-vol-b91dad6e-d055-11ec-81db-00000071e21a
csi-vol-c5c18a0b-cdc8-11ec-81db-00000071e21a
全量导出:$ rbd export replicapool/csi-vol-5d17ef16-d002-11ec-81db-00000071e21a vms/win10-full.img
Exporting image: 100% complete...done.在物理机上查看导出镜像:
[root@worker01 vms-backup]# ls
win10-full.img本地使用镜像启动,并在虚拟机中添加文件:
5.全量导入:
将本地修改过的虚拟机镜像导入ceph存储中:$ rbd import vms/win10-full.img replicapool/resume-full
Importing image: 100% complete...done.
$ rbd ls replicapool
csi-snap-b8999bb0-cdc8-11ec-81db-00000071e21a
csi-vol-32acd0e4-cdb4-11ec-81db-00000071e21a
csi-vol-41f4dcc5-cf84-11ec-81db-00000071e21a
csi-vol-5d17ef16-d002-11ec-81db-00000071e21a
csi-vol-88b12812-cdc8-11ec-81db-00000071e21a
csi-vol-88b12812-cdc8-11ec-81db-00000071e21a-temp
csi-vol-b91dad6e-d055-11ec-81db-00000071e21a
csi-vol-c5c18a0b-cdc8-11ec-81db-00000071e21a
resume-full
6.将新的rbd image 恢复到虚拟机中
关闭使用的虚拟机:
$ rbd snap purge replicapool/csi-vol-5d17ef16-d002-11ec-81db-00000071e21a
$ rbd rm replicapool/csi-vol-5d17ef16-d002-11ec-81db-00000071e21a
Removing image: 100% complete...done.$ rbd rename replicapool/resume-full replicapool/csi-vol-5d17ef16-d002-11ec-81db-00000071e21a
$ rbd ls replicapool
csi-snap-b8999bb0-cdc8-11ec-81db-00000071e21a
csi-vol-32acd0e4-cdb4-11ec-81db-00000071e21a
csi-vol-41f4dcc5-cf84-11ec-81db-00000071e21a
csi-vol-5d17ef16-d002-11ec-81db-00000071e21a
csi-vol-88b12812-cdc8-11ec-81db-00000071e21a
csi-vol-88b12812-cdc8-11ec-81db-00000071e21a-temp
csi-vol-b91dad6e-d055-11ec-81db-00000071e21a
csi-vol-c5c18a0b-cdc8-11ec-81db-00000071e21a
到此步骤已经恢复完成,需要启动虚拟机验证:
注意:
如果在启动虚拟机时出现如下报错:
分析原因为:OS kernel不支持块设备镜像的一些特性,所以映射失败。
解决版本:
查看镜像支持了那些特性:
$ rbd info replicapool/csi-vol-5d17ef16-d002-11ec-81db-00000071e21a
rbd image 'csi-vol-5d17ef16-d002-11ec-81db-00000071e21a':
size 100 GiB in 25600 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: 13d6f4a9adffd
block_name_prefix: rbd_data.13d6f4a9adffd
format: 2
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
op_features:
flags:
create_timestamp: Thu May 12 03:10:18 2022
access_timestamp: Thu May 12 03:10:18 2022
modify_timestamp: Thu May 12 03:12:26 2022
直接disable rbd镜像不支持的特性:
$ rbd feature disable replicapool/csi-vol-5d17ef16-d002-11ec-81db-00000071e21a exclusive-lock object-map fast-diff deep-flatten
$ rbd info replicapool/csi-vol-5d17ef16-d002-11ec-81db-00000071e21a
rbd image 'csi-vol-5d17ef16-d002-11ec-81db-00000071e21a':
size 100 GiB in 25600 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: 13d6f4a9adffd
block_name_prefix: rbd_data.13d6f4a9adffd
format: 2
features: layering
op_features:
flags:
create_timestamp: Thu May 12 03:10:18 2022
access_timestamp: Thu May 12 03:10:18 2022
modify_timestamp: Thu May 12 03:12:26 2022
参考文档:
映射块设备提示rbd: sysfs write failed的解决方法 - sisimi_2017 - 爱码网
总结:
这种方式是利用ceph的特性来对虚拟机进行本地导出进行备份和利用本地备份进行恢复,为了虚拟机数据安全可以定期使用rbd snap create 创建快照。后期恢复kubevirt创建虚拟机快照和恢复。