Menu Close

第 7 章 虚拟机

7.1. 创建虚拟机

使用以下其中一个流程来创建虚拟机:

警告

不要在 openshift-* 命名空间中创建虚拟机 。相反,创建一个新命名空间或使用没有 openshift 前缀的现有命名空间。

7.1.1. 运行虚拟机向导来创建虚拟机

web 控制台带有一个交互式的向导来帮助您进行 General, Networking, Storage, AdvancedReview 步骤,以简化创建虚拟机的过程。所有必填字段均标有 *。当输入所需信息后,您可以检查并创建虚拟机。

可创建 NIC 和存储磁盘,并在创建后将其附加到虚拟机。

Bootable Disk

如果在 General 步骤中将 URLContainer 选为 Source,则会创建一个 rootdisk 磁盘,并将其作为 Bootable Disk 附加到虚拟机。您可修改 rootdisk,但不可将其移除。

如果虚拟机上未附加任何磁盘,则从 PXE 源置备的虚拟机无需 Bootable Disk。如有一个或多个磁盘附加到虚拟机,您必须将其中一个选为 Bootable Disk

先决条件

  • 在使用向导创建虚拟机时,您的虚拟机存储介质必须支持 Read-Write-Many (RWX) PVC。

流程

  1. 从侧边菜单中点 WorkloadsVirtualization
  2. Virtual Machines 标签页。
  3. 点击 Create Virtual Machine 并选择 New with Wizard
  4. General 步骤中填写所有必填字段。选择一个 Template 来自动填写这些字段。
  5. 点击 Next 进入 Networking 步骤。默认附加 nic0 NIC。

    1. 可选:点 Add Network Interface 来创建额外 NIC。
    2. Optional:您可以通过点 Options 菜单 kebab 并选择 Delete 来删除任何或所有 NIC。虚拟机无需附加 NIC 也可创建。可在创建虚拟机之后创建 NIC。
  6. 点击 Next 进入 Storage 屏幕。

    1. 可选:点击 Add Disk 创建额外磁盘。可通过点 Options 菜单 kebab 并选择 Delete 来删除这些磁盘。
    2. 可选:点击 Options 菜单 kebab 来编辑磁盘并保存您的更改。
  7. Review and CreateResults 屏幕显示虚拟机的 JSON 配置文件。

虚拟机在 Virtual Machines 标签页中列出。

运行 web 控制台向导时,请参考虚拟机向导字段部分。

7.1.1.1. 虚拟机向导字段

名称参数描述

Template

 

从中创建虚拟机的模板。选择一个模板将自动填写其他字段。

Source

PXE

从 PXE 菜单置备虚拟机。集群中需要支持 PXE 的 NIC。

URL

从由 HTTPS3 端点提供的镜像置备虚拟机。

Container

从可通过集群访问的注册表中的可启动操作系统容器置备虚拟机。示例:kubevirt/cirros-registry-disk-demo

Disk

从一个磁盘置备虚拟机。

操作系统

 

这是为虚拟机选择的主要操作系统。

Flavor

small、medium、large、tiny、Custom

预设值,用于决定分配给虚拟机的 CPU 和内存量。显示的 Flavor 的预设置值是根据操作系统决定的。

内存

 

分配给虚拟机的内存大小(以 GiB 为单位)。

CPU

 

分配给虚拟机的 CPU 数量。

Workload Profile

high performance

针对高性能负载进行了优化的虚拟机配置。

Server

针对运行服务器工作负载进行优化的配置集。

Desktop

用于桌面的虚拟机配置。

名称

 

名称可包含小写字母 (a-z)、数字 (0-9) 和连字符 (-),最多 253 个字符。第一个和最后一个字符必须为字母数字。名称不得包含大写字母、空格、句点 (.) 或特殊字符。

描述

 

可选的描述字段。

Start virtual machine on creation

 

选择此项可在创建时自动启动虚拟机。

7.1.1.2. Cloud-init 字段

名称描述

Hostname

为虚拟机设置具体主机名。

Authenticated SSH Keys

复制到虚拟机上 ~/.ssh/authorized_keys 的用户公钥。

自定义脚本

将其他选项替换为您粘贴自定义 cloud-init 脚本的字段。

7.1.1.3. CD-ROM 字段

Source描述

Container

指定容器路径。例如:kubevirt/fedora-registry-disk: latest

URL

指定 URL 路径和大小(以 GiB 为单位)。然后从下拉菜单中选择这个 URL 的存储类。

Attach Disk

选择您要添加的虚拟机磁盘。

7.1.1.4. 网络字段

名称描述

名称

网络接口卡的名称

Model

指定网络接口卡的型号。支持的值包括 e1000e1000ene2k_pcipcnetrtl8139virtIO

网络

可用 NetworkAttachmentDefinition 对象列表。

类型

可用绑定方法列表。对于默认的 Pod 网络,masquerade 是唯一推荐的绑定方法。对于辅助网络,请使用 bridge 绑定方法。非默认网络不支持 masquerade 绑定方法。

MAC 地址

网络接口卡的 MAC 地址。如果未指定 MAC 地址,将为会话生成一个临时地址。

7.1.1.5. 存储字段

名称描述

Source

为虚拟机选择一个空磁盘,或从以下选项中选择:URLContainerAttach Cloned DiskAttach Disk。要选择现有磁盘并将其附加到虚拟机,请从可用 PersistentVolumeClaims (PVC) 列表中选择 Attach Cloned DiskAttach Disk

名称

磁盘的名称。名称可包含小写字母 (a-z)、数字 (0-9)、连字符 (-) 和句点 (.),最多 253 个字符。第一个和最后一个字符必须为字母数字。名称不得包含大写字母、空格或特殊字符。

SIZE (GB)

磁盘大小(以 GB 为单位)。

Interface

磁盘设备的类型。支持的接口包括 virtIOSATASCSI

Storage class

用于创建磁盘的 StorageClass

Advanced → Volume Mode

 

定义持久性卷是否使用格式化的文件系统或原始块状态。默认为 Filesystem

Advanced → Access Mode

 

持久性卷访问模式。支持的访问模式有 Single User(RWO)Shared Access(RWX)Read Only(ROX)

高级存储设置

以下高级存储设置可用于 空白从 URL 导入克隆现有的 PVC 磁盘。所有参数都是可选的。如果没有指定这些参数,系统将使用 kubevirt-storage-class-defaults 配置映射中的默认值。

名称参数描述

卷模式

Filesystem

在基于文件系统的卷中保存虚拟磁盘。

Block

直接将虚拟磁盘存储在块卷中。只有底层存储支持时才使用 Block

访问模式

Single User (RWO)

这个卷可以被一个单一的节点以 read/write 的形式挂载。

Shared Access (RWX)

卷可以被多个节点以读写模式挂载。

注意

对于一些功能(如虚拟机在节点间实时迁移)需要这个权限。

Read Only (ROX)

卷可以被多个节点以只读形式挂载。

如需更多与 kubevirt-storage-class-defaults ConfigMap 相关的信息,请参阅DataVolumes 的存储默认设置

7.1.2. 粘贴预先配置的 YAML 文件以创建虚拟机

通过写入或粘贴 YAML 配置文件来创建虚拟机。每当您打开 YAML 编辑屏幕,默认会提供一个有效的 example 虚拟机配置。

如果您点击 Create 时 YAML 配置无效,则错误消息会指示出错的参数。一次仅显示一个错误。

注意

编辑时离开 YAML 屏幕会取消您对配置做出的任何更改。

流程

  1. 从侧边菜单中点 WorkloadsVirtualization
  2. Virtual Machines 标签页。
  3. Create Virtual Machine 并选择 New from YAML
  4. 在可编辑窗口写入或粘贴您的虚拟机配置。

    1. 或者,使用 YAML 屏幕中默认提供的 example 虚拟机。
  5. 可选:点 Download 以下载当前状态下的 YAML 配置文件。
  6. 点击 Create 以创建虚拟机。

虚拟机在 Virtual Machines 标签页中列出。

7.1.3. 使用 CLI 创建虚拟机

流程

VirtualMachine 配置文件的 spec 对象会引用虚拟机设置,如内核数、内存量、磁盘类型以及要使用的卷。

  1. 通过引用相关 PVC claimName 作为卷,将虚拟机磁盘附加到虚拟机。
  2. 要利用 OpenShift Container Platform 客户端创建虚拟机,请运行此命令:

    $ oc create -f <vm.yaml>
  3. 由于虚拟机创建时处于 Stopped 状态,因此需启动虚拟机来运行虚拟机实例。
注意

ReplicaSet的目的通常是用来保证指定数量的相同 pod 可用。OpenShift Virtualization 当前不支持 ReplicaSet。

表 7.1. 域设置

设置描述

内核

虚拟机中的内核数。必须大于或等于 1。

内存

按节点分配给虚拟机的 RAM 量。指定一个值,以 M(兆字节)或 Gi(千兆字节)为单位。

磁盘

所引用卷的名称。必须与卷的名称匹配。

表 7.2. 卷设置

设置描述

名称

卷的名称,必须是 DNS 标签,且在虚拟机中唯一。

PersistentVolumeClaim

附加到虚拟机的 PVC。PVC 的 claimName 必须与虚拟机处于同一个项目中。

7.1.4. 虚拟机存储卷类型

存储卷类型描述

ephemeral

将网络卷用作只读后备存储的本地写时复制 (COW) 镜像。后备卷必须为 PersistentVolumeClaim。当虚拟机启动并在本地存储所有写入数据时,便会创建临时镜像。当虚拟机停止、重启或删除时,便会丢弃临时镜像。其底层的卷 (PVC) 不会以任何方式发生变化。

persistentVolumeClaim

将可用 PV 附加到虚拟机。附加 PV 可确保虚拟机数据在会话之间保持。

将现有虚拟机导入到 OpenShift Container Platform 中的建议方法是,使用 CDI 将现有虚拟机磁盘导入到 PVC 中,然后将 PVC 附加到虚拟机实例。在 PVC 中使用磁盘需要满足一些要求。

dataVolume

通过导入、克隆或上传操作来管理虚拟机磁盘的准备过程,以此在 persistentVolumeClaim 磁盘类型基础上构建 DataVolume。使用此卷类型的虚拟机可保证在卷就绪前不会启动。

指定 type: dataVolumetype: ""。如果您为 type 指定任何其他值,如 persistentVolumeClaim,则会显示警告信息,虚拟机也不会启动。

cloudInitNoCloud

附加包含所引用的 cloud-init NoCloud 数据源的磁盘,从而向虚拟机提供用户数据和元数据。虚拟机磁盘内部需要安装 cloud-init。

containerDisk

引用容器镜像 registry 中存储的镜像,如虚拟机磁盘。镜像从 registry 中拉取,并在虚拟机启动时作为磁盘附加到虚拟机。

containerDisk 卷不仅限于一个虚拟机,对于要创建大量无需持久性存储的虚拟机克隆来说也非常有用。

容器镜像 registry 仅支持 RAW 和 QCOW2 格式的磁盘类型。建议使用 QCOW2 格式以减小镜像的大小。

注意

containerDisk 卷是临时的。将在虚拟机停止、重启或删除时丢弃。containerDisk 卷对于只读文件系统(如 CD-ROM)或可处理的虚拟机很有用。

emptyDisk

创建额外的稀疏 QCOW2 磁盘,与虚拟机接口的生命周期相关联。当虚拟机中的客户端初始化重启后,数据保留下来,但当虚拟机停止或从 web 控制台重启时,数据将被丢弃。空磁盘用于存储应用程序依赖项和数据,否则这些依赖项和数据会超出临时磁盘有限的临时文件系统。

此外还必须提供磁盘容量大小。

7.1.5. 其他资源

KubeVirt v.0.30.5 API Reference 中的 VirtualMachineSpec 定义为虚拟机规格的参数和等级提供更宽松的上下文。

注意

KubeVirt API Reference 是上游项目参考,可能包含 OpenShift Virtualization 不支持的参数。

  • 在将容器磁盘作为 containerDisk 卷添加到虚拟机之前,需要先准备容器磁盘