×

您可以通过确保虚拟机(VM)的CPU型号和策略属性与节点支持的CPU型号和策略属性匹配来在节点上调度虚拟机(VM)。

策略属性

您可以通过指定策略属性和CPU特性来调度虚拟机(VM),在虚拟机在节点上调度时,这些特性必须匹配以确保兼容性。为虚拟机指定的策略属性决定该虚拟机如何在节点上调度。

策略属性 描述

force

强制将虚拟机调度到节点上。即使主机CPU不支持虚拟机的CPU,这也是正确的。

require

如果未为虚拟机配置特定的CPU型号和特性规范,则应用于虚拟机的默认策略。如果未将节点配置为使用此默认策略属性或任何其他策略属性支持CPU节点发现,则不会在该节点上调度虚拟机。主机CPU必须支持虚拟机的CPU,或者虚拟机管理程序必须能够模拟支持的CPU型号。

optional

如果主机的物理机CPU支持该虚拟机,则将虚拟机添加到节点。

disable

无法使用CPU节点发现调度虚拟机。

forbid

即使主机CPU支持该特性并且启用了CPU节点发现,也不会调度虚拟机。

设置策略属性和CPU特性

您可以为每个虚拟机(VM)设置策略属性和CPU特性,以确保根据策略和特性在节点上对其进行调度。将验证您设置的CPU特性,以确保其受主机CPU支持或由虚拟机管理程序模拟。

步骤
  • 编辑虚拟机配置文件的domain规范。以下示例为虚拟机(VM)设置CPU特性和require策略

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: myvm
    spec:
      template:
        spec:
          domain:
            cpu:
              features:
                - name: apic (1)
                  policy: require (2)
    1 虚拟机的CPU特性名称。
    2 虚拟机的策略属性。

使用支持的CPU型号调度虚拟机

您可以为虚拟机(VM)配置CPU型号,以将其调度到支持其CPU型号的节点上。

步骤
  • 编辑虚拟机配置文件的domain规范。以下示例显示为虚拟机定义的特定CPU型号

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: myvm
    spec:
      template:
        spec:
          domain:
            cpu:
              model: Conroe (1)
    1 虚拟机的CPU型号。

使用主机型号调度虚拟机

当虚拟机(VM)的CPU型号设置为host-model时,虚拟机将继承其调度到的节点的CPU型号。

步骤
  • 编辑虚拟机配置文件的domain规范。以下示例显示为虚拟机指定了host-model

    apiVersion: kubevirt/v1alpha3
    kind: VirtualMachine
    metadata:
      name: myvm
    spec:
      template:
        spec:
          domain:
            cpu:
              model: host-model (1)
    1 继承其调度到的节点的CPU型号的虚拟机。

使用自定义调度程序调度虚拟机

您可以使用自定义调度程序在节点上调度虚拟机(VM)。

先决条件
  • 为您的集群配置了辅助调度程序。

步骤
  • 通过编辑VirtualMachine清单将自定义调度程序添加到虚拟机配置。例如

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: vm-fedora
    spec:
      running: true
      template:
        spec:
          schedulerName: my-scheduler (1)
          domain:
            devices:
              disks:
                - name: containerdisk
                  disk:
                    bus: virtio
    # ...
    1 自定义调度程序的名称。如果schedulerName值与现有调度程序不匹配,则virt-launcher pod将保持Pending状态,直到找到指定的调度程序。
验证
  • 通过检查virt-launcher pod事件,验证虚拟机是否正在使用VirtualMachine清单中指定的自定义调度程序

    1. 输入以下命令查看集群中的pod列表

      $ oc get pods
      示例输出
      NAME                             READY   STATUS    RESTARTS   AGE
      virt-launcher-vm-fedora-dpc87    2/2     Running   0          24m
    2. 运行以下命令以显示pod事件

      $ oc describe pod virt-launcher-vm-fedora-dpc87

      输出中From字段的值验证调度程序名称是否与VirtualMachine清单中指定的自定义调度程序匹配

      示例输出
      [...]
      Events:
        Type    Reason     Age   From              Message
        ----    ------     ----  ----              -------
        Normal  Scheduled  21m   my-scheduler  Successfully assigned default/virt-launcher-vm-fedora-dpc87 to node01
      [...]