第 8 章 虚拟机
8.1. 创建虚拟机
使用以下其中一个流程来创建虚拟机:
- 快速入门指南
- 运行向导
- 使用虚拟机向导来粘贴预先配置的 YAML 文件
- 使用 CLI
不要在 openshift-*
命名空间中创建虚拟机 。相反,创建一个新命名空间或使用没有 openshift
前缀的现有命名空间。
从 web 控制台创建虚拟机时,请选择配置了引导源的虚拟机模板。具有引导源的虚拟机模板标记为 Available boot source,或者它们显示自定义标签文本。使用有可用引导源的模板可促进创建虚拟机的过程。
没有引导源的模板被标记为 Boot source required。如果完成了向虚拟机中添加引导源的步骤,您可以使用这些模板。
由于存储行为的区别,一些虚拟机模板与单节点 OpenShift 不兼容。为确保兼容性,请不要为使用数据卷或存储配置集的任何模板或虚拟机设置 evictionStrategy
字段。
8.1.1. 使用快速入门创建虚拟机
web 控制台为创建虚拟机提供指导指导快速入门。您可以通过在 Administrator 视角中选择 Help 菜单来查看 Quick Starts 目录来访问 Quick Starts 目录。当您点快速入门标题并开始使用时,系统会帮助您完成这个过程。
快速入门中的任务以选择红帽模板开始。然后,您可以添加一个引导源并导入操作系统镜像。最后,您可以保存自定义模板,并使用它来创建虚拟机。
先决条件
- 访问您可以下载操作系统镜像的 URL 链接的网站。
流程
- 在 web 控制台中,从 Help 菜单中选择 Quick Starts。
- 点 Quick Starts 目录里的一个标题。例如:Creating a Red Hat Linux Enterprise Linux virtual machine。
-
按照教程中的说明,完成导入操作系统镜像并创建虚拟机的任务。Virtualization
VirtualMachines 页面显示虚拟机。
8.1.2. 运行虚拟机向导来创建虚拟机
web 控制台带有一个向导,指导您完成选择虚拟机模板和创建虚拟机的过程。红帽虚拟机模板会预先配置操作系统镜像、操作系统的默认设置、flavor(CPU 和内存)以及工作负载类型(server)。当模板配置为使用引导源配置时,会使用自定义标签文本或者默认标签文本 Available boot source 进行标记。这些模板可用于创建虚拟机。
您可以从预配置的模板列表中选择模板,查看设置并使用Create virtual machine from template 创建一个虚拟机。如果您选择自定义虚拟机,向导会帮助您完成 General、Networking、Storage、Advanced 和 Review 步骤。向导显示的所有必填字段均标有 *。
创建网络接口控制器 (NIC) 和存储磁盘,并将它们附加到虚拟机。
流程
-
从侧边菜单中点 Workloads
Virtualization。 - 在 Virtual Machines 选项卡或 Templates 选项卡中点 Create 并选择 Virtual Machine with Wizard。
- 选择一个使用引导源配置的模板。
- 点 Next 进入 Review and create 步骤。
- 如果您不想现在就启动虚拟机,清除 Start this virtual machine after creation 选择。
- 点 Create virtual machine 并退出向导或继续向导以自定义虚拟机。
点 Customize virtual machine 进入 General 步骤。
- 可选:编辑 Name 字段,为虚拟机指定自定义名称。
- 可选:在 Description 字段中添加描述信息。
点 Next 进入 Networking 步骤。默认附加
nic0
NIC。- 可选:点 Add Network Interface 来创建额外 NIC。
- Optional:您可以通过点 Options 菜单 并选择 Delete 来删除任何或所有 NIC。虚拟机无需附加 NIC 也可创建。您可以在创建虚拟机后创建 NIC。
点 Next 进入 Storage 步骤。
- 可选:点击 Add Disk 创建额外磁盘。可通过点 Options 菜单 并选择 Delete 来删除这些磁盘。
- 可选:点击 Options 菜单 来编辑磁盘并保存您的更改。
点 Next 进入 Advanced 步骤并选择以下选项之一:
如果您选择了 Linux 模板来创建虚拟机,请查看 Cloud-init 的详情并配置 SSH 访问。
注意使用 cloud-init 或向导中的自定义脚本,静态注入 SSH 密钥。这使您可以安全、远程管理虚拟机以及管理和传输信息。强烈建议您使用这个步骤来保护您的虚拟机。
- 如果您选择了 Windows 模板来创建虚拟机,请使用 SysPrep 部分以 XML 格式上传应答文件,以进行自动 Windows 设置。
- 点 Next 进入 Review 步骤并查看虚拟机的设置。
- 点 Create Virtual Machine。
点 See virtual machine details 查看此虚拟机的 Overview。
虚拟机在 Virtual Machines 标签页中列出。
运行 web 控制台向导时,请参考虚拟机向导字段部分。
8.1.2.1. 虚拟机向导字段
名称 | 参数 | 描述 |
---|---|---|
名称 |
名称可包含小写字母 ( | |
描述 | 可选的描述字段。 | |
操作系统 | 模板中为虚拟机选择的操作系统。从模板创建虚拟机时,您无法编辑此字段。 | |
引导源 | URL(创建 PVC) | 从 HTTP 或 HTTPS 端点提供的镜像导入内容。示例:包含操作系统镜像的网页中的 URL 链接。 |
Clone(创建 PVC) | 选择集群中可用的现有持久性卷声明并克隆它。 | |
Registry(创建 PVC) |
从可通过集群访问的注册表中的可启动操作系统容器置备虚拟机。示例: | |
PXE(网络引导 - 添加网络接口) | 从网络的服务器引导操作系统。需要一个 PXE 可引导网络附加定义。 | |
持久性卷声明项目 | 用于克隆 PVC 的项目名称。 | |
持久性卷声明名称 | 如果您要克隆现有的 PVC,则应用于此虚拟机模板的 PVC 名称。 | |
将它作为光盘引导源挂载 | CD-ROM 需要额外的磁盘来安装操作系统。选择添加磁盘的选择框并稍后进行自定义。 | |
Flavor | tiny、small、Medium、Large、Custom | 根据与该模板关联的操作系统,在虚拟机模板中预设具有预定义值的 CPU 和内存量。
如果选择了默认模板,您可以使用自定义值覆盖模板中的 |
工作负载类型 注意 如果您选择了不正确的 Workload Type,则可能会出现性能或资源利用率问题(如缓慢的 UI)。 | 桌面 |
用于桌面的虚拟机配置。适用于小型工作环境。建议与 Web 控制台搭配使用。使用此模板类或 Server 模板类,设置虚拟机的密度比 |
Server |
在性能和广泛的服务器工作负载兼容性方面具有最佳平衡。使用此模板类或 Desktop 模板类,设置虚拟机的密度比 | |
高性能(需要 CPU Manager) |
针对高性能负载进行了优化的虚拟机配置。使用此模板类,设置 | |
创建后启动此虚拟机。 | 默认选择这个复选框并在创建后启动虚拟机。如果您不希望虚拟机在创建时启动,请清除该复选框。 |
启用 CPU Manager 使用高性能工作负载配置集。
8.1.2.1.1. 网络字段
名称 | 描述 |
---|---|
Name | 网络接口控制器的名称。 |
model | 指明网络接口控制器的型号。支持的值有 e1000e 和 virtio。 |
网络 | 可用网络附加定义的列表。 |
类型 | 可用绑定方法列表。选择适合网络接口的绑定方法:
|
MAC 地址 | 网络接口控制器的 MAC 地址。如果没有指定 MAC 地址,则会自动分配一个。 |
8.1.2.2. 存储字段
名称 | 选择 | 描述 |
---|---|---|
Source | 空白(创建 PVC) | 创建一个空磁盘。 |
通过 URL 导入(创建 PVC) | 通过 URL(HTTP 或 HTTPS 端点)导入内容。 | |
使用现有的 PVC | 使用集群中已可用的 PVC。 | |
克隆现有的 PVC(创建 PVC) | 选择集群中可用的现有 PVC 并克隆它。 | |
通过 Registry 导入(创建 PVC) | 通过容器 registry 导入内容。 | |
容器(临时) | 从集群可以访问的 registry 中的容器上传内容。容器磁盘应只用于只读文件系统,如 CD-ROM 或临时虚拟机。 | |
名称 |
磁盘的名称。名称可包含小写字母 ( | |
Size | GiB 中磁盘的大小。 | |
类型 | 磁盘类型。示例:磁盘或光盘 | |
Interface | 磁盘设备的类型。支持的接口包括 virtIO、SATA 和 SCSI。 | |
Storage class | 用于创建磁盘的存储类。 |
高级存储设置
以下高级存储设置是可选的,对 Blank, Import via URL, and Clone existing PVC 磁盘可用。在 OpenShift Virtualization 4.11 之前,如果您没有指定这些参数,系统将使用 kubevirt-storage-class-defaults
配置映射中的默认值。在 OpenShift Virtualization 4.11 及更高版本中,系统使用存储配置集中的默认值。
使用存储配置集来确保在为 OpenShift Virtualization 置备存储时一致的高级存储设置。
要手动指定 卷模式 和 访问模式,您必须清除 Apply optimized StorageProfile settings 复选框,该复选框被默认选择。
Name | 模式描述 | 参数 | 参数描述 |
---|---|---|---|
卷模式 | 定义持久性卷是否使用格式化的文件系统或原始块状态。默认为 Filesystem。 | Filesystem | 在基于文件系统的卷中保存虚拟磁盘。 |
Block |
直接将虚拟磁盘存储在块卷中。只有底层存储支持时才使用 | ||
访问模式 | 持久性卷访问模式。 | ReadWriteOnce (RWO) | 卷可以被一个节点以读写模式挂载。 |
ReadWriteMany (RWX) | 卷可以被多个节点以读写模式挂载。 注意 对于一些功能(如虚拟机在节点间实时迁移)需要这个权限。 | ||
ReadOnlyMany (ROX) | 卷可以被多个节点以只读形式挂载。 |
8.1.2.3. Cloud-init 字段
名称 | 描述 |
---|---|
Hostname | 为虚拟机设置特定主机名。 |
授权 SSH 密钥 | 复制到虚拟机上 ~/.ssh/authorized_keys 的用户公钥。 |
自定义脚本 | 将其他选项替换为您粘贴自定义 cloud-init 脚本的字段。 |
要配置存储类默认设置,请使用存储配置集。如需更多信息,请参阅自定义存储配置集。
8.1.2.4. 粘贴至预先配置的 YAML 文件中以创建虚拟机
通过写入或粘贴 YAML 配置文件来创建虚拟机。每当您打开 YAML 编辑屏幕,默认会提供一个有效的 example
虚拟机配置。
如果您点击 Create 时 YAML 配置无效,则错误消息会指示出错的参数。一次仅显示一个错误。
编辑时离开 YAML 屏幕会取消您对配置做出的任何更改。
流程
-
在侧边菜单中点 Virtualization
VirtualMachines。 - 点 Create 并选择 With YAML。
在可编辑窗口写入或粘贴您的虚拟机配置。
-
或者,使用 YAML 屏幕中默认提供的
example
虚拟机。
-
或者,使用 YAML 屏幕中默认提供的
- 可选:点 Download 以下载当前状态下的 YAML 配置文件。
- 点击 Create 以创建虚拟机。
虚拟机在 VirtualMachines 页面中列出。
8.1.3. 使用 CLI 创建虚拟机
您可以从 virtualMachine
清单创建虚拟机。
流程
编辑虚拟机的
VirtualMachine
清单。例如,以下清单配置 Red Hat Enterprise Linux(RHEL)虚拟机:例 8.1. RHEL 虚拟机的清单示例
apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: labels: app: <vm_name> 1 name: <vm_name> spec: dataVolumeTemplates: - apiVersion: cdi.kubevirt.io/v1beta1 kind: DataVolume metadata: name: <vm_name> spec: sourceRef: kind: DataSource name: rhel9 namespace: openshift-virtualization-os-images storage: resources: requests: storage: 30Gi running: false template: metadata: labels: kubevirt.io/domain: <vm_name> spec: domain: cpu: cores: 1 sockets: 2 threads: 1 devices: disks: - disk: bus: virtio name: rootdisk - disk: bus: virtio name: cloudinitdisk interfaces: - masquerade: {} name: default rng: {} features: smm: enabled: true firmware: bootloader: efi: {} resources: requests: memory: 8Gi evictionStrategy: LiveMigrate networks: - name: default pod: {} volumes: - dataVolume: name: <vm_name> name: rootdisk - cloudInitNoCloud: userData: |- #cloud-config user: cloud-user password: '<password>' 2 chpasswd: { expire: False } name: cloudinitdisk
使用清单文件创建虚拟机:
$ oc create -f <vm_manifest_file>.yaml
可选:启动虚拟机:
$ virtctl start <vm_name>
8.1.4. 虚拟机存储卷类型
存储卷类型 | 描述 |
---|---|
ephemeral | 将网络卷用作只读后备存储的本地写时复制 (COW) 镜像。后备卷必须为 PersistentVolumeClaim。当虚拟机启动并在本地存储所有写入数据时,便会创建临时镜像。当虚拟机停止、重启或删除时,便会丢弃临时镜像。其底层的卷 (PVC) 不会以任何方式发生变化。 |
persistentVolumeClaim | 将可用 PV 附加到虚拟机。附加 PV 可确保虚拟机数据在会话之间保持。 将现有虚拟机导入到 OpenShift Container Platform 中的建议方法是,使用 CDI 将现有虚拟机磁盘导入到 PVC 中,然后将 PVC 附加到虚拟机实例。在 PVC 中使用磁盘需要满足一些要求。 |
dataVolume |
通过导入、克隆或上传操作来管理虚拟机磁盘的准备过程,以此在
指定 |
cloudInitNoCloud | 附加包含所引用的 cloud-init NoCloud 数据源的磁盘,从而向虚拟机提供用户数据和元数据。虚拟机磁盘内部需要安装 cloud-init。 |
containerDisk | 引用容器镜像 registry 中存储的镜像,如虚拟机磁盘。镜像从 registry 中拉取,并在虚拟机启动时作为磁盘附加到虚拟机。
容器镜像 registry 仅支持 RAW 和 QCOW2 格式的磁盘类型。建议使用 QCOW2 格式以减小镜像的大小。 注意
|
emptyDisk | 创建额外的稀疏 QCOW2 磁盘,与虚拟机接口的生命周期相关联。当虚拟机中的客户端初始化重启后,数据保留下来,但当虚拟机停止或从 web 控制台重启时,数据将被丢弃。空磁盘用于存储应用程序依赖项和数据,否则这些依赖项和数据会超出临时磁盘有限的临时文件系统。 此外还必须提供磁盘容量大小。 |
8.1.5. 关于虚拟机的 RunStrategies
虚拟机的 RunStrategy
会根据一系列条件,决定虚拟机实例(VMI)的行为。spec.runStrategy
设置存在于虚拟机配置过程中,作为 spec.running
设置的替代方案。spec.runStrategy
设置为创建和管理 VMI 提供了更大的灵活性。而 spec.running
设置只能有 true
或 false
响应。但是,这两种设置是相互排斥的。只能同时使用 spec.running
或 spec.runStrategy
之一。如果两者都存在,则会出现错误。
有四个定义的 RunStrategies。
Always
-
在创建虚拟机时,始终会存在 VMI。如果因为任何原因造成原始的 VMI 停止运行,则会创建一个新的 VMI,这与
spec.running: true
的行为相同。 RerunOnFailure
- 如果上一个实例因为错误而失败,则会重新创建一个 VMI。如果虚拟机成功停止(例如虚拟机正常关机),则不会重新创建实例。
Manual
-
start
、stop
和restart
virtctl 客户端命令可以被用来控制 VMI 的状态。 Halted
-
创建虚拟机时没有 VMI,这与
spec.running: false
的行为相同。
start
、stop
和 restart
virtctl 命令的不同组合会影响到使用哪个 RunStrategy
。
下表是虚拟机从不同状态过渡的列表。第一栏显示了 VM 的初始 RunStrategy
。每个额外的栏都显示一个 virtctl 命令以及在运行该命令后的新的 RunStrategy
。
初始 RunStrategy | 开始 | 停止 | 重启 |
---|---|---|---|
Always | - | Halted | Always |
RerunOnFailure | - | Halted | RerunOnFailure |
Manual | Manual | Manual | Manual |
Halted | Always | - | - |
在使用安装程序置备的基础架构安装的 OpenShift Virtualization 集群中,当节点的 MachineHealthCheck 失败且集群不可用时,,带有 Always
或 RerunOnFailure
的 RunStrategy 的虚拟机会被重新调度到一个新的节点上。
apiVersion: kubevirt.io/v1
kind: VirtualMachine
spec:
RunStrategy: Always 1
template:
...
- 1
- VMI 的当前
RunStrategy
设置。
8.1.6. 其他资源
KubeVirt v0.49.0 API Reference 中的
VirtualMachineSpec
定义为虚拟机规格的参数和等级提供更宽松的上下文。注意KubeVirt API Reference 是上游项目参考,可能包含 OpenShift Virtualization 不支持的参数。
-
在将容器磁盘作为
containerDisk
卷添加到虚拟机之前,请参阅准备容器磁盘。 - 有关部署和启用机器健康检查的详情,请参阅部署机器健康检查。
- 有关安装程序置备的基础架构的详情,请参阅安装程序置备的基础架构概述。
- 自定义存储配置集