kubevirt 虚拟机基于ceph rbd的导出导入和数据恢复(五)

目录

1.ceph rbd数据恢复思路:

2.kubevrit虚拟机pvc导出(全量):

3.修改rook toolbox.yaml将本地目录挂载到pod中:

4.全量导出 rbd export

5.全量导入:

6.将新的rbd image 恢复到虚拟机中


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 : 虚拟机\rightarrowpvc\rightarrowpv\rightarrowrbd 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
参考文档:

cephRBD的导出导入和数据恢复 - 百度文库

映射块设备提示rbd: sysfs write failed的解决方法 - sisimi_2017 - 爱码网

总结:

       这种方式是利用ceph的特性来对虚拟机进行本地导出进行备份和利用本地备份进行恢复,为了虚拟机数据安全可以定期使用rbd snap create 创建快照。后期恢复kubevirt创建虚拟机快照和恢复。

kubevirt交流群:766168407

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值