KubeVirt 虚拟机快照和恢复快照

虚拟机快照和恢复快照

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

关于 VolumeSnapshotsVolumeSnapshotClasses 的创建可以参考 ceph-csi/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 来设置引导顺序。

KubeVirt 虚拟机快照和恢复快照
https://www.linuxstudynotes.com/2025/03/28/k8s/kubevirt-%e8%99%9a%e6%8b%9f%e6%9c%ba%e5%bf%ab%e7%85%a7%e5%92%8c%e6%81%a2%e5%a4%8d%e5%bf%ab%e7%85%a7/
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇