KubeVirt 08:VM 在线迁移
Live migration 是将运行的虚拟机实例在线迁移到另一个节点的过程。
启用 livt-migration 支持
如果是 v0.56 之前的版本需要手动启动在线迁移的功能,在 featureGates 中添加 LiveMigration 。
限制
要对 VM 热迁移,还需满足以下要求:
- VM 使用的 PVC 必须是 RWX 模式
- 不允许 Pod 网络绑定到 bridge 接口类型
- 端口
4915249153在virt-launcherpod 处于可用的
如果不符合热迁移的要求时,会在 VMI 的 Conditions 中抛出不满足的 message ,如:
1 | cannot migrate VMI which does not use masquerade, bridge with kubevirt.io/allow-pod-bridge-network-live-migration VM annotation or a migratable plugin to connect to the pod network |
上述原因是 Pod 网络应该使用 masqureade 类型,而不是 bridge 类型。
修改 VM 网络类型
编辑 VM 资源,为 VM 设置网络接口并指定网络的类型:
1 | kind: VM |
在 domain 中定义了网络的名称和类型,在 spec 中声明网络定义后端,名字应与前面的匹配,网络类型为 pod 代表使用的是默认 Kubernetes 网络。
网络修改成 masquerade 后,删除 VMI,使 VMI 使用新的网络接口类型。
对 VM 进行热迁移
实施热迁移有两种方式:
- 使用
VirtulMachineInstanceMigration对象 - 使用
virtctl migrate命令
使用 VMIM 对象
可以参考以下资源定义,对 fedora-vm VM 进行热迁移:
1 | apiVersion: kubevirt.io/v1 |
在开启热迁移之前,先验证 VM 运行的所在的节点:
1 | vagrant@master01:~$ k describe vmi fedora-vm -n vm-migration | grep -i 'node name' |
进行迁移,并查看迁移的状态:
1 | vagrant@master01:~$ kubectl -n vm-migration apply -f migration-job.yml |
查看当前运行的节点:
1 | vagrant@master01:~$ k describe vmi fedora-vm -n vm-migration | grep -i 'node name' |
可以看到 VMI 从 worker01 热迁移到了 master01
使用 virtctl 命令迁移
virtctl 提供了 migrate 子命令可用于热迁移 VMI:
1 | vagrant@master01:~$ virtctl migrate fedora-vm -n vm-migration |
查看迁移状态:
1 | vagrant@master01:~$ kubectl describe vmi fedora-vm -n vm-migration | grep Migrated | tail -1 |
通过查看 VMI 的事件可以看到从原先的 master01 迁移到了 worker01 。
取消迁移
热迁移可以通过 virtctl 进行取消:
1 | vagrant@master01:~$ virtctl migrate-cancel fedora-vm -n vm-migration |
修改集群范围的迁移限制
默认情况下,集群中迁移的限制配置为:
- 最大并行迁移的虚拟机数为
5 - 单个节点最大并行迁移虚拟机数为
2 - 每个迁移限制带宽为
64MiB/s
这些值可以通过 kubevirt CR 进行更改:
1 | apiVersion: kubevirt.io/v1 |
评论· · · · · ·