第 7 章 虚拟机


7.1. 从红帽镜像创建虚拟机

7.1.1. 从红帽镜像创建虚拟机概述

红帽镜像是金级镜像。它们作为容器磁盘在安全 registry 中发布。Containerized Data Importer (CDI) 轮询容器磁盘并将其导入到集群中,并将其存储在 openshift-virtualization-os-images 项目中作为快照或持久性卷声明(PVC)。

红帽镜像会自动更新。您可以为这些镜像禁用和重新启用自动更新。请参阅管理红帽引导源更新

集群管理员现在可以在 OpenShift Virtualization web 控制台中为 Red Hat Enterprise Linux (RHEL)虚拟机启用自动订阅。

您可以使用以下方法之一从红帽提供的操作系统镜像创建虚拟机(VM):

重要

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

7.1.1.1. 关于金级镜像

金级镜像是虚拟机(VM)的预配置快照,您可以用作部署新虚拟机的资源。例如,您可以使用金级镜像来更加一致地置备相同的系统环境,并更快高效地部署系统。

7.1.1.1.1. 金级镜像如何工作?

通过在参考机器或虚拟机上安装和配置操作系统和软件应用程序来创建金级镜像。这包括设置系统、安装所需的驱动程序、应用补丁和更新以及配置特定选项和首选项。

创建金级镜像后,它会保存为模板或镜像文件,可在多个集群中复制和部署。金级镜像可以通过维护人员定期更新,以纳入必要的软件更新和补丁,确保镜像保持最新且安全,并且新创建的虚拟机基于这个更新的镜像。

7.1.1.1.2. 红帽对金级镜像的实施

对于 Red Hat Enterprise Linux (RHEL) 版本,红帽发布金级镜像作为 registry 中的容器磁盘。容器磁盘是虚拟机镜像,它作为容器镜像 registry 存储在容器镜像 registry 中。安装 OpenShift Virtualization 后,任何发布的镜像将自动在连接的集群中提供。镜像在集群中可用后,可以使用它们创建虚拟机。

7.1.1.2. 关于虚拟机引导源

虚拟机 (VM) 由虚拟机定义以及由数据卷支持的一个或多个磁盘组成。VM 模板允许您使用预定义的规格创建虚拟机。

每个模板都需要一个引导源,它是一个完全配置的磁盘镜像,包括配置的驱动程序。每个模板都包含一个虚拟机定义,其中包含指向引导源的指针。每个引导源都有一个预定义的名称和命名空间。对于某些操作系统,会自动提供一个引导源。如果没有提供,管理员必须准备自定义引导源。

提供的引导源会自动更新至操作系统的最新版本。对于自动更新的引导源,持久性卷声明 (PVC) 和卷快照会使用集群的默认存储类创建。如果在配置后选择了不同的默认存储类,您必须删除使用之前默认存储类配置的集群命名空间中的现有引导源。

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

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

7.1.2.1. 关于实例类型

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

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

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

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

这些对象使用相同的 VirtualMachineInstancetypeSpec

7.1.2.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

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

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

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

$ virtctl create instancetype --cpu 2 --memory 256Mi

其中:

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

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

$ virtctl create instancetype --cpu 2 --memory 256Mi | oc apply -f -
7.1.2.1.2. 可选属性

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

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

7.1.2.2. 预定义的实例类型

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

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

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

Universal

U

  • Burstable CPU 性能

1:4

u1.medium
  • 1 个 vCPU
  • 4 Gi 内存

过量使用

O

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

1:4

o1.small
  • 1 vCPU
  • 2Gi 内存

compute-exclusive

CX

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

1:2

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

NVIDIA GPU

GN

  • 对于使用 NVIDIA GPU Operator 提供的 GPU 的虚拟机
  • 具有预定义的 GPU
  • Burstable CPU 性能

1:4

gn1.8xlarge
  • 32 个 vCPU
  • 128Gi 内存

内存密集型

M

  • Hugepages
  • Burstable CPU 性能

1:8

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

Network-intensive

N

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

1:2

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

7.1.2.3. 使用 virtctl 工具创建清单

您可使用 virtctl CLI 实用程序简化为虚拟机、虚拟机实例类型和虚拟机首选项创建清单。如需更多信息,请参阅虚拟机清单创建命令

如果您有 VirtualMachine 清单,可以从命令行创建虚拟机。

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

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

流程

  1. 在 web 控制台中,进入到 Virtualization Catalog,再点 InstanceTypes 选项卡。
  2. 选择以下选项之一:

    • 选择一个可引导卷。

      注意

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

      • 可选:点星号图标将可引导卷指定为热门卷。不足的可引导卷首先出现在卷列表中。
    • Add volume 上传新卷,或使用现有的持久性卷声明 (PVC)、卷快照或数据源。然后点保存
  3. 点实例类型标题,然后选择适合您的工作负载的资源大小。
  4. 如果您还没有在项目中添加公共 SSH 密钥,点 VirtualMachine details 部分中的 Authorized SSH key 旁边的编辑图标。
  5. 选择以下选项之一:

    • 使用现有 :从 secrets 列表中选择一个 secret。
    • 添加新

      1. 浏览到公共 SSH 密钥文件,或在 key 字段中粘贴文件。
      2. 输入 secret 名称。
      3. 可选: 选择 Automatically apply this key to any new VirtualMachine you create in this project
      4. 点击 Save
  6. 可选:点 View YAML & CLI 查看 YAML 文件。点 CLI 查看 CLI 命令。您还可以下载或复制 YAML 文件内容或 CLI 命令。
  7. Create VirtualMachine

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

7.1.3. 从模板创建虚拟机

您可以使用 OpenShift Container Platform web 控制台从红帽模板创建虚拟机 (VM)。

7.1.3.1. 关于虚拟机模板

引导源

您可以使用有可用引导源的模板加快虚拟机创建。如果带有引导源的模板没有自定义标签,则会被标记为 Available boot source

没有引导源的模板被标记为 Boot source required。请参阅从自定义镜像创建虚拟机

自定义

在启动虚拟机前,您可以自定义磁盘源和虚拟机参数:

注意

如果您使用所有标签和注解复制虚拟机模板,则当部署新版本的 Scheduling、Scale 和 Performance (SSP) Operator 时,您的模板版本将被标记为已弃用。您可以删除此设计。请参阅使用 Web 控制台自定义虚拟机模板

单节点 OpenShift
由于存储行为的区别,一些模板与单节点 OpenShift 不兼容。为确保兼容性,请不要为使用数据卷或存储配置集的模板或虚拟机设置 evictionStrategy 字段。

7.1.3.2. 从模板创建虚拟机

您可以使用 OpenShift Container Platform web 控制台从带有可用引导源的模板创建虚拟机 (VM)。

可选: 在启动虚拟机前,您可以自定义模板或虚拟机参数,如数据源、cloud-init 或 SSH 密钥。

流程

  1. 在 web 控制台中进入到 Virtualization Catalog
  2. Boot source available 来使用引导源过滤模板。

    目录显示默认模板。点 All Items 查看您的过滤器的所有可用模板。

  3. 点模板标题查看其详情。
  4. Quick create VirtualMachine 从模板创建虚拟机。

    可选:自定义模板或虚拟机参数:

    1. Customize VirtualMachine
    2. 展开 StorageOptional 参数,以编辑数据源设置。
    3. Customize VirtualMachine 参数

      Customize and create VirtualMachine 窗格显示 Overview, YAML, Scheduling, Environment, Network interfaces, Disks, Scripts, 和 Metadata 标签页。

    4. 编辑在虚拟机引导前必须设置的参数,如 cloud-init 或静态 SSH 密钥。
    5. Create VirtualMachine

      VirtualMachine 详情页面会显示 provisioning 状态。

7.1.3.2.1. 存储卷类型
表 7.2. 存储卷类型
Type描述

ephemeral

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

persistentVolumeClaim

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

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

dataVolume

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

指定 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.3.2.2. 存储字段
字段描述

空白(创建 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

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

Storage class

用于创建磁盘的存储类。

高级存储设置

以下高级存储设置是可选的,对 Blank, Import via URL, and Clone existing PVC 磁盘可用。

如果没有指定这些参数,系统将使用默认存储配置集值。

参数选项参数描述

卷模式

Filesystem

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

Block

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

访问模式

ReadWriteOnce (RWO)

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

ReadWriteMany (RWX)

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

注意

实时迁移需要此模式。

7.1.3.2.3. 使用 Web 控制台自定义虚拟机模板

在启动虚拟机前,您可以通过修改 VM 或模板参数(如数据源、cloud-init 或 SSH 密钥)来自定义现有虚拟机(VM)模板。如果您通过复制模板并包含其所有标签和注解,则部署新版本的 Scheduling、Scale 和 Performance (SSP) Operator 时,自定义模板将标记为已弃用。

您可以从自定义模板中删除已弃用的设计。

流程

  1. 在 web 控制台中进入到 Virtualization Templates
  2. 从虚拟机模板列表中,点标记为已弃用的模板。
  3. Labels 旁边的铅笔图标旁的 Edit
  4. 删除以下两个标签:

    • template.kubevirt.io/type: "base"
    • template.kubevirt.io/version: "version"
  5. 点击 Save
  6. 点现有 Annotations 数旁边的铅笔图标。
  7. 删除以下注解:

    • template.kubevirt.io/deprecated
  8. 点击 Save

7.1.4. 从命令行创建虚拟机

您可以通过编辑或创建 VirtualMachine 清单来从命令行创建虚拟机 (VM)。您可以使用虚拟机清单中的实例类型来简化虚拟机配置。

注意

7.1.4.1. 使用 virtctl 工具创建清单

您可使用 virtctl CLI 实用程序简化为虚拟机、虚拟机实例类型和虚拟机首选项创建清单。如需更多信息,请参阅虚拟机清单创建命令

7.1.4.2. 从 VirtualMachine 清单创建虚拟机

您可以从 VirtualMachine 清单创建虚拟机(VM)。

流程

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

    注意

    这个示例清单没有配置虚拟机身份验证。

    RHEL 虚拟机的清单示例

     apiVersion: kubevirt.io/v1
     kind: VirtualMachine
     metadata:
      name: rhel-9-minimal
     spec:
      dataVolumeTemplates:
        - metadata:
            name: rhel-9-minimal-volume
          spec:
            sourceRef:
              kind: DataSource
              name: rhel9 1
              namespace: openshift-virtualization-os-images 2
            storage: {}
      instancetype:
        name: u1.medium 3
      preference:
        name: rhel.9 4
      running: true
      template:
        spec:
          domain:
            devices: {}
          volumes:
            - dataVolume:
                name: rhel-9-minimal-volume
              name: rootdisk

    1
    rhel9 金级镜像用于安装 RHEL 9 作为客户机操作系统。
    2
    金级镜像存储在 openshift-virtualization-os-images 命名空间中。
    3
    u1.medium 实例类型为虚拟机请求 1 个 vCPU 和 4Gi 内存。这些资源值不能在虚拟机中覆盖。
    4
    rhel.9 首选项指定支持 RHEL 9 客户机操作系统的额外属性。
  2. 使用清单文件创建虚拟机:

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

    $ virtctl start <vm_name> -n <namespace>
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.