第 8 章 创建虚拟机


8.1. 从实例类型创建虚拟机

您可以使用实例类型(无论 OpenShift Container Platform web 控制台或 CLI 创建虚拟机)来简化虚拟机 (VM) 创建。

8.1.1. 关于实例类型

实例类型是一种可重复使用的对象,您可以定义应用到新虚拟机的资源和特征。您可以定义自定义实例类型,或使用安装 OpenShift Virtualization 时包括的各种类型。

要创建新实例类型,您必须首先手动创建清单,也可以使用 virtctl CLI 工具创建清单。然后,您可以通过将清单应用到集群来创建实例类型对象。

OpenShift Virtualization 为配置实例类型提供两个 CRD:

  • 命名空间范围对象:VirtualMachineInstancetype
  • 集群范围的对象: VirtualMachineClusterInstancetype

这些对象使用相同的 VirtualMachineInstancetypeSpec

8.1.1.1. 所需属性

配置实例类型时,您必须定义 cpumemory 属性。其他属性是可选的。

注意

从实例类型创建虚拟机时,您无法覆盖实例类型中定义的任何参数。

因为实例类型需要定义的 CPU 和内存属性,所以 OpenShift Virtualization 始终会在从实例类型创建虚拟机时拒绝这些资源的额外请求。

您可以手动创建实例类型清单。例如:

带有必填字段的 YAML 文件示例

apiVersion: instancetype.kubevirt.io/v1beta1
kind: VirtualMachineInstancetype
metadata:
  name: example-instancetype
spec:
  cpu:
    guest: 1 
1

  memory:
    guest: 128Mi 
2
Copy to Clipboard Toggle word wrap

1
必需。指定要分配给客户机的 vCPU 数量。
2
必需。指定要分配给客户机的内存量。

您可以使用 virtctl CLI 实用程序创建实例类型清单。例如:

带有必填字段的 virtctl 命令示例

$ virtctl create instancetype --cpu 2 --memory 256Mi
Copy to Clipboard Toggle word wrap

其中:

--cpu <value>
指定要分配给客户机的 vCPU 数量。必需。
--memory <value>
指定要分配给客户机的内存量。必需。
提示

您可以运行以下命令来立即从新清单中创建对象:

$ virtctl create instancetype --cpu 2 --memory 256Mi | oc apply -f -
Copy to Clipboard Toggle word wrap

8.1.1.2. 可选属性

除了所需的 cpumemory 属性外,您还可以在 VirtualMachineInstancetypeSpec 中包含以下可选属性:

annotations
列出应用到虚拟机的注解。
gpus
列出用于 passthrough 的 vGPU。
hostDevices
列出用于透传的主机设备。
ioThreadsPolicy
定义用于管理专用磁盘访问的 IO 线程策略。
launchSecurity
配置安全加密虚拟化 (SEV)。
nodeSelector
指定节点选择器来控制调度此虚拟机的节点。
schedulerName
定义用于此虚拟机的自定义调度程序,而不是默认的调度程序。

8.1.1.3. 控制器修订

当使用实例类型创建虚拟机时,ControllerRevision 对象会保留实例类型对象的不可变快照。此快照锁定在实例类型对象中定义的与资源相关的特征,如所需的客户机 CPU 和内存。VM 状态还包含对 ControllerRevision 对象的引用。

此快照对于版本控制至关重要,如果虚拟机运行时更新了底层实例类型对象,则确保启动虚拟机时创建的虚拟机实例不会改变。

8.1.2. 预定义的实例类型

OpenShift Virtualization 包括一组预定义的实例类型,称为 common-instancetypes。一些会针对特定工作负载进行定制,另一些则与工作负载无关。

这些实例类型资源根据其系列、版本和大小命名。大小值使用 . 分隔符,范围从 nano8xlarge

Expand
表 8.1. common-instancetypes 系列比较
使用案例系列特性vCPU 与内存的比率资源示例

网络

N

  • Hugepages
  • 专用 CPU
  • 隔离的仿真程序线程
  • 需要能够运行 DPDK 工作负载的节点

1:2

n1.medium
  • 4 个 vCPU
  • 4GiB 内存

过量使用

O

  • 过量使用的内存
  • Burstable CPU 性能

1:4

o1.small
  • 1 vCPU
  • 2GiB 内存

专用于 Compute

CX

  • Hugepages
  • 专用 CPU
  • 隔离的仿真程序线程
  • vNUMA

1:2

cx1.2xlarge
  • 8 个 vCPU
  • 16GiB 内存

常规目的

U

  • Burstable CPU 性能

1:4

u1.medium
  • 1 vCPU
  • 4GiB 内存

需要大量内存

M

  • Hugepages
  • Burstable CPU 性能

1:8

m1.large
  • 2 个 vCPU
  • 16GiB 内存

8.1.3. 指定实例类型或首选项

您可以指定实例类型、首选项或两者来定义一组工作负载大小和运行时特征,以便在多个虚拟机间重复使用。

8.1.3.1. 使用标志来指定实例类型和首选项

使用标志指定实例类型和首选项。

先决条件

  • 集群中必须具有实例类型、首选或两者。

流程

  1. 要在创建虚拟机时指定实例类型,请使用 --instancetype 标志。要指定首选项,请使用 --preference 标志。以下示例包括这两个标记:

    $ virtctl create vm --instancetype <my_instancetype> --preference <my_preference>
    Copy to Clipboard Toggle word wrap
  2. 可选: 要指定命名空间的实例类型或首选项,请在传递给 --instancetype--preference 的标志命令的值中包含 kind。命名空间实例类型或首选项必须位于您要在其中创建虚拟机的同一命名空间中。以下示例包括命名空间实例类型和命名空间首选项的标记:

    $ virtctl create vm --instancetype virtualmachineinstancetype/<my_instancetype> --preference virtualmachinepreference/<my_preference>
    Copy to Clipboard Toggle word wrap

8.1.3.2. 推断实例类型或首选项

推断实例类型、首选项或两者都默认启用,并且 inferFromVolume 属性的 inferFromVolumeFailure 策略被设置为 Ignore。当引导卷的推断时,会忽略错误,并使用实例类型创建虚拟机并取消设置虚拟机。

但是,当应用标记时,inferFromVolumeFailure 策略默认为 Reject。当从引导卷推断出时,错误会导致创建该虚拟机的拒绝。

您可以使用 --infer-instancetype--infer-preference 标志来推断哪个实例类型、首选项或两者用来定义虚拟机的工作负载大小和运行时特征。

先决条件

  • 已安装 virtctl 工具。

流程

  • 要从用于引导虚拟机的卷中显式推断实例类型,请使用 --infer-instancetype 标志。要显式推断首选项,请使用 --infer-preference 标志。以下命令包括两个标记:

    $ virtctl create vm --volume-import type:pvc,src:my-ns/my-pvc --infer-instancetype --infer-preference
    Copy to Clipboard Toggle word wrap
  • 要从用于启动虚拟机的卷以外的卷推断实例类型或首选项,请使用 --infer-instancetype-from--infer-preference-from 标志来指定任何虚拟机卷。在以下示例中,虚拟机从 volume-a 引导,但从 volume-b 中推断 instancetype 和 preference。

    $ virtctl create vm \
      --volume-import=type:pvc,src:my-ns/my-pvc-a,name:volume-a \
      --volume-import=type:pvc,src:my-ns/my-pvc-b,name:volume-b \
      --infer-instancetype-from volume-b \
      --infer-preference-from volume-b
    Copy to Clipboard Toggle word wrap

8.1.3.3. 设置 inferFromVolume 标签

在 PVC、数据源或数据卷中使用以下标签来指示在尝试从卷引导时使用哪些实例类型、首选或两者。

  • 集群范围的实例类型:instancetype.kubevirt.io/default-instancetype 标签。
  • namespaced 实例类型: instancetype.kubevirt.io/default-instancetype-kind 标签。如果留空,则默认为 VirtualMachineClusterInstancetype 标签。
  • 集群范围的首选项:instancetype.kubevirt.io/default-preference 标签。
  • namespaced preference: instancetype.kubevirt.io/default-preference-kind 标签。如果留空,则默认为 VirtualMachineClusterPreference 标签。

先决条件

  • 集群中必须具有实例类型、首选或两者。
  • 已安装 OpenShift CLI(oc)。

流程

  • 要将标签应用到数据源,请使用 oc label。以下命令应用指向集群范围实例类型的标签:

    $ oc label DataSource foo instancetype.kubevirt.io/default-instancetype=<my_instancetype>
    Copy to Clipboard Toggle word wrap

8.1.4. 使用 Web 控制台从实例类型创建虚拟机

您可以使用 OpenShift Container Platform web 控制台从实例类型创建虚拟机 (VM)。您还可以通过复制现有快照或克隆虚拟机,来使用 Web 控制台创建虚拟机。

您可以从可用可引导卷列表创建虚拟机。您可以在列表中添加基于 Linux 或 Windows 的卷。

流程

  1. 在 Web 控制台中,进入到 Virtualization Catalog

    InstanceTypes 选项卡默认为打开。

    注意

    当在使用虚拟机首选项的 IBM Z® 系统上配置 Downward-metrics 设备时,请将 spec.preference.name 值设置为 rhel.9.s390x 或者另一个可用首选项,格式为 commas 390x

  2. 选择以下选项之一:

    • 从列表中选择合适的可引导卷。如果列表已被截断,请点 Show all 按钮来显示整个列表。

      注意

      可引导的卷表仅列出 openshift-virtualization-os-images 命名空间中具有 instancetype.kubevirt.io/default-preference 标签的卷。

      • 可选:点星号图标将可引导卷指定为热门卷。不足的可引导卷首先出现在卷列表中。
    • Add volume 上传新卷,或使用现有的持久性卷声明(PVC)、卷快照或 containerDisk 卷。点击 Save

      集群中不可用的操作系统的徽标显示在列表的底部。您可以点 Add volume 链接为所需的操作系统添加卷。

      另外,还有 Create a Windows bootable volume quick start 的链接。如果您将鼠标悬停在 Select volume to boot from 行旁边的问号图标上,则同一链接会出现在弹出窗口中。

      安装环境或环境断开连接后,从中引导的卷列表为空。在这种情况下,会显示三个操作系统徽标:Windows、RHEL 和 Linux。您可以点 Add volume 按钮添加新卷来满足您的要求。

  3. 点实例类型标题,然后选择适合您的工作负载的资源大小。
  4. 可选:选择虚拟机详情,包括虚拟机的名称,适用于您要从其引导的卷:

    • 对于基于 Linux 的卷,请按照以下步骤配置 SSH:

      1. 如果您还没有在项目中添加公共 SSH 密钥,点 VirtualMachine details 部分中的 Authorized SSH key 旁边的编辑图标。
      2. 选择以下选项之一:

        • 使用现有 :从 secrets 列表中选择一个 secret。
        • Add new: 遵循以下步骤:

          1. 浏览到公共 SSH 密钥文件,或在 key 字段中粘贴文件。
          2. 输入 secret 名称。
          3. 可选: 选择 Automatically apply this key to any new VirtualMachine you create in this project
      3. 点击 Save
    • 对于 Windows 卷,请按照以下步骤配置 sysprep 选项:

      • 如果您还没有为 Windows 卷添加 sysprep 选项,请按照以下步骤执行:

        1. VirtualMachine 详情 部分中的 Sysprep 的编辑图标。
        2. 添加 Autoattend.xml 回答文件。
        3. 添加 Unattend.xml 回答文件。
        4. 点击 Save
      • 如果要将现有的 sysprep 选项用于 Windows 卷,请按照以下步骤执行:

        1. Attach existing sysprep
        2. 输入现有 sysprep Unattend.xml 回答文件的名称。
        3. 点击 Save
  5. 可选: 如果要创建 Windows 虚拟机,您可以挂载 Windows 驱动程序磁盘:

    1. Customize VirtualMachine 按钮。
    2. VirtualMachine 详情页中,点 Storage
    3. 选择 Mount Windows 驱动程序磁盘复选框。
  6. 可选:点 View YAML & CLI 查看 YAML 文件。点 CLI 查看 CLI 命令。您还可以下载或复制 YAML 文件内容或 CLI 命令。
  7. Create VirtualMachine

创建虚拟机后,您可以在 VirtualMachine 详情页中监控状态。

8.1.5. 更改虚拟机的实例类型

作为集群管理员或虚拟机所有者,您可能需要根据以下原因更改现有虚拟机的实例类型:

  • 如果虚拟机工作负载增加,您可以将实例类型更改为具有更多 CPU、更多内存或特定硬件资源的实例类型,以防止性能瓶颈。
  • 如果您使用特殊的工作负载,您可以切换到不同的实例类型来提高性能,因为有些实例类型为特定用例进行了优化。

您可以使用 OpenShift Container Platform Web 控制台或 OpenShift CLI (oc)更改现有虚拟机的实例类型。

8.1.5.1. 使用 Web 控制台更改虚拟机的实例类型

您可以使用 web 控制台更改与正在运行的虚拟机(VM)关联的实例类型。更改会立即生效。

先决条件

  • 您使用实例类型创建了虚拟机。

流程

  1. 在 OpenShift Container Platform web 控制台中点 Virtualization VirtualMachines
  2. 选择一个虚拟机以打开 VirtualMachine 详情页。
  3. Configuration 选项卡。
  4. Details 标签页中,点实例类型文本打开 Edit Instancetype 对话框。例如,点 1 CPU | 2 GiB Memory
  5. 使用 SeriesSize 列表编辑实例类型。

    1. Series 列表中选择一个项目,以显示该系列的相关大小。例如,选择 General Purpose
    2. Size 列表中选择 VM 的新实例类型。例如,选择 medium: 1 个 CPU, 4Gi Memory,它位于 General Purpose 系列中。
  6. 点击 Save

验证

  1. YAML 标签。
  2. Reload
  3. 查看 VM YAML,以确认实例类型已更改。

8.1.5.2. 使用 CLI 更改虚拟机的实例类型

要更改虚拟机的实例类型,请更改 VM spec 中的 name 字段。这会触发更新逻辑,以确保新资源配置生成一个新的不可变控制器修订快照。

先决条件

  • 已安装 OpenShift CLI(oc)。
  • 您使用实例类型创建虚拟机,或者具有您要修改的虚拟机的管理员特权。

流程

  1. 停止虚拟机。
  2. 运行以下命令,将 &lt ;vm_name > 替换为虚拟机的名称,将 <new_instancetype > 替换为您要更改为的实例类型的名称:

    $ oc patch vm/<vm_name> --type merge -p '{"spec":{"instancetype":{"name": "<new_instancetype>"}}}'
    Copy to Clipboard Toggle word wrap

验证

  • 在更新的虚拟机 status 字段中检查控制器修订引用。运行以下命令并验证输出中是否更新了修订名称:

    $ oc get vms/<vm_name> -o json | jq .status.instancetypeRef
    Copy to Clipboard Toggle word wrap

    输出示例

    {
      "controllerRevisionRef": {
        "name": "vm-cirros-csmall-csmall-3e86e367-9cd7-4426-9507-b14c27a08671-2"
      },
      "kind": "VirtualMachineInstancetype",
      "name": "csmall"
    }
    Copy to Clipboard Toggle word wrap
  • 可选:检查虚拟机实例是否正在运行最新控制器修订中定义的新配置。例如,如果您将实例类型更新为使用 2 个 vCPU 而不是 1,请运行以下命令并检查输出:

    $ oc get vmi/<vm_name> -o json | jq .spec.domain.cpu
    Copy to Clipboard Toggle word wrap

    验证修订版本是否使用 2 个 vCPU 的输出示例

    {
      "cores": 1,
      "model": "host-model",
      "sockets": 2,
      "threads": 1
    }
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat