第 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. 所需属性 复制链接链接已复制到粘贴板!
配置实例类型时,您必须定义 cpu
和 memory
属性。其他属性是可选的。
从实例类型创建虚拟机时,您无法覆盖实例类型中定义的任何参数。
因为实例类型需要定义的 CPU 和内存属性,所以 OpenShift Virtualization 始终会在从实例类型创建虚拟机时拒绝这些资源的额外请求。
您可以手动创建实例类型清单。例如:
带有必填字段的 YAML 文件示例
您可以使用 virtctl
CLI 实用程序创建实例类型清单。例如:
带有必填字段的 virtctl
命令示例
virtctl create instancetype --cpu 2 --memory 256Mi
$ virtctl create instancetype --cpu 2 --memory 256Mi
其中:
--cpu <value>
- 指定要分配给客户机的 vCPU 数量。必需。
--memory <value>
- 指定要分配给客户机的内存量。必需。
您可以运行以下命令来立即从新清单中创建对象:
virtctl create instancetype --cpu 2 --memory 256Mi | oc apply -f -
$ virtctl create instancetype --cpu 2 --memory 256Mi | oc apply -f -
8.1.1.2. 可选属性 复制链接链接已复制到粘贴板!
除了所需的 cpu
和 memory
属性外,您还可以在 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
。一些会针对特定工作负载进行定制,另一些则与工作负载无关。
这些实例类型资源根据其系列、版本和大小命名。大小值使用 .
分隔符,范围从 nano
到 8xlarge
。
使用案例 | 系列 | 特性 | vCPU 与内存的比率 | 资源示例 |
---|---|---|---|---|
网络 | N |
| 1:2 |
|
过量使用 | O |
| 1:4 |
|
专用于 Compute | CX |
| 1:2 |
|
常规目的 | U |
| 1:4 |
|
需要大量内存 | M |
| 1:8 |
|
8.1.3. 指定实例类型或首选项 复制链接链接已复制到粘贴板!
您可以指定实例类型、首选项或两者来定义一组工作负载大小和运行时特征,以便在多个虚拟机间重复使用。
8.1.3.1. 使用标志来指定实例类型和首选项 复制链接链接已复制到粘贴板!
使用标志指定实例类型和首选项。
先决条件
- 集群中必须具有实例类型、首选或两者。
流程
要在创建虚拟机时指定实例类型,请使用
--instancetype
标志。要指定首选项,请使用--preference
标志。以下示例包括这两个标记:virtctl create vm --instancetype <my_instancetype> --preference <my_preference>
$ virtctl create vm --instancetype <my_instancetype> --preference <my_preference>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 要指定命名空间的实例类型或首选项,请在传递给
--instancetype
或--preference
的标志命令的值中包含kind
。命名空间实例类型或首选项必须位于您要在其中创建虚拟机的同一命名空间中。以下示例包括命名空间实例类型和命名空间首选项的标记:virtctl create vm --instancetype virtualmachineinstancetype/<my_instancetype> --preference virtualmachinepreference/<my_preference>
$ virtctl create vm --instancetype virtualmachineinstancetype/<my_instancetype> --preference virtualmachinepreference/<my_preference>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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
$ virtctl create vm --volume-import type:pvc,src:my-ns/my-pvc --infer-instancetype --infer-preference
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要从用于启动虚拟机的卷以外的卷推断实例类型或首选项,请使用
--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
$ 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 Copied! Toggle word wrap Toggle overflow
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>
$ oc label DataSource foo instancetype.kubevirt.io/default-instancetype=<my_instancetype>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.1.4. 使用 Web 控制台从实例类型创建虚拟机 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform web 控制台从实例类型创建虚拟机 (VM)。您还可以通过复制现有快照或克隆虚拟机,来使用 Web 控制台创建虚拟机。
您可以从可用可引导卷列表创建虚拟机。您可以在列表中添加基于 Linux 或 Windows 的卷。
流程
在 Web 控制台中,进入到 Virtualization
Catalog。 InstanceTypes 选项卡默认为打开。
注意当在使用虚拟机首选项的 IBM Z® 系统上配置 Downward-metrics 设备时,请将
spec.preference.name
值设置为rhel.9.s390x
或者另一个可用首选项,格式为 commas390x
。选择以下选项之一:
从列表中选择合适的可引导卷。如果列表已被截断,请点 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 按钮添加新卷来满足您的要求。
- 点实例类型标题,然后选择适合您的工作负载的资源大小。
可选:选择虚拟机详情,包括虚拟机的名称,适用于您要从其引导的卷:
对于基于 Linux 的卷,请按照以下步骤配置 SSH:
- 如果您还没有在项目中添加公共 SSH 密钥,点 VirtualMachine details 部分中的 Authorized SSH key 旁边的编辑图标。
选择以下选项之一:
- 使用现有 :从 secrets 列表中选择一个 secret。
Add new: 遵循以下步骤:
- 浏览到公共 SSH 密钥文件,或在 key 字段中粘贴文件。
- 输入 secret 名称。
- 可选: 选择 Automatically apply this key to any new VirtualMachine you create in this project。
- 点击 Save。
对于 Windows 卷,请按照以下步骤配置 sysprep 选项:
如果您还没有为 Windows 卷添加 sysprep 选项,请按照以下步骤执行:
- 点 VirtualMachine 详情 部分中的 Sysprep 的编辑图标。
- 添加 Autoattend.xml 回答文件。
- 添加 Unattend.xml 回答文件。
- 点击 Save。
如果要将现有的 sysprep 选项用于 Windows 卷,请按照以下步骤执行:
- 点 Attach existing sysprep。
- 输入现有 sysprep Unattend.xml 回答文件的名称。
- 点击 Save。
可选: 如果要创建 Windows 虚拟机,您可以挂载 Windows 驱动程序磁盘:
- 点 Customize VirtualMachine 按钮。
- 在 VirtualMachine 详情页中,点 Storage。
- 选择 Mount Windows 驱动程序磁盘复选框。
- 可选:点 View YAML & CLI 查看 YAML 文件。点 CLI 查看 CLI 命令。您还可以下载或复制 YAML 文件内容或 CLI 命令。
- 点 Create VirtualMachine。
创建虚拟机后,您可以在 VirtualMachine 详情页中监控状态。
8.1.5. 更改虚拟机的实例类型 复制链接链接已复制到粘贴板!
作为集群管理员或虚拟机所有者,您可能需要根据以下原因更改现有虚拟机的实例类型:
- 如果虚拟机工作负载增加,您可以将实例类型更改为具有更多 CPU、更多内存或特定硬件资源的实例类型,以防止性能瓶颈。
- 如果您使用特殊的工作负载,您可以切换到不同的实例类型来提高性能,因为有些实例类型为特定用例进行了优化。
您可以使用 OpenShift Container Platform Web 控制台或 OpenShift CLI (oc
)更改现有虚拟机的实例类型。
8.1.5.1. 使用 Web 控制台更改虚拟机的实例类型 复制链接链接已复制到粘贴板!
您可以使用 web 控制台更改与正在运行的虚拟机(VM)关联的实例类型。更改会立即生效。
先决条件
- 您使用实例类型创建了虚拟机。
流程
-
在 OpenShift Container Platform web 控制台中点 Virtualization
VirtualMachines。 - 选择一个虚拟机以打开 VirtualMachine 详情页。
- 点 Configuration 选项卡。
- 在 Details 标签页中,点实例类型文本打开 Edit Instancetype 对话框。例如,点 1 CPU | 2 GiB Memory。
使用 Series 和 Size 列表编辑实例类型。
- 从 Series 列表中选择一个项目,以显示该系列的相关大小。例如,选择 General Purpose。
- 从 Size 列表中选择 VM 的新实例类型。例如,选择 medium: 1 个 CPU, 4Gi Memory,它位于 General Purpose 系列中。
- 点击 Save。
验证
- 点 YAML 标签。
- 点 Reload。
- 查看 VM YAML,以确认实例类型已更改。
8.1.5.2. 使用 CLI 更改虚拟机的实例类型 复制链接链接已复制到粘贴板!
要更改虚拟机的实例类型,请更改 VM spec 中的 name
字段。这会触发更新逻辑,以确保新资源配置生成一个新的不可变控制器修订快照。
先决条件
-
已安装 OpenShift CLI(
oc
)。 - 您使用实例类型创建虚拟机,或者具有您要修改的虚拟机的管理员特权。
流程
- 停止虚拟机。
运行以下命令,将 <
;vm_name
> 替换为虚拟机的名称,将<new_instancetype
> 替换为您要更改为的实例类型的名称:oc patch vm/<vm_name> --type merge -p '{"spec":{"instancetype":{"name": "<new_instancetype>"}}}'
$ oc patch vm/<vm_name> --type merge -p '{"spec":{"instancetype":{"name": "<new_instancetype>"}}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在更新的虚拟机
status
字段中检查控制器修订引用。运行以下命令并验证输出中是否更新了修订名称:oc get vms/<vm_name> -o json | jq .status.instancetypeRef
$ oc get vms/<vm_name> -o json | jq .status.instancetypeRef
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:检查虚拟机实例是否正在运行最新控制器修订中定义的新配置。例如,如果您将实例类型更新为使用 2 个 vCPU 而不是 1,请运行以下命令并检查输出:
oc get vmi/<vm_name> -o json | jq .spec.domain.cpu
$ oc get vmi/<vm_name> -o json | jq .spec.domain.cpu
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证修订版本是否使用 2 个 vCPU 的输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow