searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

kubevirt虚机热迁移

2023-10-27 06:59:07
173
0

一、应用场景

1:物理机器硬件系统的维护,故障修复和升级(upgrade),但其上的虚拟机不允许关机;

2:物理机器软件或系统升级、patch,为了不影响虚机业务,在更新之前,把虚拟机迁移到别的物理机器上;

3:一个物理机器上的负载太重,需要减少一些虚拟机来释放资源。

 

二、热迁要求

1、kubevirt 需启用热迁移 feature gates;

2、kubevirt 增加 vimi crd,添加指定迁移节点的属性;

3、虚机的系统盘和数据盘都要使用云盘,pvc 需要是 ReadWriteMany 模式;

4、虚机 virt-launcher 的默认 pod 网络,需要保留给热迁移的数据流量使用,因此不能把虚机的网卡桥接到 pod 网络,需通过 multus-cni 为集群添加一个附加 cni 网络,把这个网络提供作为虚机的业务网络,即把虚机的网络和网卡都配置为此附加网络;

5、端口 49152, 49153 需要保留给 virt-launcher pod 中可用,虚机配置中不能引用此端口;

6、虚机如果配置了直通主机设备,比如 pci 设备(GPU、NVME盘等)透传,或网卡直通 PF、VF 等,则不支持迁移;

7、虚机的调度不能使用 nodeSelector,与热迁移的检查会冲突导致无法迁移;

8、宿主机间的 CPU 型号需保持一致,可修改虚机的 cpu.model 为以下三种模式:

host-passthrough,host-model(虚机会自动使用与宿主机尽可能相近的 cpu 类型),kvm64

三种 mode 的热迁移通用性是: custom(kvm64) > host-model > host-passthrough

三种 mode 的性能排序是:host-passthrough > host-model > custom(kvm64)

9、kube-ovn 允许配置虚拟机默认路由。

 

三、创建附加网络

每个 namespace 需要创建一个附加网络,可以在创建 namespace 流程中同时创建附加网络;

apiVersion: k8s.cni.cncf.io/v1
kind: NetworkAttachmentDefinition
metadata:
  name: vm-attach
  namespace: ns01
spec:
  config: >-
    {"cniVersion": "0.3.0", "type": "kube-ovn", "server_socket":
    "/run/openvswitch/kube-ovn-daemon.sock", "provider":
    "vm-attach.ns01.ovn"}

创建完成后可通过 kubectl get network-attachment-definitions -A 检查。

 

四、虚机配置修改

如下添加,附加网络的名字、以及 namespace 需要对应前面已创建的名字。

annotations:
  ovn.kubernetes.io/logical_switch: monitor
  ovn.kubernetes.io/default_route: 'false'
  vm-attach.ns01.ovn.kubernetes.io/allow_live_migration: 'true'
  vm-attach.ns01.ovn.kubernetes.io/default_route: 'true'
  vm-attach.ns01.ovn.kubernetes.io/ip_address: 172.16.0.100
  vm-attach.ns01.ovn.kubernetes.io/logical_switch: sn-10011711-530327087576252416
  vm-attach.ns01.ovn.kubernetes.io/mac_address: '00:00:00:28:28:40'
 
networks:
  - name: vm-attach
    multus:
      networkName: ns01/vm-attach
 
    interfaces:
      - bridge: {}
        name: vm-attach

 

五、执行热迁移

创建 VirtualMachineInstanceMigration (VMIM) 对象,发起迁移。

apiVersion: kubevirt.io/v1
kind: VirtualMachineInstanceMigration
metadata:
  annotations:
    kubevirt.io/latest-observed-api-version: v1
    kubevirt.io/storage-observed-api-version: v1alpha3
  name: kubevirt-migrate-vm-01
  namespace: default
spec:
  vmiName: vm-01
  targetNode: node1

迁移过程,就是在保持原有虚机 launcher pod 正常运行情况下,同时在其他 node 节点启动一个新的虚机 pod,成功后再删除旧 pod,成功地将虚拟机内存页和 pvc 挂载复制到新 node 上。

 

0条评论
作者已关闭评论
ldy
2文章数
0粉丝数
ldy
2 文章 | 0 粉丝
ldy
2文章数
0粉丝数
ldy
2 文章 | 0 粉丝
原创

kubevirt虚机热迁移

2023-10-27 06:59:07
173
0

一、应用场景

1:物理机器硬件系统的维护,故障修复和升级(upgrade),但其上的虚拟机不允许关机;

2:物理机器软件或系统升级、patch,为了不影响虚机业务,在更新之前,把虚拟机迁移到别的物理机器上;

3:一个物理机器上的负载太重,需要减少一些虚拟机来释放资源。

 

二、热迁要求

1、kubevirt 需启用热迁移 feature gates;

2、kubevirt 增加 vimi crd,添加指定迁移节点的属性;

3、虚机的系统盘和数据盘都要使用云盘,pvc 需要是 ReadWriteMany 模式;

4、虚机 virt-launcher 的默认 pod 网络,需要保留给热迁移的数据流量使用,因此不能把虚机的网卡桥接到 pod 网络,需通过 multus-cni 为集群添加一个附加 cni 网络,把这个网络提供作为虚机的业务网络,即把虚机的网络和网卡都配置为此附加网络;

5、端口 49152, 49153 需要保留给 virt-launcher pod 中可用,虚机配置中不能引用此端口;

6、虚机如果配置了直通主机设备,比如 pci 设备(GPU、NVME盘等)透传,或网卡直通 PF、VF 等,则不支持迁移;

7、虚机的调度不能使用 nodeSelector,与热迁移的检查会冲突导致无法迁移;

8、宿主机间的 CPU 型号需保持一致,可修改虚机的 cpu.model 为以下三种模式:

host-passthrough,host-model(虚机会自动使用与宿主机尽可能相近的 cpu 类型),kvm64

三种 mode 的热迁移通用性是: custom(kvm64) > host-model > host-passthrough

三种 mode 的性能排序是:host-passthrough > host-model > custom(kvm64)

9、kube-ovn 允许配置虚拟机默认路由。

 

三、创建附加网络

每个 namespace 需要创建一个附加网络,可以在创建 namespace 流程中同时创建附加网络;

apiVersion: k8s.cni.cncf.io/v1
kind: NetworkAttachmentDefinition
metadata:
  name: vm-attach
  namespace: ns01
spec:
  config: >-
    {"cniVersion": "0.3.0", "type": "kube-ovn", "server_socket":
    "/run/openvswitch/kube-ovn-daemon.sock", "provider":
    "vm-attach.ns01.ovn"}

创建完成后可通过 kubectl get network-attachment-definitions -A 检查。

 

四、虚机配置修改

如下添加,附加网络的名字、以及 namespace 需要对应前面已创建的名字。

annotations:
  ovn.kubernetes.io/logical_switch: monitor
  ovn.kubernetes.io/default_route: 'false'
  vm-attach.ns01.ovn.kubernetes.io/allow_live_migration: 'true'
  vm-attach.ns01.ovn.kubernetes.io/default_route: 'true'
  vm-attach.ns01.ovn.kubernetes.io/ip_address: 172.16.0.100
  vm-attach.ns01.ovn.kubernetes.io/logical_switch: sn-10011711-530327087576252416
  vm-attach.ns01.ovn.kubernetes.io/mac_address: '00:00:00:28:28:40'
 
networks:
  - name: vm-attach
    multus:
      networkName: ns01/vm-attach
 
    interfaces:
      - bridge: {}
        name: vm-attach

 

五、执行热迁移

创建 VirtualMachineInstanceMigration (VMIM) 对象,发起迁移。

apiVersion: kubevirt.io/v1
kind: VirtualMachineInstanceMigration
metadata:
  annotations:
    kubevirt.io/latest-observed-api-version: v1
    kubevirt.io/storage-observed-api-version: v1alpha3
  name: kubevirt-migrate-vm-01
  namespace: default
spec:
  vmiName: vm-01
  targetNode: node1

迁移过程,就是在保持原有虚机 launcher pod 正常运行情况下,同时在其他 node 节点启动一个新的虚机 pod,成功后再删除旧 pod,成功地将虚拟机内存页和 pvc 挂载复制到新 node 上。

 

文章来自个人专栏
技术学习
2 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0