KubeVirt虚拟机快照和恢复快照!

发布于:2025-05-26 ⋅ 阅读:(181) ⋅ 点赞:(0)

虚拟机快照和恢复快照

KubeVirt 可以对虚拟机打快照,快照由 snapshot.kubevirt.io 组 API 支持,当前版本为 v1beta1

[root@base-k8s-master-1 ~]# kubectl api-resources | grep snapshot.kubevirt.io
virtualmachinerestores               vmrestore,vmrestores                                      snapshot.kubevirt.io/v1beta1                   true         VirtualMachineRestore
virtualmachinesnapshotcontents       vmsnapshotcontent,vmsnapshotcontents                      snapshot.kubevirt.io/v1beta1                   true         VirtualMachineSnapshotContent
virtualmachinesnapshots              vmsnapshot,vmsnapshots                                    snapshot.kubevirt.io/v1beta1                   true         VirtualMachineSnapshot

快照依赖 StorageClass,并且 StorageClass 要支持 VolumeSnapshots,还需要配置 VolumeSnapshotClasses

关于 VolumeSnapshots 和 VolumeSnapshotClasses 的创建可以参考模板,模板地址:https://github.com/ceph/ceph-csi/tree/devel/examples/rbd

[root@base-k8s-master-1 rbd]# kubectl get volumesnapshotclasses.snapshot.storage.k8s.io
NAME                      DRIVER             DELETIONPOLICY   AGE
csi-rbdplugin-snapclass   rbd.csi.ceph.com   Delete           13s

KubeVirt 支持在线快照,在线快照依赖 qemu-guest-agent,拍摄快照时虚拟机会冻结,拍摄完成后会解冻。

还原快照需要关闭虚拟机后还原。

快照支持包含热插拔磁盘,临时磁盘不支持。

目前快照只能保存磁盘数据,不支持保存内存状态。

虚拟机有多个磁盘时恢复快照后虚拟机可能会从错误的磁盘引导,可以通过 bootOrder 设置启动盘。

开启快照功能

需要开启 Snapshot 特性门控。

[root@base-k8s-master-1 rbd]# kubectl edit -n kubevirt kubevirts.kubevirt.io kubevirt
...output omitted...
spec:
certificateRotateStrategy: {}
configuration:
 developerConfiguration:
   featureGates:
      - VMLiveUpdateFeatures
      - HonorWaitForFirstConsumer
      - Snapshot
...output omitted...

为虚拟机打快照前需要先通过 bootOrder 字段来设置启动盘,以防恢复后虚拟机从错误的磁盘引导。

为虚拟机打快照

apiVersion: snapshot.kubevirt.io/v1beta1
kind: VirtualMachineSnapshot
metadata:
  name: snap-my-vm
spec:
  source:
    apiGroup: kubevirt.io
    kind: VirtualMachine
    name: my-vm
  failureDeadline: 1m

failureDeadline 表示快照超时时间,规定时间内快照未创建完则标记为失败,默认为 5 分钟。

创建快照:

[root@base-k8s-master-1 kubevirt]# kubectl apply -f snapshot.yml
virtualmachinesnapshot.snapshot.kubevirt.io/snap-my-vm created

虚拟机删除文件

[root@base-k8s-master-1 kubevirt]# virtctl ssh fedora@my-vm
Last login: Fri Mar 21 16:59:01 2025 from 10.100.239.50
[fedora@vm-dv ~]$ ls /tmp/
systemd-private-e476d875aef945f9a72ebc6e34b57f02-chronyd.service-vJ1UqN            systemd-private-e476d875aef945f9a72ebc6e34b57f02-systemd-logind.service-y1erwP
systemd-private-e476d875aef945f9a72ebc6e34b57f02-dbus-broker.service-LNmEGZ        systemd-private-e476d875aef945f9a72ebc6e34b57f02-systemd-oomd.service-RO50A9
systemd-private-e476d875aef945f9a72ebc6e34b57f02-systemd-hostnamed.service-VQi9rN  systemd-private-e476d875aef945f9a72ebc6e34b57f02-systemd-resolved.service-7ck5Xm
[fedora@vm-dv ~]$ sudo rm -rf /tmp/*
[fedora@vm-dv ~]$ ls /tmp/

恢复快照

apiVersion: snapshot.kubevirt.io/v1beta1
kind: VirtualMachineRestore
metadata:
  name: restore-my-vm
spec:
  target:
    apiGroup: kubevirt.io
    kind: VirtualMachine
    name: my-vm
  virtualMachineSnapshotName: snap-my-vm

恢复:

[root@base-k8s-master-1 kubevirt]# kubectl apply -f snapshotrestore.yml
The request is invalid: spec.target: VirtualMachine "my-vm" run strategy has to be Halted
[root@base-k8s-master-1 kubevirt]# virtctl stop my-vm
VM my-vm was scheduled to stop
[root@base-k8s-master-1 kubevirt]# kubectl get vm
NAME            AGE    STATUS    READY
my-vm           19d    Stopped   False
[root@base-k8s-master-1 kubevirt]# kubectl apply -f snapshotrestore.yml
virtualmachinerestore.snapshot.kubevirt.io/restore-my-vm created
[root@base-k8s-master-1 kubevirt]# virtctl start my-vm
VM my-vm was scheduled to start

验证

[root@base-k8s-master-1 kubevirt]# virtctl ssh fedora@my-vm
Last login: Fri Mar 21 17:15:10 2025 from 10.100.239.50
[fedora@vm-dv ~]$ ls /tmp/
systemd-private-be271e2ad3734980a387548d0af0351b-chronyd.service-rMAowE            systemd-private-be271e2ad3734980a387548d0af0351b-systemd-logind.service-nYHSPP
systemd-private-be271e2ad3734980a387548d0af0351b-dbus-broker.service-8rwdWL        systemd-private-be271e2ad3734980a387548d0af0351b-systemd-oomd.service-hejJfq
systemd-private-be271e2ad3734980a387548d0af0351b-systemd-hostnamed.service-lVMJ4U  systemd-private-be271e2ad3734980a387548d0af0351b-systemd-resolved.service-1AHHOZ

TroubleShooting

多个磁盘的虚拟机恢复后未正常引导系统

多个磁盘的虚拟机由于没有设置启动盘,导致恢复快照后虚拟机从数据磁盘引导系统,所以在创建虚拟机时要设置好系统盘,设置系统盘方式如下:

        devices:
          disks:
          - bootOrder: 1
            name: root-disk

添加 bootOrder 来设置引导顺序。


网站公告


今日签到

点亮在社区的每一天
去签到