第 7 章 虚拟机


7.1. 创建虚拟机

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

警告

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

从 web 控制台创建虚拟机时,请选择配置了引导源的虚拟机模板。具有引导源的虚拟机模板标记为 Available boot source,或者它们显示自定义标签文本。使用有可用引导源的模板可促进创建虚拟机的过程。

没有引导源的模板被标记为 Boot source required。如果完成了向虚拟机中添加引导源的步骤,您可以使用这些模板。

7.1.1. 使用快速入门创建虚拟机

web 控制台为创建虚拟机提供指导指导快速入门。您可以通过在 Administrator 视角中选择 Help 菜单来查看 Quick Starts 目录来访问 Quick Starts 目录。当您点快速入门标题并开始使用时,系统会帮助您完成这个过程。

快速入门中的任务以选择红帽模板开始。然后,您可以添加一个引导源并导入操作系统镜像。最后,您可以保存自定义模板,并使用它来创建虚拟机。

先决条件

  • 访问您可以下载操作系统镜像的 URL 链接的网站。

流程

  1. 在 web 控制台中,从 Help 菜单中选择 Quick Starts。
  2. 点 Quick Starts 目录里的一个标题。例如:Creating a Red Hat Linux Enterprise Linux virtual machine。
  3. 按照教程中的说明,完成导入操作系统镜像并创建虚拟机的任务。Virtual Machines 标签显示虚拟机。

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

web 控制台带有一个向导,指导您完成选择虚拟机模板和创建虚拟机的过程。红帽虚拟机模板会预先配置操作系统镜像、操作系统的默认设置、flavor(CPU 和内存)以及工作负载类型(server)。当模板配置为使用引导源配置时,会使用自定义标签文本或者默认标签文本 Available boot source 进行标记。这些模板可用于创建虚拟机。

您可以从预配置的模板列表中选择模板,查看设置并使用Create virtual machine from template 创建一个虚拟机。如果您选择自定义虚拟机,向导会帮助您完成 General、Networking、Storage、Advanced 和 Review 步骤。向导显示的所有必填字段均标有 *。

创建网络接口控制器 (NIC) 和存储磁盘,并将它们附加到虚拟机。

流程

  1. 从侧边菜单中点 Workloads Virtualization。
  2. 在 Virtual Machines 选项卡或 Templates 选项卡中点 Create 并选择 Virtual Machine with Wizard。
  3. 选择一个使用引导源配置的模板。
  4. 点 Next 进入 Review and create 步骤。
  5. 如果您不想现在就启动虚拟机,清除 Start this virtual machine after creation 选择。
  6. 点 Create virtual machine 并退出向导或继续向导以自定义虚拟机。
  7. 点 Customize virtual machine 进入 General 步骤。

    1. 可选:编辑 Name 字段,为虚拟机指定自定义名称。
    2. 可选:在 Description 字段中添加描述信息。
  8. 点 Next 进入 Networking 步骤。默认附加 nic0 NIC。

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

    1. 可选:点击 Add Disk 创建额外磁盘。可通过点 Options 菜单 kebab 并选择 Delete 来删除这些磁盘。
    2. 可选:点击 Options 菜单 kebab 来编辑磁盘并保存您的更改。
  10. 点 Next 进入 Advanced 步骤并查看 Cloud-init 的详情。
  11. 点 Next 进入 Review 步骤并查看虚拟机的设置。
  12. 点 Create Virtual Machine。
  13. 点 See virtual machine details 查看此虚拟机的 Overview。

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

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

7.1.2.1. 虚拟机向导字段

名称参数描述

名称

 

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

描述

 

可选的描述字段。

操作系统

 

模板中为虚拟机选择的主要操作系统。从模板创建虚拟机时,您无法编辑此字段。

引导源

通过 URL 导入(创建 PVC)

从 HTTP 或 HTTPS 端点提供的镜像导入内容。示例:包含操作系统镜像的网页中的 URL 链接。

克隆现有的 PVC(创建 PVC)

选择集群中可用的现有持久性卷声明并克隆它。

通过 Registry 导入(创建 PVC)

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

PXE(网络引导 - 添加网络接口)

从网络的服务器引导操作系统。需要一个 PXE 可引导网络附加定义。

持久性卷声明项目

 

用于克隆 PVC 的项目名称。

持久性卷声明名称

 

如果您要克隆现有的 PVC,则应用于此虚拟机模板的 PVC 名称。

将它作为光盘引导源挂载

 

CD-ROM 需要额外的磁盘来安装操作系统。选择添加磁盘的选择框并稍后进行自定义。

Flavor

tiny、small、Medium、Large、Custom

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

工作负载类型

Desktop

用于桌面的虚拟机配置。适用于小型工作环境。建议与 Web 控制台搭配使用。

Server

在性能和广泛的服务器工作负载兼容性方面具有最佳平衡。

高性能

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

创建后启动此虚拟机。

 

默认选择这个复选框并在创建后启动虚拟机。如果您不希望虚拟机在创建时启动,请清除该复选框。

7.1.2.2. 网络字段

Name描述

Name

网络接口控制器的名称。

Model

指明网络接口控制器的型号。支持的值有 e1000e 和 virtio。

网络

可用网络附加定义的列表。

类型

可用绑定方法列表。对于默认的 pod 网络,masquerade 是唯一推荐的绑定方法。对于辅助网络,请使用 bridge 绑定方法。非默认网络不支持 masquerade 绑定方法。如果您配置了一个 SR-IOV 网络设备并在命名空间中定义那个网络,请选择 SR-IOV。

MAC 地址

网络接口控制器的 MAC 地址。如果没有指定 MAC 地址,则会自动分配一个。

7.1.2.3. 存储字段

名称选择描述

Source

空白(创建 PVC)

创建一个空磁盘。

通过 URL 导入(创建 PVC)

通过 URL(HTTP 或 HTTPS 端点)导入内容。

使用现有的 PVC

使用集群中已可用的 PVC。

克隆现有的 PVC(创建 PVC)

选择集群中可用的现有 PVC 并克隆它。

通过 Registry 导入(创建 PVC)

通过容器 registry 导入内容。

容器(临时)

从集群可以访问的 registry 中的容器上传内容。容器磁盘应只用于只读文件系统,如 CD-ROM 或临时虚拟机。

名称

 

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

Size

 

GiB 中磁盘的大小。

类型

 

磁盘类型。示例:磁盘或光盘

Interface

 

磁盘设备的类型。支持的接口包括 virtIO、SATA 和 SCSI。

Storage class

 

用于创建磁盘的存储类。

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)

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

7.1.2.4. Cloud-init 字段

名称描述

Hostname

为虚拟机设置特定主机名。

授权 SSH 密钥

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

自定义脚本

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

有关 kubevirt-storage-class-defaults 配置映射的更多信息,请参阅数据卷的存储默认设置。

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

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

注意

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

流程

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

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

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

7.1.3. 使用 CLI 创建虚拟机

您可以从 虚拟机 Machine 清单创建虚拟机。

流程

  1. 编辑虚拟机的 VirtualMachine 清单。例如,以下清单配置 Red Hat Enterprise Linux(RHEL)虚拟机:

    例 7.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
    1
    指定虚拟机的名称。
    2
    指定 cloud-user 的密码。
  2. 使用清单文件创建虚拟机:

    $ oc create -f <vm_manifest_file>.yaml
  3. 可选:启动虚拟机:

    $ virtctl start <vm_name>

7.1.4. 虚拟机存储卷类型

存储卷类型描述

ephemeral

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

persistentVolumeClaim

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

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

dataVolume

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

指定 type: dataVolume 或 type: ""。如果您为 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. 关于虚拟机的 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/v1alpha3
kind: VirtualMachine
spec:
  RunStrategy: Always 
1

  template:
...
1
VMI 的当前 RunStrategy 设置。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

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

让开源更具包容性

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

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部