搜索

虚拟化

download PDF
OpenShift Container Platform 4.15

OpenShift Virtualization 安装、使用和发行注记

Red Hat OpenShift Documentation Team

摘要

本文档提供有关如何在 OpenShift Container Platform 中使用 OpenShift Virtualization 的信息。

第 1 章 关于

1.1. 关于 OpenShift virtualization

OpenShift Virtualization 的功能与支持范围。

1.1.1. OpenShift Virtualization 的作用

OpenShift 虚拟化(OpenShift virtualization)是 OpenShift Container Platform 的一个附加组件,可用于运行和管理虚拟机工作负载以及容器工作负载。

OpenShift Virtualization 通过 Kubernetes 自定义资源添加新对象至 OpenShift Container Platform 集群中,以启用虚拟化任务。这些任务包括:

  • 创建和管理 Linux 和 Windows 虚拟机 (VM)
  • 在集群中运行 pod 和虚拟机工作负载
  • 通过各种控制台和 CLI 工具连接至虚拟机
  • 导入和克隆现有虚拟机
  • 管理虚拟机上附加的网络接口控制器和存储磁盘
  • 在节点间实时迁移虚拟机

增强版 web 控制台提供了一个图形化的门户界面 来管理虚拟化资源以及 OpenShift Container Platform 集群容器和基础架构。

OpenShift Virtualization 的设计和测试,可与 Red Hat OpenShift Data Foundation 功能配合工作。

重要

使用 OpenShift Data Foundation 部署 OpenShift Virtualization 时,您必须为 Windows 虚拟机磁盘创建一个专用存储类。详情请参阅为 Windows 虚拟机优化 ODF PersistentVolume

您可以将 OpenShift Virtualization 与 OVN-KubernetesOpenShift SDN认证的 OpenShift CNI 插件 中列出的其他认证网络插件一起使用。

您可以通过安装 Compliance Operator 并运行带有 ocp4-moderateocp4-moderate-node 配置集的扫描来检查您的 OpenShift Virtualization 集群的合规性。Compliance Operator 使用 NIST 认证工具 OpenSCAP 扫描并执行安全策略。

1.1.1.1. OpenShift Virtualization 支持的集群版本

支持在 OpenShift Container Platform 4.15 集群中使用 OpenShift Virtualization 4.15。要使用 OpenShift Virtualization 的最新 z-stream 版本,您必须首先升级到 OpenShift Container Platform 的最新版本。

1.1.2. 关于虚拟机磁盘的卷和访问模式

如果您将存储 API 与已知的存储供应商搭配使用,则会自动选择卷和访问模式。但是,如果您使用没有存储配置集的存储类,您必须配置卷和访问模式。

要获得最佳结果,请使用 ReadWriteMany (RWX)访问模式和 Block 卷模式。这一点非常重要:

  • 实时迁移需要 ReadWriteMany (RWX) 访问模式。
  • 卷模式的性能优于 Filesystem 卷模式。这是因为 Filesystem 卷模式使用更多存储层,包括文件系统层和磁盘镜像文件。虚拟机磁盘存储不需要这些层。

    例如,如果您使用 Red Hat OpenShift Data Foundation,Ceph RBD 卷优先于 CephFS 卷。

重要

您不能使用以下配置实时迁移虚拟机:

  • 具有 ReadWriteOnce (RWO) 访问模式的存储卷
  • 透传功能,比如 GPU

对于这些虚拟机,不要将 evictionStrategy 字段设置为 LiveMigrate

1.1.3. 单节点 Openshift 的不同

您可以在单节点 OpenShift 上安装 OpenShift Virtualization。

但是,您应该注意单节点 OpenShift 不支持以下功能:

  • 高可用性
  • Pod 中断预算
  • 实时迁移
  • 配置了驱除策略的虚拟机或模板

1.1.4. 其他资源

1.2. 安全策略

了解 OpenShift Virtualization 安全和授权。

关键点

  • OpenShift Virtualization 遵循 restricted Kubernetes pod 安全标准配置集,旨在强制实施 Pod 安全性的当前最佳实践。
  • 虚拟机 (VM) 工作负载作为非特权 pod 运行。
  • kubevirt-controller 服务帐户定义 安全性上下文约束 (SCC)。
  • OpenShift Virtualization 组件的 TLS 证书都会被更新并自动轮转。

1.2.1. 关于工作负载安全性

默认情况下,虚拟机 (VM) 工作负载不会在 OpenShift Virtualization 中使用 root 权限运行,且不支持的 OpenShift Virtualization 功能需要 root 权限。

对于每个虚拟机,virt-launcher pod 以 会话模式运行一个 libvirt 实例,用于管理虚拟机进程。在会话模式中,libvirt 守护进程以非 root 用户帐户运行,仅允许同一用户标识符 (UID) 下运行的客户端的连接。因此,虚拟机作为非特权 pod 运行,遵循最小特权的安全原则。

1.2.2. TLS 证书

OpenShift Virtualization 组件的 TLS 证书都会被更新并自动轮转。您不需要手动刷新它们。

自动续订计划

TLS 证书会根据以下调度自动删除并替换:

  • kubeVirt 证书每天都会被更新。
  • 容器化数据导入程序控制器(CDI)证书每 15 天更新一次。
  • MAC 池证书会每年续订。

自动 TLS 证书轮转不会破坏任何操作。例如,以下操作可在没有任何中断的情况下继续工作:

  • 迁移
  • 镜像上传
  • VNC 和控制台连接

1.2.3. 授权

OpenShift Virtualization 使用基于角色的访问控制 (RBAC )为人类用户和服务帐户定义权限。为服务帐户定义的权限控制 OpenShift Virtualization 组件可以执行的操作。

您还可以使用 RBAC 角色管理用户对虚拟化功能的访问。例如,管理员可以创建一个 RBAC 角色,它提供启动虚拟机所需的权限。然后,管理员可以通过将角色绑定到特定用户来限制访问权限。

1.2.3.1. OpenShift Virtualization 的默认集群角色

通过使用集群角色聚合,OpenShift Virtualization 会扩展默认的 OpenShift Container Platform 集群角色,使其包含访问虚拟化对象的权限。

表 1.1. OpenShift Virtualization 集群角色
默认集群角色OpenShift Virtualization 集群角色OpenShift Virtualization 集群角色描述

view

kubevirt.io:view

此用户可以查看集群中的所有 OpenShift Virtualization 资源,但不能创建、删除、修改或访问它们。例如,用户可以看到虚拟机 (VM) 正在运行,但不能将其关闭或访问其控制台。

edit

kubevirt.io:edit

可以修改集群中的所有 OpenShift Virtualization 资源的用户。例如,用户可以创建虚拟机、访问虚拟机控制台和删除虚拟机。

admin

kubevirt.io:admin

具有所有 OpenShift Virtualization 资源的完整权限的用户,包括删除资源集合。用户也可以查看和修改 OpenShift Virtualization 运行时配置,该配置位于 openshift-cnv 命名空间中的 HyperConverged 自定义资源中。

1.2.3.2. OpenShift Virtualization 中存储功能的 RBAC 角色

为 Containerized Data Importer (CDI) 授予以下权限,包括 cdi-operatorcdi-controller 服务帐户。

1.2.3.2.1. 集群范围的 RBAC 角色
表 1.2. cdi.kubevirt.io API 组的聚合集群角色
CDI 集群角色ResourcesVerbs

cdi.kubevirt.io:admin

datavolumes, uploadtokenrequests

* (all)

dataVolumes/source

create

cdi.kubevirt.io:edit

datavolumes, uploadtokenrequests

*

dataVolumes/source

create

cdi.kubevirt.io:view

cdiconfigs, dataimportcrons, datasources, datavolumes, objecttransfers, storageprofiles, volumeimportsources, volumeuploadsources, volumeclonesources

get, list, watch

dataVolumes/source

create

cdi.kubevirt.io:config-reader

cdiconfigs, storageprofiles

get, list, watch

表 1.3. cdi-operator 服务帐户的集群范围角色
API 组ResourcesVerbs

rbac.authorization.k8s.io

clusterrolebindings, clusterroles

get, list, watch, create, update, delete

security.openshift.io

securitycontextconstraints

get, list, watch, update, create

apiextensions.k8s.io

customresourcedefinitions, customresourcedefinitions/status

get, list, watch, create, update, delete

cdi.kubevirt.io

*

*

upload.cdi.kubevirt.io

*

*

admissionregistration.k8s.io

validatingwebhookconfigurations, mutatingwebhookconfigurations

create, list, watch

admissionregistration.k8s.io

validatingwebhookconfigurations

允许列表:cdi-api-dataimportcron-validate, cdi-api-populator-validate, cdi-api-datavolume-validate, cdi-api-validate, objecttransfer-api-validate

get, update, delete

admissionregistration.k8s.io

mutatingwebhookconfigurations

允许列表:cdi-api-datavolume-mutate

get, update, delete

apiregistration.k8s.io

apiservices

get, list, watch, create, update, delete

表 1.4. cdi-controller 服务帐户的集群范围角色
API 组ResourcesVerbs

"" (core)

events

create, patch

"" (core)

persistentvolumeclaims

get, list, watch, create, update, delete, deletecollection, patch

"" (core)

persistentvolumes

get, list, watch, update

"" (core)

persistentvolumeclaims/finalizers, pods/finalizers

update

"" (core)

pods, services

get, list, watch, create, delete

"" (core)

configmaps

get, create

storage.k8s.io

storageclasses, csidrivers

get, list, watch

config.openshift.io

proxies

get, list, watch

cdi.kubevirt.io

*

*

snapshot.storage.k8s.io

volumesnapshots, volumesnapshotclasses, volumesnapshotcontents

get, list, watch, create, delete

snapshot.storage.k8s.io

volumesnapshots

update, deletecollection

apiextensions.k8s.io

customresourcedefinitions

get, list, watch

scheduling.k8s.io

priorityclasses

get, list, watch

image.openshift.io

imagestreams

get, list, watch

"" (core)

secrets

create

kubevirt.io

virtualmachines/finalizers

update

1.2.3.2.2. 命名空间的 RBAC 角色
表 1.5. cdi-operator 服务帐户的命名空间角色
API 组ResourcesVerbs

rbac.authorization.k8s.io

rolebindings, roles

get, list, watch, create, update, delete

"" (core)

serviceaccounts, configmaps, events, secrets, services

get, list, watch, create, update, patch, delete

apps

deployments, deployments/finalizers

get, list, watch, create, update, delete

route.openshift.io

routes, routes/custom-host

get,list,watch,create,update

config.openshift.io

proxies

get, list, watch

monitoring.coreos.com

servicemonitors, prometheusrules

get, list, watch, create, delete, update, patch

coordination.k8s.io

leases

get, create, update

表 1.6. cdi-controller 服务帐户的命名空间角色
API 组ResourcesVerbs

"" (core)

configmaps

get, list, watch, create, update, delete

"" (core)

secrets

get, list, watch

batch

cronjobs

get, list, watch, create, update, delete

batch

jobs

create, delete, list, watch

coordination.k8s.io

leases

get, create, update

networking.k8s.io

ingresses

get, list, watch

route.openshift.io

Routes

get, list, watch

1.2.3.3. kubevirt-controller 服务帐户的额外 SCC 和权限

Pod 的安全上下文约束(SCC)控制权限。这些权限包括 Pod(容器集合)可以执行的操作以及它们可以访问的资源。您可以使用 SCC 定义 Pod 运行必须满足的一组条件,以便其能被系统接受。

virt-controller 是一个集群控制器,可为集群中的虚拟机创建 virt-launcher pod。这些 pod 由 kubevirt-controller 服务帐户授予权限。

kubevirt-controller 服务帐户被授予额外的 SCC 和 Linux 功能,以便能够创建具有适当权限的 virt-launcher Pod。这些扩展权限允许虚拟机使用超出典型 pod 范围的 OpenShift Virtualization 功能。

kubevirt-controller 服务帐户被授予以下 SCC:

  • scc.AllowHostDirVolumePlugin = true
    这允许虚拟机使用 hostpath 卷插件。
  • scc.AllowPrivilegedContainer = false
    可确保 virt-launcher pod 不是作为特权容器运行。
  • scc.AllowedCapabilities = []corev1.Capability{"SYS_NICE", "NET_BIND_SERVICE"}

    • SYS_NICE 允许设置 CPU 关联性。
    • NET_BIND_SERVICE 允许 DHCP 和 Slirp 操作。

查看 kubevirt-controller 的 SCC 和 RBAC 定义

您可以使用 oc 工具查看 kubevirt-controllerSecurityContextConstraints 定义:

$ oc get scc kubevirt-controller -o yaml

您可以使用 oc 工具查看 kubevirt-controller clusterrole 的 RBAC 定义:

$ oc get clusterrole kubevirt-controller -o yaml

1.2.4. 其他资源

1.3. OpenShift Virtualization 架构

Operator Lifecycle Manager (OLM) 为 OpenShift Virtualization 的每个组件部署 Operator pod:

  • Compute: virt-operator
  • Storage: cdi-operator
  • Network: cluster-network-addons-operator
  • Scaling: ssp-operator
  • Templating: tekton-tasks-operator

OLM 还会部署 hyperconverged-cluster-operator pod,它负责其他组件的部署、配置和生命周期,以及几个 helper pod: hco-webhookhyperconverged-cluster-cli-download

成功部署所有 Operator pod 后,您应该创建 HyperConverged 自定义资源 (CR)。HyperConverged CR 中的配置充当 OpenShift Virtualization 的单个来源,并指导 CR 的行为。

HyperConverged CR 为其协调循环中的所有其他组件的 operator 创建对应的 CR。然后,每个 Operator 会为 OpenShift Virtualization control plane 创建资源,如守护进程集、配置映射和其他组件。例如,当 HyperConverged Operator (HCO) 创建 KubeVirt CR 时,OpenShift Virtualization Operator 会协调它并创建其他资源,如 virt-controllervirt-handlervirt-api

OLM 部署 Hostpath Provisioner (HPP) Operator,但在创建 hostpath-provisioner CR 前它无法正常工作。

部署

1.3.1. 关于 HyperConverged Operator (HCO)

HCO、hco-operator 提供了一种单一入口点,用于部署和管理 OpenShift Virtualization 和几个带有建议的默认值的帮助程序运算符。它还会为这些操作器创建自定义资源(CR)。

hco-operator 组件
表 1.7. HyperConverged Operator 组件
组件描述

deployment/hco-webhook

验证 HyperConverged 自定义资源内容。

deployment/hyperconverged-cluster-cli-download

提供 virtctl 工具二进制文件,以便直接从集群下载它们。

KubeVirt/kubevirt-kubevirt-hyperconverged

包含 OpenShift Virtualization 需要的所有 operator、CR 和对象。

SSP/ssp-kubevirt-hyperconverged

调度、扩展和性能 (SSP) CR。这由 HCO 自动创建。

CDI/cdi-kubevirt-hyperconverged

Containerized Data Importer (CDI) CR。这由 HCO 自动创建。

NetworkAddonsConfig/cluster

指示并由 cluster-network-addons-operator 管理的 CR。

1.3.2. 关于 Containerized Data Importer (CDI) Operator

CDI Operator cdi-operator, 管理 CDI 及其相关资源,它使用数据卷将虚拟机(VM)镜像导入到持久性卷声明(PVC)中。

cdi-operator 组件
表 1.8. CDI Operator 组件
组件描述

deployment/cdi-apiserver

通过提供安全上传令牌来管理将虚拟机磁盘上传到 PVC 的授权过程。

deployment/cdi-uploadproxy

将外部磁盘上传流量定向到适当的上传服务器 pod,以便将其写入正确的 PVC。需要有效的上传令牌。

pod/cdi-importer

helper(帮助程序)Pod,在创建数据卷时将虚拟机镜像导入到 PVC 中。

1.3.3. 关于 Cluster Network Addons Operator

Cluster Network Addons Operator cluster-network-addons-operator 在集群中部署网络组件,并管理扩展网络功能的相关资源。

cluster-network-addons-operator 组件
表 1.9. Cluster Network Addons Operator 组件
组件描述

deployment/kubemacpool-cert-manager

管理 Kubemacpool 的 webhook 的 TLS 证书。

deployment/kubemacpool-mac-controller-manager

为虚拟机(VM)网络接口卡(NIC)提供 MAC 地址池服务。

daemonset/bridge-marker

将节点上可用的网络桥接标记为节点资源。

daemonset/kube-cni-linux-bridge-plugin

在集群节点上安装 Container Network Interface (CNI) 插件,通过网络附加定义将虚拟机附加到 Linux 网桥。

1.3.4. 关于 Hostpath Provisioner (HPP) Operator

HPP Operator hostpath-provisioner-operator,部署和管理多节点 HPP 和相关资源。

hpp-operator 组件
表 1.10. HPP Operator 组件
组件描述

deployment/hpp-pool-hpp-csi-pvc-block-<worker_node_name>

为指定 HPP 的每个节点提供一个 worker。pod 在节点上挂载指定的后备存储。

daemonset/hostpath-provisioner-csi

实现 HPP 的容器存储接口(CSI)驱动程序接口。

daemonset/hostpath-provisioner

实现 HPP 的传统驱动程序接口。

1.3.5. 关于 Scheduling、Scale 和 Performance (SSP) Operator

SSP Operator、ssp-operator、部署通用模板、相关的默认引导源、管道任务和模板验证器。

ssp-operator 组件
表 1.11. SSP Operator 组件
组件描述

deployment/create-vm-from-template

从模板创建虚拟机。

deployment/copy-template

复制虚拟机模板。

deployment/modify-vm-template

创建和删除虚拟机模板。

deployment/modify-data-object

创建和删除数据卷或数据源。

deployment/cleanup-vm

在虚拟机上运行脚本或命令,然后在之后停止或删除虚拟机。

deployment/disk-virt-customize

使用 virt-customize 在目标持久性卷声明 (PVC) 上运行自定义脚本。

deployment/disk-virt-sysprep

使用 virt-sysprep 在目标 PVC 上运行一个 sysprep 脚本。

deployment/wait-for-vmi-status

等待特定的虚拟机实例(VMI)状态,然后根据该状态失败或成功。

deployment/create-vm-from-manifest

从清单创建虚拟机。

1.3.6. 关于 OpenShift Virtualization Operator

OpenShift Virtualization Operator、virt-operator 部署、升级和管理 OpenShift Virtualization,而不影响当前虚拟机(VM)工作负载。

virt-operator 组件
表 1.12. virt-operator 组件
组件描述

deployment/virt-api

用作所有与虚拟化相关的流的入口点的 HTTP API 服务器。

deployment/virt-controller

观察创建新虚拟机实例对象并创建对应的 pod。当 pod 调度到某个节点上时,virt-controller 会使用节点名称更新虚拟机。

daemonset/virt-handler

监控对虚拟机的任何更改并指示 virt-launcher 执行所需操作。此组件特定于节点。

pod/virt-launcher

包含由 libvirtqemu 实施的用户创建的虚拟机。

第 2 章 发行注记

2.1. OpenShift Virtualization 发行注记

2.1.1. 使开源包含更多

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。有关更多详情,请参阅我们的首席技术官 Chris Wright 提供的消息

2.1.2. 提供文档反馈

要报告错误或改进文档,请登录到 Red Hat JIRA 帐户 并提交 JIRA 问题

2.1.3. 关于 Red Hat OpenShift Virtualization

使用 Red Hat OpenShift Virtualization,您可以将传统虚拟机 (VM) 带入 OpenShift Container Platform 中,并将它们与容器一同运行。在 OpenShift Virtualization 中,虚拟机是可以使用 OpenShift Container Platform Web 控制台或命令行管理的原生 Kubernetes 对象。

OpenShift Virtualization 由 OpenShift Virtualization 图标表示。

OpenShift Virtualization 可以与 OVN-KubernetesOpenShiftSDN 默认 Container Network Interface(CNI)网络供应商一起使用。

了解更多有关 OpenShift Virtualization 的作用

了解更多有关 OpenShift Virtualization 架构和部署 的信息。

为 OpenShift Virtualization 准备集群

2.1.3.1. OpenShift Virtualization 支持的集群版本

支持在 OpenShift Container Platform 4.15 集群中使用 OpenShift Virtualization 4.15。要使用 OpenShift Virtualization 的最新 z-stream 版本,您必须首先升级到 OpenShift Container Platform 的最新版本。

2.1.3.2. 支持的客户端操作系统

要查看 OpenShift Virtualization 支持的客户机操作系统,请参阅 Red Hat OpenStack Platform、Red Hat Virtualization、OpenShift Virtualization 和带有 KVM 的 Red Hat Enterprise Linux 中的认证的客户机操作系统

2.1.3.3. Microsoft Windows SVVP 认证

OpenShift Virtualization 已在 Microsoft 的 Windows Server Virtualization Validation Program (SVVP) 中认证来运行 Windows Server 的工作负载。

SVVP 认证适用于:

  • Red Hat Enterprise Linux CoreOS worker。在 Microsoft SVVP Catalog 中,它们名为 Red Hat OpenShift Container Platform 4 on RHEL CoreOS 9
  • Intel 和 AMD CPU。

2.1.4. 快速启动

有几个 OpenShift Virtualization 功能提供快速入门导览。要查看导览,请点 OpenShift Container Platform Web 控制台标题的菜单栏中的 Help 图标 ?,然后选择 Quick Starts。您可以通过在 Filter 字段中输入关键字 virtualization 来过滤可用的导览。

2.1.5. 新增和改变的功能

此发行版本添加了与以下组件和概念相关的新功能和增强:

2.1.5.1. 安装和更新

  • 现在,您可以使用 kubevirt_vm_created_total 指标 (Type: Counter) 查询在指定命名空间中创建的虚拟机数量。

2.1.5.2. 基础架构

  • instanceType API 现在使用一个更稳定的 v1beta1 版本。

2.1.5.3. 虚拟化

  • 现在,您可以启用对 虚拟机客户机的串行控制台日志的访问,以便进行故障排除。此功能默认为禁用。集群管理员可以使用 Web 控制台或 CLI 更改虚拟机的默认设置。无论集群范围的默认设置是什么,用户可以在单独的虚拟机上切换客户机日志访问。
  • 空闲页报告被默认启用。

2.1.5.4. 网络

  • 您可以将 二级网络接口热插 到正在运行的虚拟机(VM)。只有在 OpenShift Virtualization 4.14 或更高版本创建的虚拟机才支持热插和热拔。单根 I/O 虚拟化(SR-IOV) 接口不支持热拔。
  • OpenShift Virtualization 现在支持 OVN-Kubernetes 二级网络 的 localnet 拓扑。localnet 拓扑将二级网络连接到物理网络。这可让 east-west 集群流量并访问在集群外运行的服务,但它需要在集群节点上配置底层 Open vSwitch (OVS) 系统。
  • OVN-Kubernetes 二级网络与 多网络策略 API 兼容,它提供 MultiNetworkPolicy 自定义资源定义(CRD)来控制进出虚拟机的流量流。您可以使用 ipBlock 属性来定义特定 CIDR 块的网络策略入口和出口规则。

2.1.5.5. Storage

  • 在克隆数据卷时,如果满足某些先决条件,Containerized Data Importer (CDI) 会选择有效的 Container Storage Interface (CSI) 克隆。主机辅助克隆(效率较低)用作回退。要了解使用主机辅助克隆的原因,您可以在克隆的持久性卷声明 (PVC) 上检查 cdi.kubevirt.io/cloneFallbackReason 注解。

2.1.5.6. Web 控制台

  • 安装并配置自定义实例类型和首选项,以便从卷或持久性卷声明 (PVC) 创建虚拟机 (VM),现在正式发布。
  • 预览功能 选项卡现在可以在 VirtualizationOverviewSettings 下找到。
  • 您可以为普通虚拟机(VM)或由 LUN 支持的虚拟机磁盘配置磁盘共享,以允许多个虚拟机共享相同的底层存储。要共享的任何磁盘都必须处于块模式。

    要允许一个由 LUN 支持的块模式虚拟机磁盘在多个虚拟机间共享,集群管理员必须启用 SCSI persistentReservation 功能门。

    如需更多信息,请参阅为虚拟机配置共享卷

  • 现在,您可以在 VirtualMachine 详情页面的 Configuration 选项卡中搜索虚拟机配置设置。
  • 现在,您可以在 VirtualizationOverviewSettingsClusterGeneral settingsSSH configurations 中配置 SSH over NodePort service
  • 从实例类型创建虚拟机时,您现在可以在 OpenShift Container Platform Web 控制台的卷列表中指定最喜欢的可引导卷。
  • 您可以使用 Web 控制台运行虚拟机延迟检查。在侧边菜单中点 VirtualizationCheckupsNetwork latency。要运行第一次检查,请点 Install permissions,然后点 Run checkup
  • 您可以使用 Web 控制台运行存储验证检查。在侧边菜单中点 VirtualizationCheckupsStorage。要运行第一次检查,请点 Install permissions,然后点 Run checkup
  • 现在,您可以使用 web 控制台将单根 I/O 虚拟化(SR-IOV)接口热插到正在运行的虚拟机(VM)。

2.1.6. 弃用和删除的功能

2.1.6.1. 已弃用的功能

弃用的功能包括在当前发行版本中并被支持。但是,它们将在以后的发行版本中删除,且不建议用于新部署。

  • tekton-tasks-operator 已被弃用,Tekton 任务和示例管道现在由 ssp-operator 部署。
  • copy-template,modify-vm-template, 和 create-vm-from-template 任务已弃用。
  • 对 Windows Server 2012 R2 模板的支持已弃用。

2.1.6.2. 删除的功能

当前版本不支持删除的功能。

  • 所有新部署都删除了对旧的 HPP 自定义资源和关联的存储类的支持。在 OpenShift Virtualization 4.15 中,HPP Operator 使用 Kubernetes Container Storage Interface (CSI) 驱动程序来配置本地存储。只有在以前的 OpenShift Virtualization 版本上安装了旧的 HPP 自定义资源时,才支持它。

2.1.7. 技术预览功能

这个版本中的一些功能当前还处于技术预览状态。它们并不适用于在生产环境中使用。请参阅红帽门户网站中关于对技术预览功能支持范围的信息:

技术预览功能支持范围

  • 集群管理员现在可以在 OpenShift Container Platform Web 控制台的 OverviewSettingsClusterPreview features 下对命名空间启用 CPU 资源限值。

2.1.8. 程序错误修复

  • 在以前的版本中,当使用将 volumeBindingMode 设置为 WaitForFirstConsumer 的存储类启动时,windows-efi-installer 管道会失败。在这个版本中,删除了导致管道失败的 StorageClass 对象中的注解。(CNV-32287)
  • 在以前的版本中,如果您使用 openshift-virtualization-os-images 命名空间中提供的数据源克隆大约 1000 个虚拟机 (VM),而不是所有虚拟机都移至 running 状态。在这个版本中,您可以同时克隆大量虚拟机。(CNV-30083)
  • 在以前的版本中,当使用 install-config.yaml 文件中的 networkType: OVNKubernetes 时,您无法使用 NodePort 服务及其关联的完全限定域名 (FQDN) SSH 连接到虚拟机。在这个版本中,您可以配置 Web 控制台,使其显示 SSH NodePort 服务的有效可访问端点。(CNV-24889)
  • 在这个版本中,在热插虚拟磁盘后,虚拟机实例 (VMI) 的实时迁移不再失败。(CNV-34761)

2.1.9. 已知问题

监控
  • Pod Disruption Budget(PDB)可防止 pod 意外中断。如果 PDB 检测到 pod 中断,则 openshift-monitoring 会每 60 分钟发送 PodDisruptionBudgetAtLimit 警报,以使用 LiveMigrate 驱除策略。(CNV-33834)

网络
节点
  • 卸载 OpenShift Virtualization 不会删除 OpenShift Virtualization 创建的 feature.node.kubevirt.io 节点标签。您必须手动删除标签。(CNV-38543)
Storage
  • 如果您在 AWS 上使用 Portworx 作为存储解决方案并创建虚拟机磁盘镜像,则创建的镜像可能会小于预期,因为文件系统开销被认为是两次。(CNV-32695)

    • 作为临时解决方案,您可以手动扩展持久性卷声明 (PVC),以便在初始置备过程完成后增加可用空间。
  • 在某些情况下,多个虚拟机可以以读写模式挂载相同的 PVC,这可能会导致数据崩溃。(CNV-13500)

    • 作为临时解决方案,请避免在使用多个虚拟机的读写模式中使用单个 PVC。
  • 如果您使用 csi-clone 克隆策略克隆超过 100 个虚拟机,则 Ceph CSI 可能无法清除克隆。手动删除克隆也可能会失败。(CNV-23501)

    • 作为临时解决方案,您可以重启 ceph-mgr 来清除虚拟机克隆。
虚拟化
  • qemu-kvm 中的一个关键错误会导致虚拟机在 磁盘热插拔操作后 挂起并遇到 I/O 错误。此问题还可以影响操作系统磁盘以及不涉及热插操作的其他磁盘。如果操作系统磁盘停止工作,则 root 文件系统将关闭。如需更多信息,请参阅红帽知识库中的虚拟机在热插一些额外磁盘后丢失对磁盘的访问

    重要

    由于软件包版本控制,在将 OpenShift Virtualization 从 4.13.z 或 4.14.z 更新至 4.15.0 后可能会重新应用这个程序错误。

  • 当在 Windows 虚拟机中添加虚拟受信任的平台模块 (vTPM) 设备时,BitLocker Drive Encryption 系统检查通过,即使 vTPM 设备没有持久性。这是因为 vTPM 设备不是持久性存储,并在 virt-launcher pod 生命周期中使用临时存储恢复加密密钥。当虚拟机迁移或关闭并重启时,vTPM 数据会丢失。(CNV-36448)
  • OpenShift Virtualization 将 pod 使用的服务帐户令牌链接到该特定 pod。OpenShift Virtualization 通过创建包含令牌的磁盘镜像来实施服务帐户卷。如果您迁移虚拟机,则服务帐户卷无效。(CNV-33835)

    • 作为临时解决方案,使用用户帐户而不是服务帐户,因为用户帐户令牌没有绑定到特定 pod。
  • 随着 RHSA-2023:3722 公告的发布,在启用了 FIPS 的 Red Hat Enterprise Linux (RHEL) 9 系统上,对 TLS 1.2 连接强制Extended Master Secret (EMS)扩展 (RFC 7627) 。这符合 FIPS-140-3 要求。TLS 1.3 不受影响。

    不支持 EMS 或 TLS 1.3 的旧的 OpenSSL 客户端现在无法连接到运行在 RHEL 9 上的 FIPS 服务器。同样,FIPS 模式下的 RHEL 9 客户端无法连接到只支持没有 EMS 的 TLS 1.2 服务器。在实践中意味着这些客户端无法连接到 RHEL 6、RHEL 7 和非 RHEL 传统操作系统上的服务器。这是因为传统的 OpenSSL 1.0.x 版本不支持 EMS 或 TLS 1.3。如需更多信息,请参阅 使用 Red Hat Enterprise Linux 9.2 强制执行的 TLS 扩展 "Extended Master Secret"

    • 作为临时解决方案,将旧的 OpenSSL 客户端升级到支持 TLS 1.3 的版本,并将 OpenShift Virtualization 配置为使用 TLS 1.3,为 FIPS 模式使用 Modern TLS 安全配置集类型。
Web 控制台
  • 首次部署 OpenShift Container Platform 集群时,使用 Web 控制台从模板或实例类型创建虚拟机,如果您没有 cluster-admin 权限,则会失败。

    • 作为临时解决方案,集群管理员必须首先创建一个配置映射 ,以便其他用户使用模板和实例类型来创建虚拟机。(链接: CNV-38284
  • 当使用 Web 控制台为 OVN-Kubernetes localnet 拓扑创建网络附加定义(NAD)时,出现无效的注解 k8s.v1.cni.cncf.io/resourceName: openshift.io/。此注解可防止启动虚拟机。

    • 作为临时解决方案,删除注解。

第 3 章 开始使用

3.1. OpenShift Virtualization 入门

您可以通过安装和配置基本环境来探索 OpenShift Virtualization 的功能和功能。

注意

集群配置过程需要 cluster-admin 权限。

3.1.1. 规划和安装 OpenShift Virtualization

在 OpenShift Container Platform 集群中计划并安装 OpenShift Virtualization:

规划和安装资源

3.1.2. 创建和管理虚拟机

创建虚拟机:

将虚拟机连接到二级网络:

连接到虚拟机:

管理虚拟机:

3.1.3. 后续步骤

3.2. 使用 virtctl 和 libguestfs CLI 工具

您可使用 virtctl 命令行工具管理 OpenShift Virtualization 资源。

您可以使用 libguestfs 命令行工具访问和修改虚拟机(VM)磁盘镜像。您可以使用 virtctl libguestfs 命令部署 libguestfs

3.2.1. 安装 virtctl

要在 Red Hat Enterprise Linux (RHEL) 9、Linux、Windows 和 MacOS 操作系统上安装 virtctl,您可以下载并安装 virtctl 二进制文件。

要在 RHEL 8 上安装 virtctl,您可以启用 OpenShift Virtualization 仓库,然后安装 kubevirt-virtctl 软件包。

3.2.1.1. 在 RHEL 9、Linux、Windows 或 macOS 上安装 virtctl 二进制文件

您可以从 OpenShift Container Platform web 控制台下载适用于操作系统的 virtctl 二进制文件,然后安装它。

流程

  1. 在 web 控制台中进入到 Virtualization → Overview 页面。
  2. Download virtctl 链接为您的操作系统下载 virtctl 二进制文件。
  3. 安装 virtctl

    • 对于 RHEL 9 和其他 Linux 操作系统:

      1. 解压缩存档文件:

        $ tar -xvf <virtctl-version-distribution.arch>.tar.gz
      2. 运行以下命令使 virtctl 二进制可执行文件:

        $ chmod +x <path/virtctl-file-name>
      3. virtctl 二进制文件移到 PATH 环境变量中的目录中。

        您可以运行以下命令来检查您的路径:

        $ echo $PATH
      4. 设置 KUBECONFIG 环境变量:

        $ export KUBECONFIG=/home/<user>/clusters/current/auth/kubeconfig
    • 对于 Windows:

      1. 解压缩存档文件。
      2. 进入解压的目录中,双击 virtctl 可执行文件来安装客户端。
      3. virtctl 二进制文件移到 PATH 环境变量中的目录中。

        您可以运行以下命令来检查您的路径:

        C:\> path
    • macOS:

      1. 解压缩存档文件。
      2. virtctl 二进制文件移到 PATH 环境变量中的目录中。

        您可以运行以下命令来检查您的路径:

        echo $PATH

3.2.1.2. 在 RHEL 8 上安装 virtctl RPM

您可以通过启用 OpenShift Virtualization 仓库并安装 kubevirt-virtctl 软件包,在 Red Hat Enterprise Linux (RHEL) 8 上安装 virtctl RPM 软件包。

先决条件

  • 集群中的每个主机都必须通过 Red Hat Subscription Manager (RHSM) 注册,并具有有效的 OpenShift Container Platform 订阅。

流程

  1. 使用 subscription-manager CLI 工具启用 OpenShift Virtualization 存储库,以运行以下命令:

    # subscription-manager repos --enable cnv-4.15-for-rhel-8-x86_64-rpms
  2. 运行以下命令安装 kubevirt-virtctl 软件包:

    # yum install kubevirt-virtctl

3.2.2. virtctl 命令

virtctl 客户端是用于管理 OpenShift Virtualization 资源的命令行实用程序。

注意

除非另有指定,否则虚拟机(VM)命令也适用于虚拟机实例(VMI)。

3.2.2.1. virtctl 信息命令

您可使用 virtctl 信息命令查看 virtctl 客户端的信息。

表 3.1. 信息命令
命令描述

virtctl version

查看 virtctl 客户端和服务器版本。

virtctl help

查看 virtctl 命令列表。

virtctl <command> -h|--help

查看特定命令的选项列表。

virtctl 选项

查看任何 virtctl 命令的全局命令选项列表。

3.2.2.2. VM 信息命令

您可使用 virtctl 查看有关虚拟机(VM)和虚拟机实例(VMI)的信息。

表 3.2. VM 信息命令
命令描述

virtctl fslist <vm_name>

查看客户机机器上可用的文件系统。

virtctl guestosinfo <vm_name>

查看客户机机器上操作系统的信息。

virtctl userlist <vm_name>

查看客户机机器上的登录用户。

3.2.2.3. VM 清单创建命令

您可使用 virtctl create 命令为虚拟机、实例类型和首选项创建清单。

表 3.3. VM 清单创建命令
命令描述
virtctl create vm

创建 VirtualMachine (VM) 清单。

virtctl create vm --name <vm_name>

创建虚拟机清单,指定虚拟机的名称。

virtctl create vm --instancetype <instancetype_name>

创建使用现有集群范围实例类型的虚拟机清单。

virtctl create vm --instancetype=virtualmachineinstancetype/<instancetype_name>

创建使用现有命名空间的实例类型的虚拟机清单。

virtctl create instancetype --cpu <cpu_value> --memory <memory_value> --name <instancetype_name>

为集群范围的实例类型创建清单。

virtctl create instancetype --cpu <cpu_value> --memory <memory_value> --name <instancetype_name> --namespace <namespace_value>

为命名空间实例类型创建清单。

virtctl create preference --name <preference_name>

为集群范围的虚拟机首选项创建清单,为首选项指定一个名称。

virtctl create preference --namespace <namespace_value>

为命名空间虚拟机首选项创建清单。

3.2.2.4. VM 管理命令

您可使用 virtctl 虚拟机(VM)管理命令管理和迁移虚拟机(VM)和虚拟机实例(VMI)。

表 3.4. VM 管理命令
命令描述

virtctl start <vm_name>

启动虚拟机。

virtctl start --paused <vm_name>

以暂停状态启动虚拟机。这个选项可让您从 VNC 控制台中断引导过程。

virtctl stop <vm_name>

停止虚拟机。

virtctl stop <vm_name> --grace-period 0 --force

强制停止虚拟机。这个选项可能会导致数据不一致或数据丢失。

virtctl pause vm <vm_name>

暂停虚拟机。机器状态保存在内存中。

virtctl unpause vm <vm_name>

取消暂停虚拟机。

virtctl migrate <vm_name>

迁移虚拟机。

virtctl migrate-cancel <vm_name>

取消虚拟机迁移。

virtctl restart <vm_name>

重启虚拟机。

3.2.2.5. VM 连接命令

您可使用 virtctl connection 命令来公开端口并连接到虚拟机(VM)和虚拟机实例(VMI)。

表 3.5. VM 连接命令
命令描述

virtctl console <vm_name>

连接到虚拟机的串行控制台。

virtctl expose vm <vm_name> --name <service_name> --type <ClusterIP|NodePort|LoadBalancer> --port <port>

创建转发虚拟机的指定端口的服务,并在节点的指定端口上公开服务。

示例:virtctl expose vm rhel9_vm --name rhel9-ssh --type NodePort --port 22

virtctl scp -i <ssh_key> <file_name> <user_name>@<vm_name>

将文件从机器复制到虚拟机。此命令使用 SSH 密钥对的私钥。虚拟机必须配置有公钥。

virtctl scp -i <ssh_key> <user_name@<vm_name>:<file_name> .

将文件从虚拟机复制到您的机器中。此命令使用 SSH 密钥对的私钥。虚拟机必须配置有公钥。

virtctl ssh -i <ssh_key> <user_name>@<vm_name>

与虚拟机打开 SSH 连接。此命令使用 SSH 密钥对的私钥。虚拟机必须配置有公钥。

virtctl vnc <vm_name>

连接到虚拟机的 VNC 控制台。

已安装 virt-viewer

virtctl vnc --proxy-only=true <vm_name>

显示端口号,并使用任何查看器通过 VNC 连接手动连接到 VMI。

virtctl vnc --port=<port-number> <vm_name>

如果该端口可用,则指定端口号用于在指定端口上运行代理。

如果没有指定端口号,代理会在随机端口上运行。

3.2.2.6. VM 导出命令

使用 virtctl vmexport 命令来创建、下载或删除从虚拟机、虚拟机快照或持久性卷声明 (PVC) 导出的卷。某些清单还包含标头 secret,它授予对端点的访问权限,以 OpenShift Virtualization 可以使用的格式导入磁盘镜像。

表 3.6. VM 导出命令
命令描述

virtctl vmexport create <vmexport_name> --vm|snapshot|pvc=<object_name>

创建一个 VirtualMachineExport 自定义资源 (CR) 来从虚拟机、虚拟机快照或 PVC 导出卷。

  • --vm: 导出虚拟机的 PVC。
  • --snapshot :导出 VirtualMachineSnapshot CR 中包含的 PVC。
  • --pvc: 导出 PVC。
  • 可选: --ttl=1h 指定生存时间。默认持续时间为 2 小时。

virtctl vmexport delete <vmexport_name>

手动删除 VirtualMachineExport CR。

virtctl vmexport download <vmexport_name> --output=<output_file> --volume=<volume_name>

下载在 VirtualMachineExport CR 中定义的卷。

  • --output 指定文件格式。示例: disk.img.gz.
  • --volume 指定要下载的卷。如果只有一个卷可用,则此标志是可选的。

可选:

  • --keep-vme 在下载后保留 VirtualMachineExport CR。默认的行为是在下载后删除 VirtualMachineExport CR 的默认行为。
  • --insecure 启用不安全的 HTTP 连接。

virtctl vmexport download <vmexport_name> --<vm|snapshot|pvc>=<object_name> --output=<output_file> --volume=<volume_name>

创建一个 VirtualMachineExport CR,然后下载 CR 中定义的卷。

virtctl vmexport download export --manifest

检索一个现有导出的清单。清单不包括标头 secret。

virtctl vmexport download export --manifest --vm=example

为虚拟机创建虚拟机导出,并检索清单。清单不包括标头 secret。

virtctl vmexport download export --manifest --snap=example

为虚拟机快照示例创建虚拟机导出,并检索清单。清单不包括标头 secret。

virtctl vmexport download export --manifest --include-secret

检索一个现有导出的清单。清单包括标头 secret。

virtctl vmexport download export --manifest --manifest-output-format=json

以 json 格式检索现有导出的清单。清单不包括标头 secret。

virtctl vmexport download export --manifest --include-secret --output=manifest.yaml

检索一个现有导出的清单。清单包括标头 secret,并将其写入指定的文件中。

3.2.2.7. VM 内存转储命令

您可使用 virtctl memory-dump 命令在 PVC 上输出虚拟机 (VM) 内存转储。您可以指定现有的 PVC,或使用 --create-claim 标志来创建新 PVC。

先决条件

  • PVC 卷模式必须是 FileSystem
  • PVC 必须足够大以保存内存转储。

    计算 PVC 大小的公式为 (VMMemorySize + 100Mi)* FileSystemOverhead,其中 100Mi 是内存转储开销。

  • 您必须运行以下命令来在 HyperConverged 自定义资源中启用热插功能:

    $ oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv \
      --type json -p '[{"op": "add", "path": "/spec/featureGates", \
      "value": "HotplugVolumes"}]'

下载内存转储

您必须使用 virtctl vmexport download 命令下载内存转储:

$ virtctl vmexport download <vmexport_name> --vm|pvc=<object_name> \
  --volume=<volume_name> --output=<output_file>
表 3.7. VM 内存转储命令
命令描述

virtctl memory-dump get <vm_name> --claim-name=<pvc_name>

在 PVC 上保存虚拟机的内存转储。内存转储状态显示在 VirtualMachine 资源的 status 部分。

可选:

  • --create-claim 会创建一个具有适当大小的新 PVC。这个标志有以下选项:

    • --storage-class=<storage_class>: 为 PVC 指定存储类。
    • --access-mode=<access_mode>: 指定 ReadWriteOnceReadWriteMany

virtctl memory-dump get <vm_name>

使用相同的 PVC 重新运行 virtctl memory-dump 命令。

这个命令覆盖以前的内存转储。

virtctl memory-dump remove <vm_name>

删除内存转储。

如果要更改目标 PVC,则必须手动删除内存转储。

这个命令会删除虚拟机和 PVC 之间的关联,以便在 VirtualMachine 资源的 status 部分中不会显示内存转储。PVC 不受影响。

3.2.2.8. 热插和热拔命令

您可使用 virtctl 从正在运行的虚拟机(VM)和虚拟机实例(VMI)中添加或删除资源。

表 3.8. 热插和热拔命令
命令描述

virtctl addvolume <vm_name> --volume-name=<datavolume_or_PVC> [--persist] [--serial=<label>]

热插数据卷或持久性卷声明 (PVC)。

可选:

  • --persist 在虚拟机上永久挂载虚拟磁盘。这个标志不适用于 VMI。
  • --serial=<label> 为虚拟机添加一个标签。如果没有指定标签,则默认标签是数据卷或 PVC 名称。

virtctl removevolume <vm_name> --volume-name=<virtual_disk>

热拔虚拟磁盘。

virtctl addinterface <vm_name> --network-attachment-definition-name <net_attach_def_name> --name <interface_name>

热插 Linux 网桥网络接口。

virtctl removeinterface <vm_name> --name <interface_name>

热拔 Linux 网桥网络接口。

3.2.2.9. 镜像上传命令

您可使用 virtctl image-upload 命令将虚拟机镜像上传到数据卷中。

表 3.9. 镜像上传命令
命令描述

virtctl image-upload dv <datavolume_name> --image-path=</path/to/image> --no-create

将虚拟机镜像上传到已存在的数据卷中。

virtctl image-upload dv <datavolume_name> --size=<datavolume_size> --image-path=</path/to/image>

将虚拟机镜像上传到指定请求大小的新数据卷中。

3.2.3. 使用 virtctl 部署 libguestfs

您可以使用 virtctl guestfs 命令部署带有 libguestfs-tools 以及附加到它的持久性卷声明 (PVC) 的交互式容器。

流程

  • 要部署一个带有 libguestfs-tools 的容器,挂载 PVC 并为其附加一个 shell,运行以下命令:

    $ virtctl guestfs -n <namespace> <pvc_name> 1
    1
    PVC 名称是必需的参数。如果没有包括它,则会出现错误消息。

3.2.3.1. libguestfs 和 virtctl guestfs 命令

libguestfs 工具可帮助您访问和修改虚拟机 (VM) 磁盘镜像。您可以使用 libguestfs 工具查看和编辑客户机中的文件、克隆和构建虚拟机,以及格式化和调整磁盘大小。

您还可以使用 virtctl guestfs 命令及其子命令在 PVC 上修改、检查和调试虚拟机磁盘。要查看可能子命令的完整列表,请在命令行中输入 virt- 并按 Tab 键。例如:

命令描述

virt-edit -a /dev/vda /etc/motd

在终端中以交互方式编辑文件。

virt-customize -a /dev/vda --ssh-inject root:string:<public key example>

将 ssh 密钥注入客户系统并创建登录。

virt-df -a /dev/vda -h

查看虚拟机使用了多少磁盘空间。

virt-customize -a /dev/vda --run-command 'rpm -qa > /rpm-list'

通过创建包含完整列表的输出文件,查看虚拟客户机上安装的所有 RPM 的完整列表。

virt-cat -a /dev/vda /rpm-list

在终端中使用 virt-customize -a /dev/vda --run-command 'rpm -qa > /rpm-list' 命令显示创建的所有 RPM 的输出文件列表。

virt-sysprep -a /dev/vda

封装要用作模板的虚拟机磁盘镜像。

默认情况下,virtctl guestfs 会创建一个会话,其中包含管理 VM 磁盘所需的一切内容。但是,如果想要自定义行为,该命令还支持几个标志选项:

标记选项描述

--h--help

guestfs 提供帮助.

带有 <pvc_name> 参数的 -n <namespace> 选项

使用特定命名空间中的 PVC。

如果不使用 -n <namespace> 选项,则使用您的当前项目。要更改项目,请使用 oc project <namespace>

如果没有包括 <pvc_name> 参数,则会出现错误消息。

--image string

列出 libguestfs-tools 容器镜像。

您可以使用 --image 选项,将容器配置为使用自定义镜像。

--kvm

代表 libguestfs-tools 容器使用 kvm

默认情况下,virtctl guestfs 为交互式容器设置 kvm,这可显著加快 libguest-tools 执行,因为它使用了 QEMU。

如果群集没有任何 kvm 支持节点,您必须通过设置 --kvm=false 选项来禁用 kvm

如果没有设置,libguestfs-tools pod 将保持待处理状态,因为它无法调度到任何节点上。

--pull-policy string

显示 libguestfs 镜像的拉取策略。

您还可以通过设置 pull-policy 选项来覆盖镜像的 pull 策略。

这个命令还会检查 PVC 是否被另一个 pod 使用,这时会出现错误消息。但是,libguestfs-tools 进程启动后,设置无法避免使用相同的 PVC 的新 pod。在启动虚拟机访问同一 PVC 前,您必须先验证没有活跃的 virtctl guestfs pod。

注意

virtctl guestfs 命令只接受附加到交互式 pod 的单个 PVC。

3.3. Web 控制台概述

OpenShift Container Platform Web 控制台的 Virtualization 部分包含以下页面来管理和监控 OpenShift Virtualization 环境。

表 3.10. 虚拟化 页面
页面描述

概述页面

管理和监控 OpenShift Virtualization 环境。

目录页面

从模板目录创建虚拟机。

VirtualMachines 页面

创建和管理虚拟机。

模板

创建和管理模板。

Instancetypes 页面

创建和管理虚拟机实例类型。

首选项 页面

创建和管理虚拟机首选项。

可引导卷 页面

为可引导卷创建和管理数据源。

MigrationPolicies 页面

创建和管理工作负载的迁移策略。

Checkups 页面

为虚拟机运行网络延迟和存储检查。

表 3.11. 键
图标描述

icon pencil

编辑图标

icon link

链接图标

virt icon start

启动虚拟机图标

virt icon stop

停止虚拟机图标

virt icon restart

重启虚拟机图标

virt icon pause

暂停虚拟机图标

virt icon unpause

取消暂停虚拟机图标

3.3.1. 概述页面

Overview 页面显示资源、指标、迁移进度和集群级别设置。

例 3.1. 概述页面

元素描述

下载 virtctl icon link

下载 virtctl 命令行工具来管理资源。

概述 标签页

资源、使用、警报和状态.

顶级消费者 选项卡

CPU、内存和存储资源的主要消费者。

Migration 标签页

实时迁移状态。

设置 标签页

Settings 选项卡包含 Cluster 标签页、User 选项卡和 Preview features 选项卡。

SettingsCluster 标签页

OpenShift Virtualization 版本、更新状态、实时迁移、模板项目、负载均衡器服务、客户机管理、资源管理和 SCSI 持久保留设置。

SettingsUser 标签页

公共 SSH 密钥、用户权限和欢迎信息设置。

SettingsPreview features

在 web 控制台中启用选择 预览功能。此选项卡中的功能会频繁变化。

预览功能默认是禁用的,不得在生产环境中启用。

3.3.1.1. 概述标签

Overview 选项卡显示资源、使用情况、警报和状态。

例 3.2. 概述标签页

元素描述

入门资源

  • 快速入门 标题 :了解如何使用逐步说明和任务创建、导入和运行 VirtualMachines。
  • 特性亮点标题:阅读有关主要虚拟化功能的最新信息。
  • 相关的 operator 标题:安装 Operator,如 Kubernetes NMState Operator 或 OpenShift Data Foundation Operator。

内存标题

内存用量,图表显示最后 1 天的趋势。

存储标题

存储使用,图表显示最后 1 天的趋势。

vCPU 使用标题

vCPU 使用量,图表显示最后 1 天的趋势。

VirtualMachines 标题

虚拟机数量,图表显示最后 1 天的趋势。

警报标题

OpenShift Virtualization 警报,按严重性分组。

VirtualMachine 状态标题

虚拟机数量,按状态分组。

每个资源的 VirtualMachines 图表

从模板和实例类型创建的虚拟机数量。

3.3.1.2. 顶级消费者选项卡

Top consumers 选项卡显示 CPU、内存和存储的主要使用者。

例 3.3. 顶级消费者选项卡

元素描述

查看虚拟化仪表板 icon link

指向 Observe → Dashboards,显示 OpenShift Virtualization 的顶部用户。

时间周期列表

选择过滤结果的时间周期。

顶级消费者列表

选择顶级消费者的数量来过滤结果。

CPU chart

CPU 使用率最高的虚拟机。

内存图表

内存用量最高的虚拟机。

内存交换流量图表

内存交换流量最高的虚拟机。

vCPU 等待图表

具有最高 vCPU 等待期的虚拟机。

存储吞吐量图表

具有最高存储吞吐量使用的虚拟机。

存储 IOPS图表

具有最高每秒使用存储输入/输出操作的虚拟机。

3.3.1.3. Migration 标签页

Migrations 选项卡显示虚拟机迁移的状态。

例 3.4. Migration 标签页

元素描述

时间周期列表

选择一个时间段来过滤虚拟机迁移。

VirtualMachineInstanceMigrations 信息

虚拟机迁移列表。

3.3.1.4. 设置标签页

Settings 选项卡显示集群范围的设置。

例 3.5. Settings 标签卡中的标签页

标签页描述

集群标签页

OpenShift Virtualization 版本、更新状态、实时迁移、模板项目、负载均衡器服务、客户机管理、资源管理和 SCSI 持久保留设置。

用户 标签页

公共 SSH 密钥管理、用户权限和欢迎信息设置。

技术预览功能 标签页

在 web 控制台中启用选择 预览功能。这些功能经常改变。

3.3.1.4.1. 集群标签页

Cluster 选项卡显示 OpenShift Virtualization 版本和更新状态。您可以在 Cluster 标签页中配置实时迁移和其他设置。

例 3.6. 集群 标签页

元素描述

已安装的版本

OpenShift Virtualization 版本。

更新状态

OpenShift Virtualization 更新状态。

Channel

OpenShift Virtualization 更新频道。

常规设置部分

展开本节,以配置 实时迁移 设置、SSH 配置设置Template 项目 设置。

常规设置实时迁移 部分

展开本节以配置实时迁移设置。

General SettingsLive MigrationMax. migration per cluster 字段

选择每个集群的最大实时迁移数量。

General SettingsLive MigrationMax. migration per node 字段

选择每个节点的最大实时迁移数量。

General SettingsLive MigrationLive migration network 列表

为实时迁移选择专用的二级网络。

常规设置SSH ConfigurationSSH over LoadBalancer 服务 开关

启用为虚拟机的 SSH 连接创建 LoadBalancer 服务。

您必须配置负载均衡器。

常规设置SSH ConfigurationSSH over NodePort 服务 开关

允许为与虚拟机进行 SSH 连接创建节点端口服务。

常规设置Template 项目 部分

展开此部分,为红帽模板选择项目。默认项目为 openshift

要将红帽模板存储在多个项目中,请 克隆模板,然后选择克隆的模板的项目。

客户机管理

展开这个部分,以配置 Automatic subscription of new RHEL VirtualMachines 设置和 Enable guest system log access 开关。

Guest ManagementAutomatic subscription of new RHEL VirtualMachines

展开这个部分,以便为 Red Hat Enterprise Linux (RHEL) 虚拟机和客户机系统日志访问启用自动订阅。

要启用此功能,您需要集群管理员权限、机构 ID 和激活码。

Guest ManagementAutomatic subscription of new RHEL VirtualMachinesActivation Key 字段

输入激活码。

Guest ManagementAutomatic subscription of new RHEL VirtualMachinesOrganization ID 字段

输入机构 ID。

Guest ManagementAutomatic subscription of new RHEL VirtualMachinesEnable auto updates for RHEL VirtualMachines 开关

启用从 RHEL 存储库自动拉取更新。

要启用此功能,您需要一个激活码和机构 ID。

Guest ManagementEnable guest system log access 开关

启用对虚拟机的客户机系统日志的访问。

资源管理

展开本节,以配置 Auto-compute CPU 限制 设置和 内核同页合并(KSM) 开关。

Resource ManagementAuto-compute CPU limits

对包含标签的项目启用自动计算 CPU 限制。

Resource ManagementKernel Samepage Merging (KSM)

为集群中的所有节点启用 KSM。

SCSI Persistent Reservation

展开这个部分,以配置 Enable persistent reserved 开关。

SCSI Persistent ReservationEnable persistent reservation

为磁盘启用 SCSI 保留。这个选项必须仅用于集群感知应用程序。

3.3.1.4.2. 用户标签页

您查看用户权限并管理公共 SSH 密钥,并在 User 选项卡上查看欢迎信息。

例 3.7. 用户 标签页

元素描述

管理 SSH 密钥 部分

展开本节,将公共 SSH 密钥添加到项目中。

密钥会自动添加到您随后在所选项目中创建的所有虚拟机。

权限 部分

展开本节以查看集群范围的用户权限。

欢迎信息 部分

展开此部分,以显示或隐藏 欢迎信息 对话框。

3.3.1.4.3. 技术预览功能标签页

在 web 控制台中启用选择 预览功能。此选项卡中的功能会频繁变化。

3.3.2. 目录页面

您可以从 Catalog 页面中的模板或实例类型创建虚拟机。

例 3.8. 目录 页面

元素描述

Instancetypes 标签页

显示用于创建虚拟机的可引导卷和实例类型。

模板目录 标签页

显示用于创建虚拟机的模板目录。

3.3.2.1. Instancetypes 标签页

您可以从 InstanceTypes 选项卡上的实例类型创建虚拟机。

元素描述

添加卷 按钮

点击来上传卷或使用现有的持久性卷声明、卷快照或数据源。

volumes 项目 字段

存储可引导卷的项目。默认值为 openshift-virtualization-os-images

Filter 字段

按操作系统或资源过滤引导源。

搜索字段

按名称搜索引导源。

管理列 图标

选择要在表中显示 9 列。

卷表

为您的虚拟机选择一个可引导卷。

Red Hat provided 标签页

选择红帽提供的实例类型。

用户提供的标签页

选择在 InstanceType 页面中创建的实例类型。

VirtualMachine 详情 窗格

显示虚拟机设置。

Name 字段

可选:输入虚拟机名称。

Storage class 字段

选择存储类。

公共 SSH 密钥

点编辑图标添加新或现有公共 SSH 密钥。

动态 SSH 密钥注入开关

启用动态 SSH 密钥注入。

只有 RHEL 支持动态 SSH 密钥注入。

Start this VirtualMachine after creation 复选框

清除此复选框以防止虚拟机自动启动。

创建 VirtualMachine 按钮

创建虚拟机。

View YAML & CLI 按钮

显示 YAML 配置文件和 virtctl create 命令,以从命令行创建虚拟机。

3.3.2.2. 模板目录标签页

您可以在 Template catalog 选项卡中选择一个模板来创建虚拟机。

例 3.9. 模板目录 标签页

元素描述

模板项目列表

选择红帽模板所在的项目。

默认情况下,红帽模板存储在 openshift 项目中。您可以在 Overview 页 → Settings 选项卡 → Cluster 标签页上编辑模板项目。

All items | Default templates | User templates

All items 以显示所有可用的模板、默认模板,以显示默认模板和 用户模板,以显示用户创建的模板。

Boot source available 复选框

选中复选框以显示带有可用引导源的模板。

操作系统 复选框

选中复选框以显示带有所选操作系统的模板。

工作负载 复选框

选中复选框以显示带有所选工作负载的模板。

搜索字段

按关键字搜索模板。

模板标题

点模板标题查看模板详情并创建虚拟机。

3.3.3. VirtualMachines 页面

您可以在 VirtualMachines 页面中创建和管理虚拟机。

例 3.10. VirtualMachines 页面

元素描述

创建 按钮

从模板、卷或 YAML 配置文件创建虚拟机。

Filter 字段

根据状态、模板、操作系统或节点过滤虚拟机。

搜索字段

根据名称、标签或 IP 地址搜索虚拟机。

管理列 图标

选择要在表中显示 9 列。只有在从 Projects 列表中选择 All Projects 时,才会显示 Namespace 列。

虚拟机表

虚拟机列表。

点虚拟机旁边的操作菜单 kebab ,选择 Stop,Restart, Pause ,Clone , Migrate,Copy SSH command,Edit labels,Edit annotations, 或 Delete。如果选择 Stop,则强制停止 在操作菜单中选择 Stop。如果操作系统变得无响应,请使用 Force stop 启动即时关闭。

点虚拟机进入 VirtualMachine 详情页。

3.3.3.1. VirtualMachine 详情页面

您可以在 VirtualMachine 详情页面的 Configuration 选项卡中配置虚拟机。

例 3.11. VirtualMachine 详情

元素描述

操作菜单

Actions 菜单,选择 Stop, Restart, Pause, Clone, Migrate, Copy SSH command, Edit labels, Edit annotations, 或 Delete。如果选择 Stop,则强制停止 在操作菜单中选择 Stop。如果操作系统变得无响应,请使用 Force stop 启动即时关闭。

概述 标签页

资源使用情况、警报、磁盘和设备。

Metrics 标签页

内存、CPU、存储、网络和迁移指标。

YAML 标签页

虚拟机 YAML 配置文件。

配置 标签页

包括 Details, Storage, Network, Scheduling, SSH, Initial run, 和 Metadata 标签页。

ConfigurationDetails 标签页

配置虚拟机的 VirtualMachine 详情

ConfigurationStorage 标签页

配置虚拟机的存储。

ConfigurationNetwork 标签页

配置网络。

ConfigurationScheduling 标签页

将虚拟机的调度配置为在特定节点上运行。

ConfigurationSSH 标签页

配置虚拟机的 SSH 设置。

configurationInitial run 标签页

为虚拟机配置 cloud-init 设置,如果虚拟机是 Windows,则为 Sysprep 设置。

ConfigurationMetadata 标签页

配置虚拟机的标签和注解元数据。

Events 标签页

查看虚拟机事件列表。

控制台 标签页

打开虚拟机的控制台会话。

快照 标签页

创建快照并从快照恢复虚拟机。

诊断 标签页

查看状态条件和卷快照状态。

3.3.3.1.1. 概述标签

Overview 选项卡显示资源使用情况、警报和配置信息。

例 3.12. 概述标签页

元素描述

详情标题

常规虚拟机信息。

使用标题

CPU, Memory, Storage, 和 Network transfer 图。默认情况下,Network transfer 显示所有网络的总和。要查看特定网络的分类,请点 Breakdown by network

硬件设备标题

GPU 和主机设备。

文件系统标题

文件系统信息。

此信息由客户机代理提供。

Services 标题

服务列表。

活跃用户标题

活跃用户列表。

警报标题

OpenShift Virtualization 警报,按严重性分组。

常规 标题

命名空间节点VirtualMachineInstancePodOwner 信息。

快照标题

进行快照 icon link 和快照表。

网络接口标题

网络接口表。

磁盘标题

磁盘表。

3.3.3.1.2. Metrics 标签页

Metrics 选项卡显示内存、CPU、网络、存储和迁移使用图表,以及实时迁移进度。

例 3.13. Metrics 标签页

元素描述

时间范围列表

选择一个时间范围来过滤结果。

虚拟化仪表板 icon link

链接到当前项目的 Workloads 选项卡。

使用率

内存CPU 图表。

存储

存储总读/写存储 IOPS 总读/写图表

Network

Network in,Network out,Network bandwidth, 和 Network interface 图表。从 Network interface 列表中选择 All networks 或一个特定的网络。

Migration(迁移)

MigrationKV data transfer rate 图。

LiveMigration 进度

LiveMigration 完成状态。

3.3.3.1.3. YAML 标签页

您可以通过编辑 YAML 选项卡上的 YAML 文件来配置虚拟机。

例 3.14. YAML 标签页

元素描述

保存按钮

保存对 YAML 文件的更改。

重新加载按钮

丢弃您的更改并重新载入 YAML 文件。

取消 按钮

退出 YAML 选项卡。

下载 按钮

将 YAML 文件下载到您的本地计算机。

3.3.3.1.4. 配置标签页

您可以在 Configuration 选项卡中配置调度、网络接口、磁盘和其他选项。

例 3.15. Configuration 选项卡上的标签页

元素描述

搜索字段

按关键字搜索配置。

详情标签页

虚拟机详情。

存储 标签页

配置虚拟机的存储。

网络 标签页

配置网络。

调度 标签页

将虚拟机的调度配置为在特定节点上运行。

SSH 标签页

配置虚拟机的 SSH 设置。

初始运行 标签页

为虚拟机配置 cloud-init 设置,如果虚拟机是 Windows,则为 Sysprep 设置。

元数据 标签页

配置虚拟机的标签和注解元数据。

3.3.3.1.4.1. 详情标签页

您可以在 Details 标签页中管理虚拟机详情。

例 3.16. 详情标签页

设置描述

描述

点编辑图标,以输入描述。

Workload 配置集

点编辑图标编辑工作负载配置集。

CPU | 内存

点编辑图标编辑 CPU | Memory 请求。重启虚拟机以应用更改。

主机名

虚拟机的主机名。重启虚拟机以应用更改。

无头模式

启用无头模式。重启虚拟机以应用更改。

客户端系统日志访问

启用客户端系统日志访问。

硬件设备

管理 GPU 和主机设备。

引导管理

更改引导模式和顺序,并在暂停模式中启用 Start

3.3.3.1.4.2. 存储选项卡

您可以在 Storage 选项卡中管理虚拟机的磁盘和环境。

例 3.17. 存储 标签页

设置描述

添加磁盘按钮

为虚拟机添加一个磁盘。

Filter 字段

按磁盘类型过滤。

搜索字段

按名称搜索磁盘。

挂载 Windows 驱动程序磁盘 复选框

选择将 virtio-win 容器磁盘挂载为 CD-ROM 以安装 VirtIO 驱动程序。

磁盘表

虚拟机磁盘列表。

点磁盘旁的操作菜单 kebab 选择 EditDetach

添加配置映射、Secret 或服务帐户

点链接,然后从资源列表中选择配置映射、secret 或服务帐户。

3.3.3.1.4.3. 网络标签页

您可以在 Network 标签页中管理网络接口。

例 3.18. 网络接口

设置描述

添加网络接口按钮

将网络接口添加到虚拟机。

Filter 字段

按接口类型过滤。

搜索字段

根据名称或标签搜索网络接口。

网络接口

网络接口列表。

点网络接口 kebab 旁边的操作菜单来选择 EditDelete

3.3.3.1.4.4. 调度标签

您可以将虚拟机配置为在 Scheduling 选项卡上的特定节点上运行。

重启虚拟机以应用更改。

例 3.19. 调度 标签页

设置描述

节点选择器

点编辑图标添加标签来指定合格节点。

容限(Tolerations)

点编辑图标,以添加容限来指定合格节点。

关联性规则

点编辑图标来添加关联性规则。

Descheduler 交换机

启用或禁用 descheduler。descheduler 驱除正在运行的 pod,以便可将 pod 重新调度到更合适的节点上。

如果虚拟机无法实时迁移,则此字段被禁用。

专用资源

点编辑图标,选择 Schedule this workload with dedicated resources (guaranteed policy)

驱除策略

点编辑图标选择 LiveMigrate 作为虚拟机驱除策略。

3.3.3.1.4.5. SSH 标签页

您可以在 SSH 标签页中配置 SSH 详情。

例 3.20. SSH 标签页

设置描述

SSH 访问 部分

展开此部分配置 SSH using virtctlSSH service type

公共 SSH 密钥部分

展开本节,以配置公共 SSH 密钥和动态 SSH 公钥注入。

3.3.3.1.4.6. 初始运行

您可以在 Initial run 选项卡上管理 cloud-init 设置或为 Windows 虚拟机配置 Sysprep。

重启虚拟机以应用更改。

例 3.21. 初始运行标签页

元素描述

Cloud-init

点编辑图标来编辑 cloud-init 设置。

Sysprep

点编辑图标上传 Autounattend.xmlUnattend.xml 回答文件,以自动执行 Windows 虚拟机设置。

3.3.3.1.4.7. 元数据标签页

您可以在 Metadata 选项卡中配置标签和注解。

例 3.22. 元数据标签页

元素描述

标签

点编辑图标管理您的标签。

注解

点编辑图标来管理注解。

3.3.3.1.5. Events 标签页

Events 选项卡显示虚拟机事件列表。

3.3.3.1.6. 控制台标签页

您可以在 Console 选项卡中打开到虚拟机的控制台会话。

例 3.23. 控制台 标签页

元素描述

客户机登录凭证部分

展开 Guest login credentials 以查看使用 cloud-init 创建的凭据。点复制图标将凭证复制到剪贴板。

控制台列表

选择 VNC consoleSerial console

Desktop viewer 选项为 Windows 虚拟机显示。您必须在同一网络的机器上安装 RDP 客户端。

send key 列表

选择要发送到控制台的键组合。

粘贴 按钮

将剪贴板中的字符串粘贴到 VNC 控制台。

Disconnect 按钮

断开控制台连接。

如果您打开新的控制台会话,则必须手动断开控制台连接。否则,第一个控制台会话会在后台继续运行。

3.3.3.1.7. 快照选项卡

您可以创建一个快照,从快照创建虚拟机的副本,恢复快照、编辑标签或注解,并在 Snapshots 选项卡上编辑或删除卷快照。

例 3.24. 快照 标签页

元素描述

创建快照按钮

创建快照。

Filter 字段

根据状态过滤快照。

搜索字段

根据名称或标签搜索快照。

快照

快照列表

点快照名称编辑标签或注解。

点快照旁的操作菜单 kebab 选择 Create VirtualMachine,Restore, 或 Delete

3.3.3.1.8. 诊断标签页

您可以在 Diagnostics 选项卡中查看状态条件和卷快照状态。

例 3.25. 诊断 标签页

元素描述

状态条件

显示为虚拟机报告的条件列表。

Filter 字段

根据类别和条件过滤状态条件。

搜索字段

按原因搜索状态条件。

管理列 图标

选择要在表中显示 9 列。

卷快照状态

卷列表、其快照启用状态和原因。

DataVolume 状态

数据卷及其 PhaseProgress 值列表。

3.3.4. 模板页

您可以在 VirtualMachine Templates 页面中创建、编辑和克隆虚拟机模板。

注意

您不能编辑红帽模板。但是,您可以克隆红帽模板并编辑它以创建自定义模板。

例 3.26. VirtualMachine Templates 页面

元素描述

创建模板按钮

通过编辑 YAML 配置文件创建模板。

Filter 字段

根据类型、引导源、模板供应商或操作系统过滤模板。

搜索字段

根据名称或标签搜索模板。

管理列 图标

选择要在表中显示 9 列。只有在从 Projects 列表中选择 All Projects 时,才会显示 Namespace 列。

虚拟机模板表

虚拟机模板列表。

点模板旁的操作菜单 kebab ,选择 Edit, Clone, Edit boot source, Edit boot source reference, Edit labels, Edit annotations, 或 Delete。您不能编辑红帽提供的模板。您可以克隆红帽模板,然后编辑自定义模板。

3.3.4.1. 模板详情页面

您可以查看模板设置并在 Template 详情页中编辑自定义模板。

例 3.27. 模板详情

元素描述

YAML 开关

设置为 ON,以在 YAML 配置文件中查看您的实时更改。

操作菜单

Actions 菜单,以选择 Edit,Clone,Edit boot source,Edit boot source reference,Edit labels,Edit annotations, 或 Delete

详情标签页

模板设置和配置。

YAML 标签页

YAML 配置文件。

调度 标签页

调度配置。

网络接口 标签页

网络接口管理。

Disk 标签页

磁盘管理。

Script 标签页

cloud-init、SSH 密钥和 Sysprep 管理。

参数 标签页

名称和云用户密码管理。

3.3.4.1.1. 详情标签页

您可以在 Details 标签页中配置自定义模板。

例 3.28. 详情标签页

元素描述

Name

模板名称。

Namespace

模板命名空间。

标签

点编辑图标编辑标签。

注解

点编辑图标编辑注解。

显示名称

点编辑图标编辑显示名称。

描述

点编辑图标,以输入描述。

操作系统

操作系统名称。

CPU|内存

点编辑图标编辑 CPU|Memory 请求。

CPU 数量通过以下公式来计算: socket * threads * core

机器类型

模板机器类型。

引导模式

点编辑图标编辑引导模式。

基本模板

用于创建此模板的基本模板的名称。

创建于

模板创建日期。

所有者

模板所有者。

引导顺序

模板引导顺序。

引导源

引导源可用性。

供应商

模板提供程序。

支持

模板支持级别。

GPU 设备

点编辑图标添加 GPU 设备。

主机设备

点编辑图标添加主机设备。

无头模式

点编辑图标将无头模式设置为 ON,并禁用 VNC 控制台。

3.3.4.1.2. YAML 标签页

您可以通过编辑 YAML 选项卡上的 YAML 文件来配置自定义模板。

例 3.29. YAML 标签页

元素描述

保存按钮

保存对 YAML 文件的更改。

重新加载按钮

丢弃您的更改并重新载入 YAML 文件。

取消 按钮

退出 YAML 选项卡。

下载 按钮

将 YAML 文件下载到您的本地计算机。

3.3.4.1.3. 调度标签

您可以在 Scheduling 选项卡中配置调度。

例 3.30. 调度 标签页

设置描述

节点选择器

点编辑图标添加标签来指定合格节点。

容限(Tolerations)

点编辑图标,以添加容限来指定合格节点。

关联性规则

点编辑图标来添加关联性规则。

Descheduler 交换机

启用或禁用 descheduler。descheduler 驱除正在运行的 pod,以便可将 pod 重新调度到更合适的节点上。

专用资源

点编辑图标,选择 Schedule this workload with dedicated resources (guaranteed policy)

驱除策略

点编辑图标选择 LiveMigrate 作为虚拟机驱除策略。

3.3.4.1.4. 网络接口选项卡

您可以在 Network interfaces 选项卡上管理网络接口。

例 3.31. 网络接口标签页

设置描述

添加网络接口按钮

向模板添加网络接口。

Filter 字段

按接口类型过滤。

搜索字段

根据名称或标签搜索网络接口。

网络接口表

网络接口列表。

点网络接口 kebab 旁边的操作菜单来选择 EditDelete

3.3.4.1.5. Disk 标签页

您可以在 Disks 选项卡上管理磁盘。

例 3.32. Disk 标签页

设置描述

添加磁盘按钮

向模板添加磁盘。

Filter 字段

按磁盘类型过滤。

搜索字段

按名称搜索磁盘。

磁盘表

模板磁盘列表。

点磁盘旁的操作菜单 kebab 选择 EditDetach

3.3.4.1.6. Script 标签页

您可以在 Scripts 选项卡上管理 cloud-init 设置、SSH 密钥和 Sysprep 回答文件。

例 3.33. Script 标签页

元素描述

Cloud-init

点编辑图标来编辑 cloud-init 设置。

公共 SSH 密钥

点编辑图标创建新 secret 或将现有 secret 附加到 Linux 虚拟机。

Sysprep

点编辑图标上传 Autounattend.xmlUnattend.xml 回答文件,以自动执行 Windows 虚拟机设置。

3.3.4.1.7. 参数标签页

您可以在 Parameters 选项卡中编辑所选模板设置。

例 3.34. 参数 标签页

元素描述

NAME

设置从该模板创建的虚拟机的名称参数。

CLOUD_USER_PASSWORD

为从该模板创建的虚拟机设置云用户密码参数。

3.3.5. Instancetypes 页面

您可以在 InstanceTypes 页面中查看和管理虚拟机实例类型。

例 3.35. VirtualMachineClusterInstancetypes 页面

元素描述

创建 按钮

通过编辑 YAML 配置文件创建实例类型。

搜索字段

根据名称或标签搜索实例类型。

管理列 图标

选择要在表中显示 9 列。只有在从 Projects 列表中选择 All Projects 时,才会显示 Namespace 列。

实例类型表

实例列表。

点实例类型旁边的操作菜单 kebab ,选择 CloneDelete

点一个实例类型查看 VirtualMachineClusterInstancetypes 详情页。

3.3.5.1. VirtualMachineClusterInstancetypes 详情页

您可以在 VirtualMachineClusterInstancetypes 详情页中配置实例类型。

例 3.36. VirtualMachineClusterInstancetypes 详情

元素描述

详情标签页

通过编辑表单来配置实例类型。

YAML 标签页

通过编辑 YAML 配置文件来配置实例类型。

操作菜单

选择 Edit labels,Edit annotations,Edit VirtualMachineClusterInstancetype, 或 Delete VirtualMachineClusterInstancetype

3.3.5.1.1. 详情标签页

您可以通过编辑 Details 选项卡中的表单来配置实例类型。

例 3.37. 详情标签页

元素描述

Name

VirtualMachineClusterInstancetype 名称。

标签

点编辑图标编辑标签。

注解

点编辑图标编辑注解。

创建于

实例类型创建日期。

所有者

实例类型所有者。

3.3.5.1.2. YAML 标签页

您可以通过编辑 YAML 选项卡上的 YAML 文件来配置实例类型。

例 3.38. YAML 标签页

元素描述

保存按钮

保存对 YAML 文件的更改。

重新加载按钮

丢弃您的更改并重新载入 YAML 文件。

取消 按钮

退出 YAML 选项卡。

下载 按钮

将 YAML 文件下载到您的本地计算机。

3.3.6. 首选项页面

您可以在 Preferences 页面中查看和管理虚拟机首选项。

例 3.39. VirtualMachineClusterPreferences 页面

元素描述

创建 按钮

通过编辑 YAML 配置文件创建首选项。

搜索字段

根据名称或标签搜索首选项。

管理列 图标

选择要在表中显示 9 列。只有在从 Projects 列表中选择 All Projects 时,才会显示 Namespace 列。

首选项表

首选项列表。

点首选选择 CloneDelete 旁边的操作菜单 kebab

点首选项查看 VirtualMachineClusterPreference 详情页。

3.3.6.1. VirtualMachineClusterPreference 详情页

您可以在 VirtualMachineClusterPreference 详情页中配置首选项。

例 3.40. VirtualMachineClusterPreference 详情

元素描述

详情标签页

通过编辑表单来配置首选项。

YAML 标签页

通过编辑 YAML 配置文件来配置首选项。

操作菜单

选择 Edit labels,Edit annotations,Edit VirtualMachineClusterPreference, 或 Delete VirtualMachineClusterPreference

3.3.6.1.1. 详情标签页

您可以通过编辑 Details 标签页中的表单来配置首选项。

例 3.41. 详情标签页

元素描述

Name

VirtualMachineClusterPreference 名称。

标签

点编辑图标编辑标签。

注解

点编辑图标编辑注解。

创建于

首选创建日期。

所有者

首选所有者。

3.3.6.1.2. YAML 标签页

您可以通过编辑 YAML 选项卡上的 YAML 文件来配置首选项类型。

例 3.42. YAML 标签页

元素描述

保存按钮

保存对 YAML 文件的更改。

重新加载按钮

丢弃您的更改并重新载入 YAML 文件。

取消 按钮

退出 YAML 选项卡。

下载 按钮

将 YAML 文件下载到您的本地计算机。

3.3.7. 可引导卷页面

您可以在 Bootable volumes 页面中查看和管理可用的可引导卷。

例 3.43. 可引导卷

元素描述

添加卷 按钮

通过填写表单或编辑 YAML 配置文件来添加可引导卷。

Filter 字段

根据操作系统和资源类型过滤可引导卷。

搜索字段

根据名称或标签搜索可引导卷。

管理列 图标

选择要在表中显示 9 列。只有在从 Projects 列表中选择 All Projects 时,才会显示 Namespace 列。

可引导卷表

可引导卷列表。

点可引导卷旁的操作菜单 kebab 选择 Edit,Remove from list, 或 Delete

点可引导卷查看 DataSource 详情页面。

3.3.7.1. 数据源详情页面

您可以在 DataSource 详情页面中配置可引导卷的持久性卷声明 (PVC)。

例 3.44. 数据源详情页面

元素描述

详情标签页

通过编辑表单来配置 PVC。

YAML 标签页

通过编辑 YAML 配置文件来配置 PVC。

3.3.7.1.1. 详情标签页

您可以通过编辑 Details 选项卡中的表单来配置可引导卷的持久性卷声明(PVC)。

例 3.45. 详情标签页

元素描述

Name

数据源名称。

Namespace

数据源命名空间。

标签

点编辑图标编辑标签。

注解

点编辑图标编辑注解。

创建于

数据源创建日期。

所有者

数据源所有者。

DataImportCron

数据源的 DataImportCron 对象。

默认实例类型

此数据源的默认实例类型。

Preference

运行给定工作负载所需的首选 VirtualMachine 属性值。

conditions

显示数据源的类型、状态、最后更新、原因和消息。

3.3.7.1.2. YAML 标签页

您可以通过编辑 YAML 选项卡上的 YAML 文件来配置可引导卷的持久性卷声明。

例 3.46. YAML 标签页

元素描述

保存按钮

保存对 YAML 文件的更改。

重新加载按钮

丢弃您的更改并重新载入 YAML 文件。

取消 按钮

退出 YAML 选项卡。

下载 按钮

将 YAML 文件下载到您的本地计算机。

3.3.8. MigrationPolicies 页面

您可以在 MigrationPolicies 页面中管理工作负载的迁移策略。

例 3.47. MigrationPolicies 页面

元素描述

创建 MigrationPolicy

通过以表单或编辑 YAML 文件输入配置和标签来创建迁移策略。

搜索字段

根据名称或标签搜索迁移策略。

管理列 图标

选择要在表中显示 9 列。只有在从 Projects 列表中选择 All Projects 时,才会显示 Namespace 列。

MigrationPolicies

迁移策略列表。

点迁移策略旁的操作菜单 kebab 选择 EditDelete

点迁移策略查看 MigrationPolicy 详情页。

3.3.8.1. MigrationPolicy 详情页面

您可以在 MigrationPolicy 详情页中配置迁移策略。

例 3.48. MigrationPolicy 详情

元素描述

详情标签页

通过编辑表单来配置迁移策略。

YAML 标签页

通过编辑 YAML 配置文件来配置迁移策略。

操作菜单

选择 EditDelete

3.3.8.1.1. 详情标签页

您可以在 Details 标签页中配置自定义模板。

例 3.49. 详情标签页

元素描述

Name

迁移策略名称。

描述

迁移策略描述。

配置

点编辑图标更新迁移策略配置。

每个迁移的带宽

每个迁移的带宽请求。对于无限带宽,请将值设为 0

自动聚合

启用自动聚合时,可能会降低虚拟机的性能和可用性,以确保迁移成功。

Post-copy

后复制策略。

完成超时

完成超时值(以秒为单位)。

项目标签

Edit 以编辑项目标签。

VirtualMachine 标签

Edit 以编辑虚拟机标签。

3.3.8.1.2. YAML 标签页

您可以通过编辑 YAML 选项卡上的 YAML 文件来配置迁移策略。

例 3.50. YAML 标签页

元素描述

保存按钮

保存对 YAML 文件的更改。

重新加载按钮

丢弃您的更改并重新载入 YAML 文件。

取消 按钮

退出 YAML 选项卡。

下载 按钮

将 YAML 文件下载到您的本地计算机。

3.3.9. Checkups 页面

您在 Checkups 页面中为虚拟机运行网络延迟和存储检查。

例 3.51. Checkups 页面

元素描述

网络延迟标签页

运行网络延迟检查。

存储 标签页

运行存储检查。

第 4 章 安装

4.1. 为 OpenShift Virtualization 准备集群

在安装 OpenShift Virtualization 前,参阅这个部分以确保集群满足要求。

重要
安装方法注意事项
您可以使用任何安装方法(包括用户置备的、安装程序置备或辅助安装程序)来部署 OpenShift Container Platform。但是,安装方法和集群拓扑可能会影响 OpenShift Virtualization 功能,如快照或实时迁移
Red Hat OpenShift Data Foundation
如果使用 Red Hat OpenShift Data Foundation 部署 OpenShift Virtualization,您必须为 Windows 虚拟机磁盘创建一个专用存储类。详情请参阅为 Windows 虚拟机优化 ODF PersistentVolume
IPv6
您无法在单堆栈 IPv6 集群上运行 OpenShift Virtualization。

FIPS 模式

如果使用 FIPS 模式安装集群,则 OpenShift Virtualization 不需要额外的设置。

4.1.1. 支持的平台

您可以在 OpenShift Virtualization 中使用以下平台:

不支持由其他云供应商提供的裸机实例或服务器。

4.1.1.1. AWS 裸机上的 OpenShift Virtualization

您可以在 Amazon Web Services (AWS) 裸机 OpenShift Container Platform 集群上运行 OpenShift Virtualization。

注意

OpenShift Virtualization 也支持 Red Hat OpenShift Service on AWS (ROSA) Classic 集群,其配置要求与 AWS 裸机集群相同。

在设置集群前,请查看以下支持的功能和限制概述:

安装
  • 您可以使用安装程序置备的基础架构安装集群,通过编辑 install-config.yaml 文件来确保为 worker 节点指定裸机实例类型。例如,您可以对基于 x86_64 架构的机器使用 c5n.metal 类型值。

    如需更多信息,请参阅在 AWS 上安装 OpenShift Container Platform 文档。

访问虚拟机 (VM)
  • 使用 virtctl CLI 工具或 OpenShift Container Platform Web 控制台没有更改您如何访问虚拟机。
  • 您可以使用 NodePortLoadBalancer 服务公开虚拟机。

    • 负载均衡器方法是首选的,因为 OpenShift Container Platform 会在 AWS 中自动创建负载均衡器并管理其生命周期。另外,还会为负载均衡器创建一个安全组,您可以使用注解来附加现有的安全组。删除服务时,OpenShift Container Platform 会移除负载均衡器及其关联的资源。
网络
  • 您不能使用单根 I/O 虚拟化 (SR-IOV) 或桥接 Container Network Interface (CNI) 网络,包括虚拟 LAN (VLAN)。如果您的应用程序需要扁平第 2 层网络或对 IP 池进行控制,请考虑使用 OVN-Kubernetes 二级覆盖网络。
Storage
  • 您可以使用存储厂商认证的任何存储解决方案与底层平台一起使用。

    重要

    AWS 裸机和 ROSA 集群可能有不同的存储解决方案。确保您确认支持您的存储供应商。

  • 由于性能和功能限制,不推荐将 Amazon Elastic File System (EFS) 和 Amazon Elastic Block Store (EBS) 与 OpenShift Virtualization 一起使用。应使用共享存储。
托管 control plane (HCP)
  • 目前 AWS 基础架构不支持 OpenShift Virtualization 的 HCP。

4.1.2. 硬件和操作系统要求

查看 OpenShift Virtualization 的以下硬件和操作系统要求。

4.1.2.1. CPU 要求

  • 由 Red Hat Enterprise Linux (RHEL) 9 支持。

    参阅用于支持的 CPU 红帽生态系统目录

    注意

    如果您的 worker 节点有不同的 CPU,则可能会出现实时迁移失败,因为不同的 CPU 具有不同的功能。您可以通过确保 worker 节点具有适当容量的 CPU,并为虚拟机配置节点关联性规则来缓解这个问题。

    详情请参阅配置所需的节点关联性规则

  • 支持 AMD 和 Intel 64 位架构 (x86-64-v2)。
  • 支持 Intel 64 或 AMD64 CPU 扩展。
  • 启用 Intel VT 或 AMD-V 硬件虚拟化扩展。
  • 启用 NX (无执行)标记。

4.1.2.2. 操作系统要求

  • 在 worker 节点上安装的 Red Hat Enterprise Linux CoreOS (RHCOS)。

    详情请参阅 RHCOS

    注意

    不支持 RHEL worker 节点。

4.1.2.3. 存储要求

  • OpenShift Container Platform 支持。请参 优化存储
  • 您必须创建一个默认的 OpenShift Virtualization 或 OpenShift Container Platform 存储类。这样做的目的是解决虚拟机工作负载的唯一存储需求,并提供优化的性能、可靠性和用户体验。如果 OpenShift Virtualization 和 OpenShift Container Platform 默认存储类都存在,则 OpenShift Virtualization 类在创建虚拟机磁盘时具有优先权。
注意

要将存储类标记为虚拟化工作负载的默认值,请将注解 storageclass.kubevirt.io/is-default-virt-class 设置为 "true"

  • 如果存储置备程序支持快照,您必须将 VolumeSnapshotClass 对象与默认存储类关联。
4.1.2.3.1. 关于虚拟机磁盘的卷和访问模式

如果您将存储 API 与已知的存储供应商搭配使用,则会自动选择卷和访问模式。但是,如果您使用没有存储配置集的存储类,您必须配置卷和访问模式。

要获得最佳结果,请使用 ReadWriteMany (RWX)访问模式和 Block 卷模式。这一点非常重要:

  • 实时迁移需要 ReadWriteMany (RWX) 访问模式。
  • 卷模式的性能优于 Filesystem 卷模式。这是因为 Filesystem 卷模式使用更多存储层,包括文件系统层和磁盘镜像文件。虚拟机磁盘存储不需要这些层。

    例如,如果您使用 Red Hat OpenShift Data Foundation,Ceph RBD 卷优先于 CephFS 卷。

重要

您不能使用以下配置实时迁移虚拟机:

  • 具有 ReadWriteOnce (RWO) 访问模式的存储卷
  • 透传功能,比如 GPU

对于这些虚拟机,不要将 evictionStrategy 字段设置为 LiveMigrate

4.1.3. 实时迁移要求

  • 使用 ReadWriteMany (RWX)访问模式的共享存储.
  • 足够的 RAM 和网络带宽。

    注意

    您必须确保集群中有足够的内存请求容量来支持节点排空会导致实时迁移。您可以使用以下计算来确定大约所需的备用内存:

    Product of (Maximum number of nodes that can drain in parallel) and (Highest total VM memory request allocations across nodes)

    默认的在集群中可以并行运行的迁移数量为 5。

  • 如果虚拟机使用主机型号 CPU,则节点必须支持虚拟机的主机型号 CPU。
  • 强烈建议使用专用的 Multus 网络进行实时迁移。专用网络可最小化迁移期间对租户工作负载网络饱和的影响。

4.1.4. 物理资源开销要求

OpenShift Virtualization 是 OpenShift Container Platform 的一个附加组件,它会带来额外的开销。除了 OpenShift Container Platform 要求外,每个集群机器都必须满足以下开销要求。覆盖集群中的物理资源可能会影响性能。

重要

本文档中给出的数字基于红帽的测试方法和设置。这些数字会根据您自己的设置和环境而有所不同。

内存开销

使用以下因素计算 OpenShift Virtualization 的内存开销值。

集群内存开销

Memory overhead per infrastructure node ≈ 150 MiB

Memory overhead per worker node ≈ 360 MiB

另外,OpenShift Virtualization 环境资源需要总计 2179 MiB 的内存,分布到所有基础架构节点。

虚拟机内存开销

Memory overhead per virtual machine ≈ (1.002 × requested memory) \
              + 218 MiB \ 1
              + 8 MiB × (number of vCPUs) \ 2
              + 16 MiB × (number of graphics devices) \ 3
              + (additional memory overhead) 4

1
virt-launcher pod 中运行的进程需要。
2
虚拟机请求的虚拟 CPU 数量。
3
虚拟机请求的虚拟图形卡数。
4
额外的内存开销:
  • 如果您的环境包含单一根 I/O 虚拟化(SR-IOV)网络设备或图形处理单元(GPU),请为每个设备分配 1 GiB 额外的内存开销。
  • 如果启用了安全加密虚拟化 (SEV),请添加 256 MiB。
  • 如果启用了受信任的平台模块 (TPM),请添加 53 MiB。
CPU 开销

使用以下内容计算 OpenShift Virtualization 的集群处理器开销要求。每个虚拟机的 CPU 开销取决于您的单独设置。

集群 CPU 开销

CPU overhead for infrastructure nodes ≈ 4 cores

OpenShift Virtualization 增加集群级别服务的整体使用,如日志记录、路由和监控。要考虑这个工作负载,请确保托管基础架构组件的节点分配了用于不同节点的 4 个额外内核(4000 毫秒)的容量。

CPU overhead for worker nodes ≈ 2 cores + CPU overhead per virtual machine

除了虚拟机工作负载所需的 CPU 外,每个托管虚拟机的 worker 节点都必须有 2 个额外内核(2000 毫秒)用于 OpenShift Virtualization 管理工作负载。

虚拟机 CPU 开销

如果请求专用 CPU,则会对集群 CPU 开销要求有 1:1 影响。否则,没有有关虚拟机所需 CPU 数量的具体规则。

存储开销

使用以下指南来估算 OpenShift Virtualization 环境的存储开销要求。

集群存储开销

Aggregated storage overhead per node ≈ 10 GiB

10 GiB 在安装 OpenShift Virtualization 时,集群中每个节点的磁盘存储影响估计值。

虚拟机存储开销

每个虚拟机的存储开销取决于虚拟机内的具体资源分配请求。该请求可能用于集群中其他位置托管的节点或存储资源的临时存储。OpenShift Virtualization 目前不会为正在运行的容器本身分配任何额外的临时存储。

Example

作为集群管理员,如果您计划托管集群中的 10 个虚拟机,每个虚拟机都有 1 GiB RAM 和 2 个 vCPU,集群中的内存影响为 11.68 GiB。集群中每个节点的磁盘存储影响估算为 10 GiB,托管虚拟机工作负载的 worker 节点的 CPU 影响最小 2 个内核。

4.1.5. 单节点 Openshift 的不同

您可以在单节点 OpenShift 上安装 OpenShift Virtualization。

但是,您应该注意单节点 OpenShift 不支持以下功能:

  • 高可用性
  • Pod 中断预算
  • 实时迁移
  • 配置了驱除策略的虚拟机或模板

4.1.6. 对象最大值

在规划集群时,您必须考虑以下测试的对象最大值:

4.1.7. 集群高可用性选项

您可以为集群配置以下高可用性(HA)选项之一:

  • 通过部署机器健康检查,可以使用安装程序置备的基础架构 (IPI)自动高可用性。

    注意

    在使用安装程序置备的基础架构安装的 OpenShift Container Platform 集群中,并使用正确配置的 MachineHealthCheck 资源,如果节点无法进行机器健康检查,且对集群不可用,则会回收它。在故障节点上运行的虚拟机之后会发生什么,这取决于一系列条件。如需有关潜在结果以及运行策略如何影响这些结果的详细信息,请参阅运行策略。

  • 通过在 OpenShift Container Platform 集群上使用 Node Health Check Operator 来部署 NodeHealthCheck 控制器,可以使用 IPI 和非 IPI 自动高可用性。控制器识别不健康的节点并使用补救供应商,如 Self Node Remediation Operator 或 Fence Agents Remediation Operator 来修复不健康的节点。如需有关补救、隔离和维护节点的更多信息,请参阅 Red Hat OpenShift 文档中的工作负载可用性
  • 任何平台的高可用性可通过使用监控系统或合格的人类监控节点可用性来实现。当节点丢失时,关闭并运行 oc delete node <lost_node>

    注意

    如果没有外部监控系统或合格的人类监控节点运行状况,虚拟机就失去高可用性。

4.2. 安装 OpenShift Virtualization

安装 OpenShift Virtualization 以便在 OpenShift Container Platform 集群中添加虚拟化功能。

重要

如果在没有互联网连接的受限环境中安装 OpenShift Virtualization,您必须为受限网络配置 Operator Lifecycle Manager (OLM)

如果您有有限的互联网连接,您可以在 OLM 中配置代理支持,以访问 OperatorHub。

4.2.1. 安装 OpenShift Virtualization Operator

使用 OpenShift Container Platform Web 控制台或命令行安装 OpenShift Virtualization Operator。

4.2.1.1. 使用 Web 控制台安装 OpenShift Virtualization Operator

您可以使用 OpenShift Container Platform Web 控制台部署 OpenShift Virtualization Operator。

先决条件

  • 在集群上安装 OpenShift Container Platform 4.15。
  • 以具有 cluster-admin 权限的用户身份登录到 OpenShift Container Platform web 控制台。

流程

  1. Administrator 视角中,点 OperatorsOperatorHub
  2. Filter by keyword 字段中,键入 Virtualization
  3. 选择带有 Red Hat source 标签的 OpenShift Virtualization Operator 标题。
  4. 阅读 Operator 信息并单击 Install
  5. Install Operator 页面中:

    1. 从可用 Update Channel 选项列表中选择 stable。这样可确保安装与 OpenShift Container Platform 版本兼容的 OpenShift Virtualization 版本。
    2. 对于安装的命名空间,请确保选择了 Operator 推荐的命名空间选项。这会在 openshift-cnv 命名空间中安装 Operator,该命名空间在不存在时自动创建。

      警告

      尝试在 openshift-cnv 以外的命名空间中安装 OpenShift Virtualization Operator 会导致安装失败。

    3. 对于 Approval Strategy,强烈建议您选择 Automatic (默认值),以便在 stable 更新频道中提供新版本时 OpenShift Virtualization 会自动更新。

      虽然可以选择 Manual 批准策略,但这不可取,因为它会给集群提供支持和功能带来高风险。只有在您完全了解这些风险且无法使用 Automatic 时,才选择 Manual

      警告

      因为 OpenShift Virtualization 只在与对应的 OpenShift Container Platform 版本搭配使用时被支持,所以缺少的 OpenShift Virtualization 更新可能会导致您的集群不被支持。

  6. 点击 Install 使 Operator 可供 openshift-cnv 命名空间使用。
  7. 当 Operator 成功安装时,点 Create HyperConverged
  8. 可选: 为 OpenShift Virtualization 组件配置 InfraWorkloads 节点放置选项。
  9. 点击 Create 启动 OpenShift Virtualization。

验证

  • 导航到 WorkloadsPods 页面,并监控 OpenShift Virtualization Pod,直至全部处于 Running 状态。在所有 pod 都处于 Running 状态后,您可以使用 OpenShift Virtualization。

4.2.1.2. 使用命令行安装 OpenShift Virtualization Operator

订阅 OpenShift Virtualization 目录,并通过将清单应用到集群来安装 OpenShift Virtualization Operator。

4.2.1.2.1. 使用 CLI 订阅 OpenShift virtualization 目录

在安装 OpenShift Virtualization 前,需要订阅到 OpenShift Virtualization catalog。订阅会授予 OpenShift virtualization Operator 对 openshift-cnv 命名空间的访问权限。

为了订阅,在您的集群中应用一个单独的清单(manifest)来配置 NamespaceOperatorGroupSubscription 对象。

先决条件

  • 在集群上安装 OpenShift Container Platform 4.15。
  • 安装 OpenShift CLI (oc) 。
  • 以具有 cluster-admin 特权的用户身份登录。

流程

  1. 创建一个包含以下清单的 YAML 文件:

    apiVersion: v1
    kind: Namespace
    metadata:
      name: openshift-cnv
    ---
    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: kubevirt-hyperconverged-group
      namespace: openshift-cnv
    spec:
      targetNamespaces:
        - openshift-cnv
    ---
    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: hco-operatorhub
      namespace: openshift-cnv
    spec:
      source: redhat-operators
      sourceNamespace: openshift-marketplace
      name: kubevirt-hyperconverged
      startingCSV: kubevirt-hyperconverged-operator.v4.15.2
      channel: "stable" 1
    1
    使用 stable 频道可确保您安装与 OpenShift Container Platform 版本兼容的 OpenShift Virtualization 版本。
  2. 运行以下命令,为 OpenShift Virtualization 创建所需的 NamespaceOperatorGroupSubscription对象:

    $ oc apply -f <file name>.yaml
注意

您可以在 YAML 文件中配置证书轮转参数。

4.2.1.2.2. 使用 CLI 部署 OpenShift Virtualization Operator

您可以使用 oc CLI 部署 OpenShift Virtualization Operator。

先决条件

  • openshift-cnv 命名空间中订阅 OpenShift Virtualization 目录。
  • 以具有 cluster-admin 特权的用户身份登录。

流程

  1. 创建一个包含以下清单的 YAML 文件:

    apiVersion: hco.kubevirt.io/v1beta1
    kind: HyperConverged
    metadata:
      name: kubevirt-hyperconverged
      namespace: openshift-cnv
    spec:
  2. 运行以下命令来部署 OpenShift Virtualization Operator:

    $ oc apply -f <file_name>.yaml

验证

  • 通过观察 openshift-cnv 命名空间中集群服务版本(CSV)的 PHASE 来确保 OpenShift Virtualization 已被成功部署。运行以下命令:

    $ watch oc get csv -n openshift-cnv

    如果部署成功,则会显示以下输出:

    输出示例

    NAME                                      DISPLAY                    VERSION   REPLACES   PHASE
    kubevirt-hyperconverged-operator.v4.15.2   OpenShift Virtualization   4.15.2                Succeeded

4.2.2. 后续步骤

  • hostpath 置备程序是设计用于 OpenShift Virtualization 的本地存储置备程序。如果要为虚拟机配置本地存储,您必须首先启用 hostpath 置备程序。

4.3. 卸载 OpenShift Virtualization

您可以使用 Web 控制台或命令行界面 (CLI) 卸载 OpenShift Virtualization,以删除 OpenShift Virtualization 工作负载、Operator 及其资源。

4.3.1. 使用 Web 控制台卸载 OpenShift Virtualization

您可以使用 Web 控制台卸载 OpenShift Virtualization 来执行以下任务:

重要

您必须首先删除所有 虚拟机,以及 虚拟机实例

当其工作负载保留在集群中时,您无法卸载 OpenShift Virtualization。

4.3.1.1. 删除 HyperConverged 自定义资源

要卸载 OpenShift Virtualization,首先删除 HyperConverged 自定义资源 (CR)。

先决条件

  • 可以使用具有 cluster-admin 权限的账户访问 OpenShift Container Platform 集群。

流程

  1. 进入到 OperatorsInstalled Operators 页面。
  2. 选择 OpenShift Virtualization Operator。
  3. OpenShift Virtualization Deployment 选项卡。
  4. kubevirt-hyperconverged 旁边的 Options 菜单 kebab ,然后选择 Delete HyperConverged
  5. 在确认窗口中点击 Delete

4.3.1.2. 使用 Web 控制台从集群中删除 Operator

集群管理员可以使用 Web 控制台从所选命名空间中删除已安装的 Operator。

先决条件

  • 您可以使用具有 cluster-admin 权限的账户访问 OpenShift Container Platform 集群 Web 控制台。

流程

  1. 进入到 OperatorsInstalled Operators 页面。
  2. Filter by name 字段中滚动或输入关键字以查找您要删除的 Operator。然后点它。
  3. Operator Details 页面右侧,从 Actions 列表中选择 Uninstall Operator

    此时会显示 Uninstall Operator? 对话框。

  4. 选择 Uninstall 来删除 Operator、Operator 部署和 pod。按照此操作,Operator 将停止运行,不再接收更新。

    注意

    此操作不会删除 Operator 管理的资源,包括自定义资源定义 (CRD) 和自定义资源 (CR) 。Web 控制台和继续运行的集群资源启用的仪表板和导航项可能需要手动清理。要在卸载 Operator 后删除这些,您可能需要手动删除 Operator CRD。

4.3.1.3. 使用 web 控制台删除命令空间

您可以使用 OpenShift Container Platform web 控制台删除一个命名空间。

先决条件

  • 可以使用具有 cluster-admin 权限的账户访问 OpenShift Container Platform 集群。

流程

  1. 导航至 AdministrationNamespaces
  2. 在命名空间列表中找到您要删除的命名空间。
  3. 在命名空间列表的右侧,从 Options 菜单 kebab 中选择 Delete Namespace
  4. Delete Namespace 页打开时,在相关项中输入您要删除的命名空间的名称。
  5. 点击 Delete

4.3.1.4. 删除 OpenShift Virtualization 自定义资源定义

您可以使用 Web 控制台删除 OpenShift Virtualization 自定义资源定义 (CRD)。

先决条件

  • 可以使用具有 cluster-admin 权限的账户访问 OpenShift Container Platform 集群。

流程

  1. 进入到 AdministrationCustomResourceDefinitions
  2. 选择 Label 过滤器,并在 Search 字段中输入 operators.coreos.com/kubevirt-hyperconverged.openshift-cnv,以显示 OpenShift Virtualization CRD。
  3. 点每个 CRD 旁边的 Options 菜单 kebab ,然后选择 Delete CustomResourceDefinition

4.3.2. 使用 CLI 卸载 OpenShift Virtualization

您可以使用 OpenShift CLI (oc) 卸载 OpenShift Virtualization。

先决条件

  • 可以使用具有 cluster-admin 权限的账户访问 OpenShift Container Platform 集群。
  • 已安装 OpenShift CLI(oc)。
  • 您已删除所有虚拟机和虚拟机实例。当其工作负载保留在集群中时,您无法卸载 OpenShift Virtualization。

流程

  1. 删除 HyperConverged 自定义资源:

    $ oc delete HyperConverged kubevirt-hyperconverged -n openshift-cnv
  2. 删除 OpenShift Virtualization Operator 订阅:

    $ oc delete subscription kubevirt-hyperconverged -n openshift-cnv
  3. 删除 OpenShift Virtualization ClusterServiceVersion 资源:

    $ oc delete csv -n openshift-cnv -l operators.coreos.com/kubevirt-hyperconverged.openshift-cnv
  4. 删除 OpenShift Virtualization 命名空间:

    $ oc delete namespace openshift-cnv
  5. 使用 dry-run 选项运行 oc delete crd 命令列出 OpenShift Virtualization 自定义资源定义 (CRD):

    $ oc delete crd --dry-run=client -l operators.coreos.com/kubevirt-hyperconverged.openshift-cnv

    输出示例

    customresourcedefinition.apiextensions.k8s.io "cdis.cdi.kubevirt.io" deleted (dry run)
    customresourcedefinition.apiextensions.k8s.io "hostpathprovisioners.hostpathprovisioner.kubevirt.io" deleted (dry run)
    customresourcedefinition.apiextensions.k8s.io "hyperconvergeds.hco.kubevirt.io" deleted (dry run)
    customresourcedefinition.apiextensions.k8s.io "kubevirts.kubevirt.io" deleted (dry run)
    customresourcedefinition.apiextensions.k8s.io "networkaddonsconfigs.networkaddonsoperator.network.kubevirt.io" deleted (dry run)
    customresourcedefinition.apiextensions.k8s.io "ssps.ssp.kubevirt.io" deleted (dry run)
    customresourcedefinition.apiextensions.k8s.io "tektontasks.tektontasks.kubevirt.io" deleted (dry run)

  6. 运行 oc delete crd 命令来删除 CRD,而无需 dry-run 选项:

    $ oc delete crd -l operators.coreos.com/kubevirt-hyperconverged.openshift-cnv

第 5 章 安装后配置

5.1. 安装后配置

以下流程通常在安装 OpenShift Virtualization 后执行。您可以配置与环境相关的组件:

5.2. 为 OpenShift Virtualization 组件指定节点

裸机节点上虚拟机(VM)的默认调度是适当的。另外,您可以通过配置节点放置规则来指定您要部署 OpenShift Virtualization Operator、工作负载和控制器的节点。

注意

在安装 OpenShift Virtualization 后,您可以为一些组件配置节点放置规则,但如果要为工作负载配置节点放置规则,则虚拟机将无法被存在。

5.2.1. 关于 OpenShift Virtualization 组件的节点放置规则

您可以将节点放置规则用于以下任务:

  • 仅在用于虚拟化工作负载的节点上部署虚拟机。
  • 仅在基础架构节点上部署 Operator。
  • 在工作负载之间保持隔离。

根据对象,您可以使用以下一个或多个规则类型:

nodeSelector
允许将 Pod 调度到使用您在此字段中指定的键值对标记的节点上。节点必须具有与所有列出的对完全匹配的标签。
关联性
可让您使用更宽松的语法来设置与 pod 匹配的规则。关联性也允许在规则应用方面更加精细。例如,您可以指定规则是首选项,而不是要求。如果规则是首选项的,则在不满足规则时仍然会调度 pod。
容限(tolerations)
允许将 pod 调度到具有匹配污点的节点。如果某个节点有污点(taint),则该节点只接受容许该污点的 pod。

5.2.2. 应用节点放置规则

您可以使用命令行编辑 SubscriptionHyperConvergedHostPathProvisioner 对象来应用节点放置规则。

先决条件

  • 已安装 oc CLI 工具。
  • 使用集群管理员权限登录。

流程

  1. 运行以下命令,在默认编辑器中编辑对象:

    $ oc edit <resource_type> <resource_name> -n {CNVNamespace}
  2. 保存文件以使改变生效。

5.2.3. 节点放置规则示例

您可以通过编辑 SubscriptionHyperConvergedHostPathProvisioner 对象来为 OpenShift Virtualization 组件指定节点放置规则。

5.2.3.1. 订阅对象节点放置规则示例

要指定 OLM 部署 OpenShift Virtualization Operator 的节点,在 OpenShift Virtualization 安装过程中编辑 Subscription 对象。

目前,您无法使用 Web 控制台为 Subscription 对象配置节点放置规则。

Subscription 对象不支持 关联性 节点放置规则。

使用 nodeSelector 规则的 Subscription 对象示例

apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  name: hco-operatorhub
  namespace: openshift-cnv
spec:
  source: redhat-operators
  sourceNamespace: openshift-marketplace
  name: kubevirt-hyperconverged
  startingCSV: kubevirt-hyperconverged-operator.v4.15.2
  channel: "stable"
  config:
    nodeSelector:
      example.io/example-infra-key: example-infra-value 1

1
OLM 在带有 example.io/example-infra-key = example-infra-value 的节点上部署 OpenShift Virtualization Operator。

带有 容限 规则的 Subscription 对象示例

apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  name: hco-operatorhub
  namespace: openshift-cnv
spec:
  source:  redhat-operators
  sourceNamespace: openshift-marketplace
  name: kubevirt-hyperconverged
  startingCSV: kubevirt-hyperconverged-operator.v4.15.2
  channel: "stable"
  config:
    tolerations:
    - key: "key"
      operator: "Equal"
      value: "virtualization" 1
      effect: "NoSchedule"

1
OLM 在带有 key = virtualization:NoSchedule 污点的节点上部署 OpenShift Virtualization Operator。只有具有匹配容限的 pod 才会调度到这些节点上。

5.2.3.2. HyperConverged 对象节点放置规则示例

要指定 OpenShift Virtualization 部署其组件的节点,您可以在 OpenShift Virtualization 安装过程中创建的 HyperConverged 自定义资源(CR)文件中编辑 nodePlacement 对象。

使用 nodeSelector 规则的 HyperConverged 对象示例

apiVersion: hco.kubevirt.io/v1beta1
kind: HyperConverged
metadata:
  name: kubevirt-hyperconverged
  namespace: openshift-cnv
spec:
  infra:
    nodePlacement:
      nodeSelector:
        example.io/example-infra-key: example-infra-value 1
  workloads:
    nodePlacement:
      nodeSelector:
        example.io/example-workloads-key: example-workloads-value 2

1
基础架构资源放置在带有 example.io/example-infra-key = example-infra-value 的节点上。
2
工作负载放置在带有 example.io/example-workloads-key = example-workloads-value 的节点上。

使用 关联性规则的 HyperConverged 对象示例

apiVersion: hco.kubevirt.io/v1beta1
kind: HyperConverged
metadata:
  name: kubevirt-hyperconverged
  namespace: openshift-cnv
spec:
  infra:
    nodePlacement:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: example.io/example-infra-key
                operator: In
                values:
                - example-infra-value 1
  workloads:
    nodePlacement:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: example.io/example-workloads-key 2
                operator: In
                values:
                - example-workloads-value
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 1
            preference:
              matchExpressions:
              - key: example.io/num-cpus
                operator: Gt
                values:
                - 8 3

1
基础架构资源放置在标记为 example.io/example-infra-key = example-value 的节点上。
2
工作负载放置在带有 example.io/example-workloads-key = example-workloads-value 的节点上。
3
对于工作负载,最好使用八个以上 CPU 的节点,但如果它们不可用,仍可调度 pod。

带有 容限 规则的 HyperConverged 对象示例

apiVersion: hco.kubevirt.io/v1beta1
kind: HyperConverged
metadata:
  name: kubevirt-hyperconverged
  namespace: openshift-cnv
spec:
  workloads:
    nodePlacement:
      tolerations: 1
      - key: "key"
        operator: "Equal"
        value: "virtualization"
        effect: "NoSchedule"

1
为 OpenShift Virtualization 组件保留的节点使用 key = virtualization:NoSchedule 污点标记。只有具有匹配容限的 pod 才会调度到保留节点上。

5.2.3.3. HostPathProvisioner 对象节点放置规则示例

您可以直接编辑 HostPathProvisioner 对象,或使用 Web 控制台。

警告

您必须将 hostpath 置备程序和 OpenShift Virtualization 组件调度到同一节点上。否则,使用 hostpath 置备程序的虚拟化 pod 无法运行。您无法运行虚拟机。

使用 hostpath 置备程序(HPP)存储类部署虚拟机(VM)后,您可以使用节点选择器从同一节点中删除 hostpath 置备程序 pod。但是,您必须首先恢复该更改,至少针对该特定节点,并在尝试删除虚拟机前等待 pod 运行。

您可以通过为安装 hostpath 置备程序时创建的 HostPathProvisioner 对象的 spec.workload 字段指定 nodeSelectoraffinitytolerations 来配置节点放置规则。

带有 nodeSelector 规则的 HostPathProvisioner 对象示例

apiVersion: hostpathprovisioner.kubevirt.io/v1beta1
kind: HostPathProvisioner
metadata:
  name: hostpath-provisioner
spec:
  imagePullPolicy: IfNotPresent
  pathConfig:
    path: "</path/to/backing/directory>"
    useNamingPrefix: false
  workload:
    nodeSelector:
      example.io/example-workloads-key: example-workloads-value 1

1
工作负载放置在带有 example.io/example-workloads-key = example-workloads-value 的节点上。

5.2.4. 其他资源

5.3. 安装后的网络配置

默认情况下,OpenShift Virtualization 安装了一个内部 pod 网络。

安装 OpenShift Virtualization 后,您可以安装网络 Operator 并配置额外网络。

5.3.1. 安装网络 Operator

您必须安装 Kubernetes NMState Operator 来为实时迁移或外部访问虚拟机(VM)配置 Linux 网桥网络。有关安装说明,请参阅使用 Web 控制台安装 Kubernetes NMState Operator

您可以安装 SR-IOV Operator 来管理 SR-IOV 网络设备和网络附加。有关安装说明,请参阅安装 SR-IOV Network Operator

您可以添加 MetalLB Operator 来管理集群中的 MetalLB 实例的生命周期。有关安装说明,请参阅使用 Web 控制台从 OperatorHub 安装 MetalLB Operator

5.3.2. 配置 Linux 网桥网络

安装 Kubernetes NMState Operator 后,您可以为实时迁移或外部访问虚拟机(VM)配置 Linux 网桥网络。

5.3.2.1. 创建 Linux 网桥 NNCP

您可以为 Linux 网桥网络创建一个 NodeNetworkConfigurationPolicy (NNCP) 清单。

先决条件

  • 已安装 Kubernetes NMState Operator。

流程

  • 创建 NodeNetworkConfigurationPolicy 清单。本例包含示例值,您必须替换为您自己的信息。

    apiVersion: nmstate.io/v1
    kind: NodeNetworkConfigurationPolicy
    metadata:
      name: br1-eth1-policy 1
    spec:
      desiredState:
        interfaces:
          - name: br1 2
            description: Linux bridge with eth1 as a port 3
            type: linux-bridge 4
            state: up 5
            ipv4:
              enabled: false 6
            bridge:
              options:
                stp:
                  enabled: false 7
              port:
                - name: eth1 8
    1
    策略的名称。
    2
    接口的名称。
    3
    可选:接口人类可读的接口描述。
    4
    接口的类型。这个示例会创建一个桥接。
    5
    创建后接口的请求状态。
    6
    在这个示例中禁用 IPv4。
    7
    在这个示例中禁用 STP。
    8
    网桥附加到的节点 NIC。

5.3.2.2. 使用 Web 控制台创建 Linux 网桥 NAD

您可以创建一个网络附加定义(NAD)来使用 OpenShift Container Platform web 控制台为 Pod 和虚拟机提供第 2 层网络。

Linux 网桥网络附加定义是将虚拟机连接至 VLAN 的最有效方法。

警告

不支持在虚拟机的网络附加定义中配置 IP 地址管理(IPAM)。

流程

  1. 在 Web 控制台中,点 NetworkingNetworkAttachmentDefinitions
  2. Create Network Attachment Definition

    注意

    网络附加定义必须与 pod 或虚拟机位于同一个命名空间中。

  3. 输入唯一 Name 和可选 Description
  4. Network Type 列表中选择 CNV Linux 网桥
  5. Bridge Name 字段输入网桥名称。
  6. 可选:如果资源配置了 VLAN ID,请在 VLAN Tag Number 字段中输入 ID 号。
  7. 可选: 选择 MAC Spoof Check 来启用 MAC spoof 过滤。此功能只允许单个 MAC 地址退出 pod,从而可以防止使用 MAC 欺骗进行的安全攻击。
  8. Create

5.3.3. 配置网络以进行实时迁移

配置了 Linux 网桥网络后,您可以为实时迁移配置专用网络。专用的网络可最小化实时迁移期间对租户工作负载的网络饱和影响。

5.3.3.1. 为实时迁移配置专用的二级网络

要为实时迁移配置专用的二级网络,您必须首先使用 CLI 创建桥接网络附加定义(NAD)。然后,您可以将 NetworkAttachmentDefinition 对象的名称添加到 HyperConverged 自定义资源(CR)。

先决条件

  • 已安装 OpenShift CLI(oc)。
  • 您以具有 cluster-admin 角色的用户身份登录到集群。
  • 每个节点至少有两个网络接口卡 (NIC)。
  • 用于实时迁移的 NIC 连接到同一 VLAN。

流程

  1. 根据以下示例创建 NetworkAttachmentDefinition 清单:

    配置文件示例

    apiVersion: "k8s.cni.cncf.io/v1"
    kind: NetworkAttachmentDefinition
    metadata:
      name: my-secondary-network 1
      namespace: openshift-cnv 2
    spec:
      config: '{
        "cniVersion": "0.3.1",
        "name": "migration-bridge",
        "type": "macvlan",
        "master": "eth1", 3
        "mode": "bridge",
        "ipam": {
          "type": "whereabouts", 4
          "range": "10.200.5.0/24" 5
        }
      }'

    1
    指定 NetworkAttachmentDefinition 对象的名称。
    2 3
    指定要用于实时迁移的 NIC 名称。
    4
    指定为 NAD 提供网络的 CNI 插件名称。
    5
    为二级网络指定一个 IP 地址范围。这个范围不得与主网络的 IP 地址重叠。
  2. 运行以下命令,在默认编辑器中打开 HyperConverged CR:

    oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
  3. NetworkAttachmentDefinition 对象的名称添加到 HyperConverged CR 的 spec.liveMigrationConfig 小节中:

    HyperConverged 清单示例

    apiVersion: hco.kubevirt.io/v1beta1
    kind: HyperConverged
    metadata:
      name: kubevirt-hyperconverged
    spec:
      liveMigrationConfig:
        completionTimeoutPerGiB: 800
        network: <network> 1
        parallelMigrationsPerCluster: 5
        parallelOutboundMigrationsPerNode: 2
        progressTimeout: 150
    # ...

    1
    指定要用于实时迁移的 Multus NetworkAttachmentDefinition 对象的名称。
  4. 保存更改并退出编辑器。virt-handler Pod 会重启并连接到二级网络。

验证

  • 当运行虚拟机的节点置于维护模式时,虚拟机会自动迁移到集群中的另一个节点。您可以通过检查虚拟机实例(VMI)元数据中的目标 IP 地址,验证迁移是否在二级网络中发生,而不是默认 pod 网络。

    $ oc get vmi <vmi_name> -o jsonpath='{.status.migrationState.targetNodeAddress}'

5.3.3.2. 使用 Web 控制台选择专用网络

您可以使用 OpenShift Container Platform Web 控制台为实时迁移选择一个专用网络。

先决条件

  • 为实时迁移配置了 Multus 网络。

流程

  1. 在 OpenShift Container Platform web 控制台中进入到 Virtualization > Overview
  2. Settings 选项卡,然后点 Live migration
  3. Live migration network 列表中选择网络。

5.3.4. 配置 SR-IOV 网络

安装 SR-IOV Operator 后,您可以配置 SR-IOV 网络。

5.3.4.1. 配置 SR-IOV 网络设备

SR-IOV Network Operator 把 SriovNetworkNodePolicy.sriovnetwork.openshift.io CRD 添加到 OpenShift Container Platform。您可以通过创建一个 SriovNetworkNodePolicy 自定义资源 (CR) 来配置 SR-IOV 网络设备。

注意

在应用由 SriovNetworkNodePolicy 对象中指定的配置时,SR-IOV Operator 可能会排空节点,并在某些情况下会重启节点。

它可能需要几分钟时间来应用配置更改。

先决条件

  • 已安装 OpenShift CLI(oc)。
  • 您可以使用具有 cluster-admin 角色的用户访问集群。
  • 已安装 SR-IOV Network Operator。
  • 集群中有足够的可用节点,用于处理从排空节点中驱除的工作负载。
  • 您还没有为 SR-IOV 网络设备配置选择任何 control plane 节点。

流程

  1. 创建一个 SriovNetworkNodePolicy 对象,然后在 <name>-sriov-node-network.yaml 文件中保存 YAML。使用配置的实际名称替换 <name>

    apiVersion: sriovnetwork.openshift.io/v1
    kind: SriovNetworkNodePolicy
    metadata:
      name: <name> 1
      namespace: openshift-sriov-network-operator 2
    spec:
      resourceName: <sriov_resource_name> 3
      nodeSelector:
        feature.node.kubernetes.io/network-sriov.capable: "true" 4
      priority: <priority> 5
      mtu: <mtu> 6
      numVfs: <num> 7
      nicSelector: 8
        vendor: "<vendor_code>" 9
        deviceID: "<device_id>" 10
        pfNames: ["<pf_name>", ...] 11
        rootDevices: ["<pci_bus_id>", "..."] 12
      deviceType: vfio-pci 13
      isRdma: false 14
    1
    为 CR 对象指定一个名称。
    2
    指定 SR-IOV Operator 安装到的命名空间。
    3
    指定 SR-IOV 设备插件的资源名称。您可以为一个资源名称创建多个 SriovNetworkNodePolicy 对象。
    4
    指定节点选择器来选择要配置哪些节点。只有所选节点上的 SR-IOV 网络设备才会被配置。SR-IOV Container Network Interface(CNI)插件和设备插件仅在所选节点上部署。
    5
    可选:指定一个 099 之间的整数。较小的数值具有较高的优先权,优先级 10 高于优先级 99。默认值为 99
    6
    可选:为虚拟功能(VF)的最大传输单位 (MTU) 指定一个值。最大 MTU 值可能因不同的 NIC 型号而有所不同。
    7
    为 SR-IOV 物理网络设备指定要创建的虚拟功能 (VF) 的数量。对于 Intel 网络接口控制器(NIC),VF 的数量不能超过该设备支持的 VF 总数。对于 Mellanox NIC,VF 的数量不能超过 128
    8
    nicSelector 映射为 Operator 选择要配置的以太网设备。您不需要为所有参数指定值。建议您以足够的准确度来识别以太网适配器,以便尽量减小意外选择其他以太网设备的可能性。如果指定了rootDevices,则必须同时为 vendordeviceIDpfNames 指定一个值。如果同时指定了 pfNamesrootDevices,请确保它们指向同一个设备。
    9
    可选:指定 SR-IOV 网络设备的厂商十六进制代码。允许的值只能是 808615b3
    10
    可选:指定 SR-IOV 网络设备的设备十六进制代码。允许的值只能是 158b10151017
    11
    可选:参数接受包括以太网设备的一个或多个物理功能 (PF) 的数组。
    12
    参数接受一个包括一个或多个 PCI 总线地址,用于以太网设备的物理功能的数组。使用以下格式提供地址: 0000:02:00.1
    13
    OpenShift Virtualization 中的虚拟功能需要 vfio-pci 驱动程序类型。
    14
    可选:指定是否启用远程直接访问(RDMA)模式。对于 Mellanox 卡,请将 isRdma 设置为 false。默认值为 false
    注意

    如果将 RDMA 标记设定为 true,您可以继续使用启用了 RDMA 的 VF 作为普通网络设备。设备可在其中的一个模式中使用。

  2. 可选:将 SR-IOV 功能的集群节点标记为 SriovNetworkNodePolicy.Spec.NodeSelector (如果它们还没有标记)。有关标记节点的更多信息,请参阅"了解如何更新节点上的标签"。
  3. 创建 SriovNetworkNodePolicy 对象:

    $ oc create -f <name>-sriov-node-network.yaml

    其中 <name> 指定这个配置的名称。

    在应用配置更新后,sriov-network-operator 命名空间中的所有 Pod 都会变为 Running 状态。

  4. 要验证是否已配置了 SR-IOV 网络设备,请输入以下命令。将 <node_name> 替换为带有您刚才配置的 SR-IOV 网络设备的节点名称。

    $ oc get sriovnetworknodestates -n openshift-sriov-network-operator <node_name> -o jsonpath='{.status.syncStatus}'

5.3.5. 使用 Web 控制台启用负载均衡器服务创建

您可以使用 OpenShift Container Platform web 控制台为虚拟机(VM)创建负载均衡器服务。

先决条件

  • 已为集群配置负载均衡器。
  • 以具有 cluster-admin 角色的用户身份登录。

流程

  1. 进入到 VirtualizationOverview
  2. Settings 选项卡中,点 Cluster
  3. 展开 General settingsSSH 配置
  4. SSH over LoadBalancer 服务 设置为 on。

5.4. 安装后存储配置

以下存储配置任务是必需的:

  • 您必须为集群配置默认存储类。否则,集群无法接收自动引导源更新。
  • 如果您的存储供应商没有被 CDI 识别,您必须配置存储配置集。存储配置集根据关联的存储类提供推荐的存储设置。

可选: 您可以使用 hostpath 置备程序(HPP)配置本地存储。

如需了解更多选项,请参阅 存储配置概述,包括配置 Containerized Data Importer (CDI)、数据卷和自动引导源更新。

5.4.1. 使用 HPP 配置本地存储

安装 OpenShift Virtualization Operator 时,会自动安装 Hostpath Provisioner(HPP)Operator。HPP Operator 创建 HPP 置备程序。

HPP 是为 OpenShift Virtualization 设计的本地存储置备程序。要使用 HPP,您必须创建一个 HPP 自定义资源(CR)。

重要

HPP 存储池不能与操作系统位于同一个分区。否则,存储池可能会填满操作系统分区。如果操作系统分区已满,则性能可能会生效,或者节点可能会不稳定或不可用。

5.4.1.1. 使用 storagePools 小节为 CSI 驱动程序创建存储类

要使用 hostpath 置备程序 (HPP),您必须为 Container Storage Interface (CSI) 驱动程序创建关联的存储类。

当您创建存储类时,您将设置参数,它们会影响属于该存储类的持久性卷(PV)的动态置备。您不能在创建 StorageClass 对象后更新其参数。

注意

虚拟机使用基于本地 PV 的数据卷。本地 PV 与特定节点绑定。虽然磁盘镜像准备供虚拟机消耗,但可能不会将虚拟机调度到之前固定本地存储 PV 的节点。

要解决这个问题,使用 Kubernetes pod 调度程序将持久性卷声明(PVC)绑定到正确的节点上的 PV。通过使用 volumeBindingMode 参数设置为 WaitForFirstConsumerStorageClass 值,PV 的绑定和置备会延迟到 pod 使用 PVC。

流程

  1. 创建 storageclass_csi.yaml 文件来定义存储类:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: hostpath-csi
    provisioner: kubevirt.io.hostpath-provisioner
    reclaimPolicy: Delete 1
    volumeBindingMode: WaitForFirstConsumer 2
    parameters:
      storagePool: my-storage-pool 3
    1
    两个可能的 reclaimPolicy 值为 DeleteRetain。如果没有指定值,则默认值为 Delete
    2
    volumeBindingMode 参数决定何时发生动态置备和卷绑定。指定 WaitForFirstConsumer,将持久性卷(PV)的绑定和置备延迟到创建使用持久性卷声明(PVC)的 pod 后。这样可确保 PV 满足 pod 的调度要求。
    3
    指定 HPP CR 中定义的存储池名称。
  2. 保存文件并退出。
  3. 运行以下命令来创建 StorageClass 对象:

    $ oc create -f storageclass_csi.yaml

第 6 章 更新

6.1. 更新 OpenShift Virtualization

了解 Operator Lifecycle Manager (OLM) 如何为 OpenShift Virtualization 提供 z-stream 和次要版本更新。

6.1.1. RHEL 9 上的 OpenShift Virtualization

OpenShift Virtualization 4.15 基于 Red Hat Enterprise Linux (RHEL) 9。您可以按照标准 OpenShift Virtualization 更新过程,从一个基于 RHEL 8 的版本升级到 OpenShift Virtualization 4.15。不需要额外的步骤。

与之前的版本一样,您可以在不中断运行工作负载的情况下执行更新。OpenShift Virtualization 4.15 支持从 RHEL 8 节点实时迁移到 RHEL 9 节点。

6.1.1.1. RHEL 9 机器类型

OpenShift Virtualization 中包含的所有虚拟机模板现在默认使用 RHEL 9 机器类型: machineType: pc-q35-rhel9.<y>.0,其中 <y> 是与最新 RHEL 9 次版本对应的数字。例如,值 pc-q35-rhel9.2.0 用于 RHEL 9.2。

更新 OpenShift Virtualization 不会更改任何现有虚拟机的 machineType 值。这些虚拟机在更新前继续正常工作。您可以选择更改虚拟机的机器类型,使其可从 RHEL 9 改进中受益。

重要

在更改虚拟机的 machineType 值前,您必须关闭虚拟机。

6.1.2. 关于更新 OpenShift Virtualization

  • Operator Lifecycle Manager (OLM) 管理 OpenShift Virtualization Operator 的生命周期。Marketplace Operator 在 OpenShift Container Platform 安装过程中部署,使外部 Operator 可供集群使用。
  • OLM 为 OpenShift Virtualization 提供 z-stream 和次要版本更新。在将 OpenShift Container Platform 更新至下一个次版本时,次版本更新将变为可用。在不先更新 OpenShift Container Platform 的情况下,您无法将 OpenShift Virtualization 更新至下一个次版本。
  • OpenShift Virtualization 订阅使用一个名为 stable 的单一更新频道。stable 频道确保 OpenShift Virtualization 和 OpenShift Container Platform 版本兼容。
  • 如果您的订阅的批准策略被设置为 Automatic,则当 stable 频道中提供新版本的 Operator 时,更新过程就会马上启动。强烈建议您使用 Automatic(自动) 批准策略来维护可支持的环境。只有在运行对应的 OpenShift Container Platform 版本时,才会支持 OpenShift Virtualization 的每个次要版本。例如,您必须在 OpenShift Container Platform 4.15 上运行 OpenShift Virtualization 4.15。

    • 虽然可以选择 Manual(手工) 批准策略,但并不建议这样做,因为它存在集群的支持性和功能风险。使用 Manual 批准策略时,您必须手动批准每个待处理的更新。如果 OpenShift Container Platform 和 OpenShift Virtualization 更新不同步,您的集群将无法被支持。
  • 更新完成所需时间取决于您的网络连接情况。大部分自动更新可在十五分钟内完成。
  • 更新 OpenShift Virtualization 不会中断网络连接。
  • 数据卷及其关联的持久性卷声明会在更新过程中保留。
重要

如果您的虚拟机正在运行,使用 hostpath 置备程序存储,则无法实时迁移,并可能会阻止 OpenShift Container Platform 集群更新。

作为临时解决方案,您可以重新配置虚拟机以便在集群更新过程中自动关闭它们。删除 evictionStrategy: LiveMigrate 字段,并将 runStrategy 字段设置为 Always

6.1.2.1. 关于工作负载更新

更新 OpenShift Virtualization 时,虚拟机工作负载(包括 libvirtvirt-launcher )和 qemu (如果支持实时迁移)会自动更新。

注意

每个虚拟机均有一个 virt-launcher pod,用于运行虚拟机实例(VMI)。virt-launcher pod 运行一个 libvirt 实例,用于管理虚拟机(VM)进程。

您可以通过编辑 HyperConverged 自定义资源 (CR) 的 spec.workloadUpdateStrategy 小节来配置工作负载的更新方式。可用的工作负载更新方法有两种: LiveMigrateEvict

因为 Evict 方法关闭 VMI pod,所以只启用 LiveMigrate 更新策略。

LiveMigrate 是唯一启用的更新策略时:

  • 支持实时迁移的 VMI 会在更新过程中进行迁移。VM 客户机会进入启用了更新组件的新 pod。
  • 不支持实时迁移的 VMI 不会中断或更新。

    • 如果 VMI 有 LiveMigrate 驱除策略,但没有支持实时迁移。

如果您同时启用 LiveMigrateEvict

  • 支持实时迁移的 VMI 使用 LiveMigrate 更新策略。
  • 不支持实时迁移的 VMI 使用 Evict 更新策略。如果 VMI 由带有 runStrategy: Always 设置的 VirtualMachine 对象控制,则会在带有更新组件的新 pod 中创建一个新的 VMI。
迁移尝试和超时

更新工作负载时,如果 pod 在以下时间段内处于 Pending 状态,实时迁移会失败:

5 分钟
如果 pod 因为是 Unschedulable 而处于 pending 状态。
15 分钟
如果 pod 因任何原因处于 pending 状态。

当 VMI 无法迁移时,virt-controller 会尝试再次迁移它。它会重复这个过程,直到所有可可迁移的 VMI 在新的 virt-launcher Pod 上运行。如果 VMI 没有被正确配置,这些尝试可能会无限期重复。

注意

每次尝试都会对应于一个迁移对象。只有最近五个尝试才在缓冲区中。这可防止迁移对象在系统上进行积累,同时保留用于调试的信息。

6.1.2.2. 关于 EUS 到 EUS 更新

每个 OpenShift Container Platform 的次版本号为偶数(包括 4.10 和 4.12)都是延长更新支持(EUS)版本。但是,由于 Kubernetes 设计了串行次版本更新,所以您无法直接从一个 EUS 版本更新到下一个版本。

从源 EUS 版本升级到下一个奇数次版本后,您必须按顺序将 OpenShift Virtualization 更新至更新路径中的所有次版本的 z-stream 版本。当您升级到最新的适用 z-stream 版本时,您可以将 OpenShift Container Platform 更新至目标 EUS 次版本。

当 OpenShift Container Platform 更新成功时,OpenShift Virtualization 的对应更新将变为可用。现在,您可以将 OpenShift Virtualization 更新至目标 EUS 版本。

6.1.2.2.1. 准备更新

在开始 EUS 到 EUS 更新前,您必须:

  • 在启动 EUS 到 EUS 更新前,暂停 worker 节点的机器配置池,以便 worker 不会重启两次。
  • 在开始更新过程前禁用自动工作负载更新。这是为了防止 OpenShift Virtualization 迁移或驱除虚拟机(VM),直到您升级到目标 EUS 版本。
注意

默认情况下,当您更新 OpenShift Virtualization Operator 时,OpenShift Virtualization 会自动更新工作负载,如 virt-launcher pod。您可以在 HyperConverged 自定义资源的 spec.workloadUpdateStrategy 小节中配置此行为。

了解有关执行 EUS 更新的更多信息。

6.1.3. 防止在 EUS 到 EUS 更新过程中进行工作负载更新

当您从一个延长更新支持(EUS)版本升级到下一个版本时,您必须手动禁用自动工作负载更新,以防止 OpenShift Virtualization 在更新过程中迁移或驱除工作负载。

先决条件

  • 您正在运行 EUS 版本 OpenShift Container Platform,并希望升级到下一个 EUS 版本。还没有同时更新至奇数版本。
  • 您可以阅读"准备执行 EUS 到 EUS 更新",并了解到与 OpenShift Container Platform 集群相关的注意事项和要求。
  • 按照 OpenShift Container Platform 文档的指示暂停 worker 节点的机器配置池。
  • 建议您使用默认的 Automatic 批准策略。如果使用 Manual 批准策略,您必须批准 web 控制台中的所有待处理的更新。如需了解更多详细信息,请参阅"需要批准待处理的 Operator 更新"部分。

流程

  1. 运行以下命令备份当前的 workloadUpdateMethods 配置:

    $ WORKLOAD_UPDATE_METHODS=$(oc get kv kubevirt-kubevirt-hyperconverged \
      -n openshift-cnv -o jsonpath='{.spec.workloadUpdateStrategy.workloadUpdateMethods}')
  2. 运行以下命令关闭所有工作负载更新方法:

    $ oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv \
      --type json -p '[{"op":"replace","path":"/spec/workloadUpdateStrategy/workloadUpdateMethods", "value":[]}]'

    输出示例

    hyperconverged.hco.kubevirt.io/kubevirt-hyperconverged patched

  3. 在继续操作前,请确保 HyperConverged Operator 为 Upgradeable。输入以下命令并监控输出:

    $ oc get hyperconverged kubevirt-hyperconverged -n openshift-cnv -o json | jq ".status.conditions"

    例 6.1. 输出示例

    [
      {
        "lastTransitionTime": "2022-12-09T16:29:11Z",
        "message": "Reconcile completed successfully",
        "observedGeneration": 3,
        "reason": "ReconcileCompleted",
        "status": "True",
        "type": "ReconcileComplete"
      },
      {
        "lastTransitionTime": "2022-12-09T20:30:10Z",
        "message": "Reconcile completed successfully",
        "observedGeneration": 3,
        "reason": "ReconcileCompleted",
        "status": "True",
        "type": "Available"
      },
      {
        "lastTransitionTime": "2022-12-09T20:30:10Z",
        "message": "Reconcile completed successfully",
        "observedGeneration": 3,
        "reason": "ReconcileCompleted",
        "status": "False",
        "type": "Progressing"
      },
      {
        "lastTransitionTime": "2022-12-09T16:39:11Z",
        "message": "Reconcile completed successfully",
        "observedGeneration": 3,
        "reason": "ReconcileCompleted",
        "status": "False",
        "type": "Degraded"
      },
      {
        "lastTransitionTime": "2022-12-09T20:30:10Z",
        "message": "Reconcile completed successfully",
        "observedGeneration": 3,
        "reason": "ReconcileCompleted",
        "status": "True",
        "type": "Upgradeable" 1
      }
    ]
    1
    OpenShift Virtualization Operator 具有 Upgradeable 状态。
  4. 手动将集群从源 EUS 版本升级到下一个 OpenShift Container Platform 次要版本:

    $ oc adm upgrade

    验证

    • 运行以下命令检查当前版本:

      $ oc get clusterversion
      注意

      将 OpenShift Container Platform 更新至下一版本是更新 OpenShift Virtualization 的先决条件。如需了解更多详细信息,请参阅 OpenShift Container Platform 文档中的"更新集群"部分。

  5. 更新 OpenShift Virtualization。

    • 使用默认的 Automatic 批准策略,OpenShift Virtualization 会在更新 OpenShift Container Platform 后自动更新到对应的版本。
    • 如果使用 Manual 批准策略,请使用 Web 控制台批准待处理的更新。
  6. 运行以下命令监控 OpenShift Virtualization 更新:

    $ oc get csv -n openshift-cnv
  7. 将 OpenShift Virtualization 更新至可用于非 EUS 次版本的每个 z-stream 版本,通过运行上一步中显示的命令来监控每个更新。
  8. 运行以下命令,确认 OpenShift Virtualization 已成功更新至非 EUS 版本的最新 z-stream 版本:

    $ oc get hyperconverged kubevirt-hyperconverged -n openshift-cnv -o json | jq ".status.versions"

    输出示例

    [
      {
        "name": "operator",
        "version": "4.15.2"
      }
    ]

  9. 等待 HyperConverged Operator 在执行下一次更新前具有 Upgradeable 状态。输入以下命令并监控输出:

    $ oc get hyperconverged kubevirt-hyperconverged -n openshift-cnv -o json | jq ".status.conditions"
  10. 将 OpenShift Container Platform 更新至目标 EUS 版本。
  11. 通过检查集群版本确认更新是否成功:

    $ oc get clusterversion
  12. 将 OpenShift Virtualization 更新至目标 EUS 版本。

    • 使用默认的 Automatic 批准策略,OpenShift Virtualization 会在更新 OpenShift Container Platform 后自动更新到对应的版本。
    • 如果使用 Manual 批准策略,请使用 Web 控制台批准待处理的更新。
  13. 运行以下命令监控 OpenShift Virtualization 更新:

    $ oc get csv -n openshift-cnv

    VERSION 字段与目标 EUS 版本匹配并且 PHASE 字段显示为 Succeeded 时,更新已完成。

  14. 恢复您备份的工作负载更新方法配置:

    $ oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv --type json -p \
      "[{\"op\":\"add\",\"path\":\"/spec/workloadUpdateStrategy/workloadUpdateMethods\", \"value\":$WORKLOAD_UPDATE_METHODS}]"

    输出示例

    hyperconverged.hco.kubevirt.io/kubevirt-hyperconverged patched

    验证

    • 运行以下命令检查虚拟机迁移的状态:

      $ oc get vmim -A

后续步骤

  • 现在,您可以取消暂停 worker 节点的机器配置池。

6.1.4. 配置工作负载更新方法

您可以通过编辑 HyperConverged 自定义资源(CR)来配置工作负载更新方法。

先决条件

  • 要使用实时迁移作为更新方法,您必须首先在集群中启用实时迁移。

    注意

    如果 VirtualMachineInstance CR 包含 evictionStrategy: LiveMigrate,且虚拟机实例(VMI)不支持实时迁移,则 VMI 将不会更新。

流程

  1. 要在默认编辑器中打开 HyperConverged CR,请运行以下命令:

    $ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
  2. 编辑 HyperConverged CR 的 workloadUpdateStrategy 小节。例如:

    apiVersion: hco.kubevirt.io/v1beta1
    kind: HyperConverged
    metadata:
      name: kubevirt-hyperconverged
    spec:
      workloadUpdateStrategy:
        workloadUpdateMethods: 1
        - LiveMigrate 2
        - Evict 3
        batchEvictionSize: 10 4
        batchEvictionInterval: "1m0s" 5
    # ...
    1
    可用于执行自动化工作负载更新的方法。可用值为 LiveMigrateEvict。如果您如本例所示启用这两个选项,则更新会为不支持实时迁移的 VMI 使用 LiveMigrate,对于不支持实时迁移的 VMI 使用 Evict。要禁用自动工作负载更新,您可以删除 workloadUpdateStrategy 小节,或设置 workloadUpdateMethods: [] 将数组留空。
    2
    具有最低破坏性的更新方法。支持实时迁移的 VMI 通过将虚拟机 (VM) 客户机迁移到启用了更新组件的新 pod 中来更新。如果 LiveMigrate 是唯一列出的工作负载更新方法,不支持实时迁移的 VMI 不会中断或更新。
    3
    在升级过程中关闭 VMI pod 是一个有破坏性的方法。如果在集群中没有启用实时迁移,Evict 是唯一可用的更新方法。如果 VMI 由带有 runStrategy: Always 配置的 VirtualMachine 对象控制,则会在带有更新组件的新 pod 中创建一个新的 VMI。
    4
    使用 Evict 方法每次可以强制更新的 VMI 数量。这不适用于 LiveMigrate 方法。
    5
    驱除下一批工作负载前等待的时间间隔。这不适用于 LiveMigrate 方法。
    注意

    您可以通过编辑 HyperConverged CR 的 spec.liveMigrationConfig 小节来配置实时迁移限制和超时。

  3. 若要应用您的更改,请保存并退出编辑器。

6.1.5. 批准待处理的 Operator 更新

6.1.5.1. 手动批准待处理的 Operator 更新

如果已安装的 Operator 的订阅被设置为 Manual,则当其当前更新频道中发布新更新时,在开始安装前必须手动批准更新。

先决条件

  • 之前使用 Operator Lifecycle Manager(OLM)安装的 Operator。

流程

  1. 在 OpenShift Container Platform Web 控制台的 Administrator 视角中,进入 Operators → Installed Operators
  2. 处于待定更新的 Operator 会显示 Upgrade available 状态。点您要更新的 Operator 的名称。
  3. Subscription 标签页。任何需要批准的更新都会在 Upgrade status 旁边显示。例如:它可能会显示 1 requires approval
  4. 1 requires approval,然后点 Preview Install Plan
  5. 检查列出可用于更新的资源。在满意后,点 Approve
  6. 返回到 Operators → Installed Operators 页面,以监控更新的进度。完成后,状态会变为 SucceededUp to date

6.1.6. 监控更新状态

6.1.6.1. 监控 OpenShift Virtualization 升级状态

要监控 OpenShift Virtualization Operator 升级的状态,请观察集群服务版本 (CSV) PHASE。此外您还可在 web 控制台中,或运行此处提供的命令来监控 CSV 状况。

注意

PHASE 和状况值均是基于可用信息的近似值。

先决条件

  • 以具有 cluster-admin 角色的用户身份登录集群。
  • 安装 OpenShift CLI(oc)。

流程

  1. 运行以下命令:

    $ oc get csv -n openshift-cnv
  2. 查看输出,检查 PHASE 字段。例如:

    输出示例

    VERSION  REPLACES                                        PHASE
    4.9.0    kubevirt-hyperconverged-operator.v4.8.2         Installing
    4.9.0    kubevirt-hyperconverged-operator.v4.9.0         Replacing

  3. 可选:运行以下命令来监控所有 OpenShift Virtualization 组件状况的聚合状态:

    $ oc get hyperconverged kubevirt-hyperconverged -n openshift-cnv \
      -o=jsonpath='{range .status.conditions[*]}{.type}{"\t"}{.status}{"\t"}{.message}{"\n"}{end}'

    成功升级后会输出以下内容:

    输出示例

    ReconcileComplete  True  Reconcile completed successfully
    Available          True  Reconcile completed successfully
    Progressing        False Reconcile completed successfully
    Degraded           False Reconcile completed successfully
    Upgradeable        True  Reconcile completed successfully

6.1.6.2. 查看过时的 OpenShift Virtualization 工作负载

您可以使用 CLI 查看过时的工作负载列表。

注意

如果集群中存在过时的虚拟化 pod,OutdatedVirtualMachineInstanceWorkloads 警报会触发。

流程

  • 要查看过时的虚拟机实例 (VMI) 列表,请运行以下命令:

    $ oc get vmi -l kubevirt.io/outdatedLauncherImage --all-namespaces
注意

配置工作负载更新以确保 VMI 自动更新。

6.1.7. 其他资源

第 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 控制台中,进入到 VirtualizationCatalog,再点 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 控制台中进入到 VirtualizationCatalog
  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 控制台中进入到 VirtualizationTemplates
  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>

7.2. 从自定义镜像创建虚拟机

7.2.1. 从自定义镜像创建虚拟机概述

您可以使用以下方法之一从自定义操作系统镜像创建虚拟机(VM):

Containerized Data Importer (CDI) 使用数据卷将镜像导入到 PVC 中。您可以使用 OpenShift Container Platform Web 控制台或命令行将 PVC 添加到虚拟机。

重要

您必须在从红帽提供的操作系统镜像创建的虚拟机上安装 QEMU 客户机代理

您还必须在 Windows 虚拟机上安装 VirtIO 驱动程序

QEMU 客户机代理包含在红帽镜像中。

7.2.2. 使用容器磁盘创建虚拟机

您可以使用从操作系统镜像构建的容器磁盘创建虚拟机 (VM)。

您可以为容器磁盘启用自动更新。详情请参阅管理自动引导源更新

重要

如果容器磁盘较大,I/O 流量可能会增加,并导致 worker 节点不可用。您可以执行以下任务来解决这个问题:

您可以通过执行以下步骤从容器磁盘创建虚拟机:

  1. 将操作系统镜像构建到容器磁盘中,并将其上传到容器注册表
  2. 如果您的容器 registry 没有 TLS,请将您的环境配置为为您的 registry 禁用 TLS
  3. 使用 Web 控制台命令行使用容器磁盘创建虚拟机作为磁盘源。
重要

您必须在从红帽提供的操作系统镜像创建的虚拟机上安装 QEMU 客户机代理

7.2.2.1. 构建和上传容器磁盘

您可以将虚拟机(VM)镜像构建到容器磁盘中,并将其上传到 registry。

容器磁盘的大小受托管容器磁盘的 registry 的最大层大小的限制。

注意

对于 Red Hat Quay,您可以通过编辑首次部署 Red Hat Quay 时创建的 YAML 配置文件来更改最大层大小。

先决条件

  • 必须安装 podman
  • 您必须具有 QCOW2 或 RAW 镜像文件。

流程

  1. 创建 Dockerfile 以将虚拟机镜像构建到容器镜像中。虚拟机镜像必须由 QEMU 所有,其 UID 为 107,并放置在容器内的 /disk/ 目录中。/disk/ 目录的权限必须设为 0440

    以下示例在第一阶段使用 Red Hat Universal Base Image(UBI)来处理这些配置更改,并使用第二阶段中的最小 scratch 镜像存储结果:

    $ cat > Dockerfile << EOF
    FROM registry.access.redhat.com/ubi8/ubi:latest AS builder
    ADD --chown=107:107 <vm_image>.qcow2 /disk/ \1
    RUN chmod 0440 /disk/*
    
    FROM scratch
    COPY --from=builder /disk/* /disk/
    EOF
    1
    其中 <vm_image> 是 QCOW2 或 RAW 格式的镜像。如果使用远程镜像,请将 <vm_image>.qcow2 替换为完整的 URL。
  2. 构建和标记容器:

    $ podman build -t <registry>/<container_disk_name>:latest .
  3. 将容器镜像推送到 registry:

    $ podman push <registry>/<container_disk_name>:latest

7.2.2.2. 为容器 registry 禁用 TLS

您可以通过编辑 HyperConverged 自定义资源的 insecureRegistries 字段来禁用一个或多个容器 registry 的 TLS(传输层安全)。

先决条件

  1. 运行以下命令,在默认编辑器中打开 HyperConverged CR:

    $ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
  2. 将不安全的 registry 列表添加到 spec.storageImport.insecureRegistries 字段中。

    HyperConverged 自定义资源示例

    apiVersion: hco.kubevirt.io/v1beta1
    kind: HyperConverged
    metadata:
      name: kubevirt-hyperconverged
      namespace: openshift-cnv
    spec:
      storageImport:
        insecureRegistries: 1
          - "private-registry-example-1:5000"
          - "private-registry-example-2:5000"

    1
    将此列表中的示例替换为有效的 registry 主机名。

7.2.2.3. 使用 Web 控制台从容器磁盘创建虚拟机

您可以使用 OpenShift Container Platform web 控制台从容器 registry 中导入容器磁盘来创建虚拟机 (VM)。

流程

  1. 在 web 控制台中进入到 VirtualizationCatalog
  2. 点没有可用引导源的模板标题。
  3. Customize VirtualMachine
  4. Customize template parameters 页面中,展开 Storage,然后从 Disk source 列表中选择 Registry (creates PVC)
  5. 输入容器镜像 URL。示例:https://mirror.arizona.edu/fedora/linux/releases/38/Cloud/x86_64/images/Fedora-Cloud-Base-38-1.6.x86_64.qcow2
  6. 设置磁盘大小。
  7. 点击 Next
  8. Create VirtualMachine

7.2.2.4. 使用命令行从容器磁盘创建虚拟机

您可以使用命令行从容器磁盘创建虚拟机 (VM)。

创建虚拟机 (VM) 时,容器磁盘的数据卷将导入到持久性存储中。

先决条件

  • 您必须具有包含容器磁盘的容器 registry 的访问凭证。

流程

  1. 如果容器 registry 需要身份验证,请创建一个 Secret 清单,指定凭证,并将其保存为 data-source-secret.yaml 文件:

    apiVersion: v1
    kind: Secret
    metadata:
      name: data-source-secret
      labels:
        app: containerized-data-importer
    type: Opaque
    data:
      accessKeyId: "" 1
      secretKey:   "" 2
    1
    指定以 Base64 编码的密钥 ID 或用户名。
    2
    指定以 Base64 编码的 secret 密钥或密码。
  2. 运行以下命令来应用 Secret 清单:

    $ oc apply -f data-source-secret.yaml
  3. 如果虚拟机必须与没有由系统 CA 捆绑包签名的证书的服务器通信,请在与虚拟机相同的命名空间中创建一个配置映射:

    $ oc create configmap tls-certs 1
      --from-file=</path/to/file/ca.pem> 2
    1
    指定配置映射名称。
    2
    指定 CA 证书的路径。
  4. 编辑 VirtualMachine 清单,并将它保存为 vm-fedora-datavolume.yaml 文件:

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      creationTimestamp: null
      labels:
        kubevirt.io/vm: vm-fedora-datavolume
      name: vm-fedora-datavolume 1
    spec:
      dataVolumeTemplates:
      - metadata:
          creationTimestamp: null
          name: fedora-dv 2
        spec:
          storage:
            resources:
              requests:
                storage: 10Gi 3
            storageClassName: <storage_class> 4
          source:
            registry:
              url: "docker://kubevirt/fedora-cloud-container-disk-demo:latest" 5
              secretRef: data-source-secret 6
              certConfigMap: tls-certs 7
        status: {}
      running: true
      template:
        metadata:
          creationTimestamp: null
          labels:
            kubevirt.io/vm: vm-fedora-datavolume
        spec:
          domain:
            devices:
              disks:
              - disk:
                  bus: virtio
                name: datavolumedisk1
            machine:
              type: ""
            resources:
              requests:
                memory: 1.5Gi
          terminationGracePeriodSeconds: 180
          volumes:
          - dataVolume:
              name: fedora-dv
            name: datavolumedisk1
    status: {}
    1
    指定虚拟机的名称。
    2
    指定数据卷的名称。
    3
    指定为数据卷请求的存储大小。
    4
    可选:如果您没有指定存储类,则会使用默认存储类。
    5
    指定容器 registry 的 URL。
    6
    可选:如果您为容器 registry 访问凭证创建 secret,请指定 secret 名称。
    7
    可选:指定一个 CA 证书配置映射。
  5. 运行以下命令来创建虚拟机:

    $ oc create -f vm-fedora-datavolume.yaml

    oc create 命令创建数据卷和虚拟机。CDI 控制器创建一个带有正确注解和导入过程的底层 PVC。导入完成后,数据卷状态变为 Succeeded。您可以启动虚拟机。

    数据卷置备在后台进行,因此无需监控进程。

验证

  1. importer pod 从指定的 URL 下载容器磁盘,并将其存储在置备的持久性卷中。运行以下命令,查看 importer pod 的状态:

    $ oc get pods
  2. 运行以下命令监控数据卷,直到其状态为 Succeeded

    $ oc describe dv fedora-dv 1
    1
    指定您在 VirtualMachine 清单中定义的数据卷名称。
  3. 通过访问其串行控制台来验证置备是否已完成,以及虚拟机是否已启动:

    $ virtctl console vm-fedora-datavolume

7.2.3. 通过从网页导入镜像来创建虚拟机

您可以通过从 web 页面导入操作系统镜像来创建虚拟机 (VM)。

重要

您必须在从红帽提供的操作系统镜像创建的虚拟机上安装 QEMU 客户机代理

7.2.3.1. 使用 Web 控制台从网页上的镜像创建虚拟机

您可以使用 OpenShift Container Platform Web 控制台从网页导入镜像来创建虚拟机 (VM)。

先决条件

  • 您必须有权访问包含镜像的网页。

流程

  1. 在 web 控制台中进入到 VirtualizationCatalog
  2. 点没有可用引导源的模板标题。
  3. Customize VirtualMachine
  4. Customize template parameters 页面中,展开 Storage,然后从 Disk source 列表中选择 URL (creates PVC)
  5. 输入镜像 URL。示例:https://access.redhat.com/downloads/content/69/ver=/rhel---7/7.9/x86_64/product-software
  6. 输入容器镜像 URL。示例:https://mirror.arizona.edu/fedora/linux/releases/38/Cloud/x86_64/images/Fedora-Cloud-Base-38-1.6.x86_64.qcow2
  7. 设置磁盘大小。
  8. 点击 Next
  9. Create VirtualMachine

7.2.3.2. 使用命令行从网页上的镜像创建虚拟机

您可以使用命令行从网页中的镜像创建虚拟机 (VM)。

创建虚拟机 (VM) 时,带有镜像的数据卷将导入到持久性存储中。

先决条件

  • 您必须有包含镜像的网页的访问凭证。

流程

  1. 如果网页需要身份验证,请创建一个 Secret 清单,指定凭证,并将其保存为 data-source-secret.yaml 文件:

    apiVersion: v1
    kind: Secret
    metadata:
      name: data-source-secret
      labels:
        app: containerized-data-importer
    type: Opaque
    data:
      accessKeyId: "" 1
      secretKey:   "" 2
    1
    指定以 Base64 编码的密钥 ID 或用户名。
    2
    指定以 Base64 编码的 secret 密钥或密码。
  2. 运行以下命令来应用 Secret 清单:

    $ oc apply -f data-source-secret.yaml
  3. 如果虚拟机必须与没有由系统 CA 捆绑包签名的证书的服务器通信,请在与虚拟机相同的命名空间中创建一个配置映射:

    $ oc create configmap tls-certs 1
      --from-file=</path/to/file/ca.pem> 2
    1
    指定配置映射名称。
    2
    指定 CA 证书的路径。
  4. 编辑 VirtualMachine 清单,并将它保存为 vm-fedora-datavolume.yaml 文件:

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      creationTimestamp: null
      labels:
        kubevirt.io/vm: vm-fedora-datavolume
      name: vm-fedora-datavolume 1
    spec:
      dataVolumeTemplates:
      - metadata:
          creationTimestamp: null
          name: fedora-dv 2
        spec:
          storage:
            resources:
              requests:
                storage: 10Gi 3
            storageClassName: <storage_class> 4
          source:
            http:
              url: "https://mirror.arizona.edu/fedora/linux/releases/35/Cloud/x86_64/images/Fedora-Cloud-Base-35-1.2.x86_64.qcow2" 5
            registry:
              url: "docker://kubevirt/fedora-cloud-container-disk-demo:latest" 6
              secretRef: data-source-secret 7
              certConfigMap: tls-certs 8
        status: {}
      running: true
      template:
        metadata:
          creationTimestamp: null
          labels:
            kubevirt.io/vm: vm-fedora-datavolume
        spec:
          domain:
            devices:
              disks:
              - disk:
                  bus: virtio
                name: datavolumedisk1
            machine:
              type: ""
            resources:
              requests:
                memory: 1.5Gi
          terminationGracePeriodSeconds: 180
          volumes:
          - dataVolume:
              name: fedora-dv
            name: datavolumedisk1
    status: {}
    1
    指定虚拟机的名称。
    2
    指定数据卷的名称。
    3
    指定为数据卷请求的存储大小。
    4
    可选:如果您没有指定存储类,则会使用默认存储类。
    5 6
    指定网页的 URL。
    7
    可选:如果您为 Web 页面访问凭证创建了 secret,请指定 secret 名称。
    8
    可选:指定一个 CA 证书配置映射。
  5. 运行以下命令来创建虚拟机:

    $ oc create -f vm-fedora-datavolume.yaml

    oc create 命令创建数据卷和虚拟机。CDI 控制器创建一个带有正确注解和导入过程的底层 PVC。导入完成后,数据卷状态变为 Succeeded。您可以启动虚拟机。

    数据卷置备在后台进行,因此无需监控进程。

验证

  1. importer pod 从指定的 URL 下载镜像,并将其存储在置备的持久性卷上。运行以下命令,查看 importer pod 的状态:

    $ oc get pods
  2. 运行以下命令监控数据卷,直到其状态为 Succeeded

    $ oc describe dv fedora-dv 1
    1
    指定您在 VirtualMachine 清单中定义的数据卷名称。
  3. 通过访问其串行控制台来验证置备是否已完成,以及虚拟机是否已启动:

    $ virtctl console vm-fedora-datavolume

7.2.4. 通过上传镜像来创建虚拟机

您可以通过从本地机器上传操作系统镜像来创建虚拟机 (VM)。

您可以通过上传 Windows 镜像到 PVC 来创建 Windows 虚拟机。然后,在创建虚拟机时克隆 PVC。

重要

您必须在从红帽提供的操作系统镜像创建的虚拟机上安装 QEMU 客户机代理

您还必须在 Windows 虚拟机上安装 VirtIO 驱动程序

7.2.4.1. 使用 Web 控制台从上传的镜像创建虚拟机

您可以使用 OpenShift Container Platform web 控制台从上传的操作系统镜像创建虚拟机 (VM)。

先决条件

  • 您必须有一个 IMGISOQCOW2 镜像文件。

流程

  1. 在 web 控制台中进入到 VirtualizationCatalog
  2. 点没有可用引导源的模板标题。
  3. Customize VirtualMachine
  4. Customize template parameters 页面中,展开 Storage,然后从 Disk source 列表中选择 Upload (Upload a new file to a PVC)
  5. 浏览到本地机器上的镜像并设置磁盘大小。
  6. Customize VirtualMachine
  7. Create VirtualMachine

7.2.4.2. 创建 Windows 虚拟机

您可以通过上传 Windows 镜像到持久性卷声明 (PVC) 来创建 Windows 虚拟机,然后使用 OpenShift Container Platform web 控制台创建虚拟机时克隆 PVC。

先决条件

流程

  1. 将 Windows 镜像上传为新 PVC:

    1. 在 web 控制台中进入到 StoragePersistentVolumeClaims
    2. Create PersistentVolumeClaimWith Data upload form
    3. 浏览 Windows 镜像并选择它。
    4. 输入 PVC 名称,选择存储类和大小,然后点 Upload

      Windows 镜像上传到 PVC。

  2. 通过克隆上传的 PVC 来配置新虚拟机:

    1. 进入到 VirtualizationCatalog
    2. 选择 Windows 模板标题并点 Customize VirtualMachine
    3. Disk source 列表中选择 Clone (clone PVC)
    4. 选择 PVC 项目、Windows 镜像 PVC 和磁盘大小。
  3. 将回答文件应用到虚拟机:

    1. Customize VirtualMachine 参数
    2. Scripts 选项卡的 Sysprep 部分,点 Edit
    3. 浏览到 autounattend.xml 回答文件,然后点保存
  4. 设置虚拟机的 run 策略:

    1. 清除 Start this VirtualMachine after creation,以便虚拟机不会立即启动。
    2. Create VirtualMachine
    3. YAML 标签页中,将 running:false 替换为 runStrategy: RerunOnFailure,点 Save
  5. 点选项菜单 kebab 并选择 Start

    虚拟机从包含 autounattend.xml 回答文件的 sysprep 磁盘引导。

7.2.4.2.1. 常规化 Windows 虚拟机镜像

在使用镜像创建新虚拟机前,您可以常规化 Windows 操作系统镜像删除所有特定于系统的配置数据。

在常规调整虚拟机前,您必须确保 sysprep 工具在无人值守的 Windows 安装后无法检测到应答文件。

先决条件

  • 正在运行的 Windows 虚拟机安装有 QEMU 客户机代理。

流程

  1. 在 OpenShift Container Platform 控制台中点 VirtualizationVirtualMachines
  2. 选择 Windows 虚拟机以打开 VirtualMachine 详情页。
  3. ConfigurationDisks
  4. sysprep 磁盘 kebab 旁边的 Options 菜单并选择 Detach
  5. 单击 Detach
  6. 重命名 C:\Windows\Panther\unattend.xml 以避免 sysprep 工具对其进行检测。
  7. 运行以下命令启动 sysprep 程序:

    %WINDIR%\System32\Sysprep\sysprep.exe /generalize /shutdown /oobe /mode:vm
  8. sysprep 工具完成后,Windows 虚拟机将关闭。VM 的磁盘镜像现在可作为 Windows 虚拟机的安装镜像使用。

现在,您可以对虚拟机进行特殊化。

7.2.4.2.2. 特殊化 Windows 虚拟机镜像

特殊化 Windows 虚拟机 (VM) 配置从常规化 Windows 镜像到虚拟机中的计算机特定信息。

先决条件

  • 您必须有一个通用的 Windows 磁盘镜像。
  • 您必须创建一个 unattend.xml 回答文件。详情请查看 Microsoft 文档

流程

  1. 在 OpenShift Container Platform 控制台中点 VirtualizationCatalog
  2. 选择 Windows 模板并点 Customize VirtualMachine
  3. Disk source 列表中选择 PVC(clone PVC)。
  4. 选择通用 Windows 镜像的 PVC 项目和 PVC 名称。
  5. Customize VirtualMachine 参数
  6. Scripts 选项卡。
  7. Sysprep 部分中,点 Edit,浏览到 unattend.xml 回答文件,然后点保存
  8. Create VirtualMachine

在初次启动过程中,Windows 使用 unattend.xml 回答文件来专注于虚拟机。虚拟机现在可供使用。

7.2.4.3. 使用命令行从上传的镜像创建虚拟机

您可使用 virtctl 命令行工具上传操作系统镜像。您可以使用现有数据卷,或为镜像创建新数据卷。

先决条件

  • 您必须有一个 ISOIMGQCOW2 操作系统镜像文件。
  • 为获得最佳性能,请使用 virt-sparsify 工具或 xzgzip 工具压缩镜像文件。
  • 已安装 virtctl
  • 客户端机器必须配置为信任 OpenShift Container Platform 路由器的证书。

流程

  1. 运行 virtctl image-upload 命令上传镜像:

    $ virtctl image-upload dv <datavolume_name> \ 1
      --size=<datavolume_size> \ 2
      --image-path=</path/to/image> \ 3
    1
    数据卷的名称。
    2
    数据卷的大小。例如: --size=500Mi, --size=1G
    3
    镜像的文件路径。
    注意
    • 如果您不想创建新数据卷,请省略 --size 参数,并包含 --no-create 标志。
    • 将磁盘镜像上传到 PVC 时,PVC 大小必须大于未压缩的虚拟磁盘的大小。
    • 若要在使用 HTTPS 时允许不安全的服务器连接,请使用 --insecure 参数。当您使用 --insecure 标志时,不会验证上传端点的真实性。
  2. 可选。要验证数据卷是否已创建,运行以下命令来查看所有数据卷:

    $ oc get dvs

7.2.5. 安装 QEMU 客户机代理和 VirtIO 驱动程序

QEMU 客户机代理是在虚拟机 (VM) 上运行的守护进程,并将信息传递给有关虚拟机、用户、文件系统和从属网络的信息。

您必须在从红帽提供的操作系统镜像创建的虚拟机上安装 QEMU 客户机代理。

7.2.5.1. 安装 QEMU 客户机代理

7.2.5.1.1. 在 Linux 虚拟机上安装 QEMU 客户机代理

qemu-guest-agent 广泛可用,默认在 Red Hat Enterprise Linux (RHEL) 虚拟机 (VM) 中可用。安装代理并启动服务。

注意

要为具有最高完整性的在线(Running 状态)虚拟机创建快照,请安装 QEMU 客户机代理。

QEMU 客户机代理通过尝试静止虚拟机的文件系统来尽可能取一个一致的快照,具体取决于系统工作负载。这样可确保在进行快照前将 in-flight I/O 写入磁盘。如果没有客户机代理,则无法静止并生成最佳快照。执行快照的条件反映在 web 控制台或 CLI 中显示的快照声明中。

流程

  1. 使用控制台或 SSH 登录虚拟机。
  2. 运行以下命令来安装 QEMU 客户机代理:

    $ yum install -y qemu-guest-agent
  3. 确保服务持久并启动它:

    $ systemctl enable --now qemu-guest-agent

验证

  • 运行以下命令,以验证 AgentConnected 是否列在 VM spec 中:

    $ oc get vm <vm_name>
7.2.5.1.2. 在 Windows 虚拟机上安装 QEMU 客户机代理

对于 Windows 虚拟机,QEMU 客户机代理包含在 VirtIO 驱动程序中。您可以在 Windows 安装过程中或现有 Windows 虚拟机上安装驱动程序。

注意

要为具有最高完整性的在线(Running 状态)虚拟机创建快照,请安装 QEMU 客户机代理。

QEMU 客户机代理通过尝试静止虚拟机的文件系统来尽可能取一个一致的快照,具体取决于系统工作负载。这样可确保在进行快照前将 in-flight I/O 写入磁盘。如果没有客户机代理,则无法静止并生成最佳快照。执行快照的条件反映在 web 控制台或 CLI 中显示的快照声明中。

流程

  1. 在 Windows 客户机操作系统中,使用 File Explorer 进入到 virtio-win CD 驱动器中的 guest-agent 目录。
  2. 运行 qemu-ga-x86_64.msi 安装程序。

验证

  1. 运行以下命令来获取网络服务列表:

    $ net start
  2. 验证输出是否包含 QEMU 客户机代理

7.2.5.2. 在 Windows 虚拟机上安装 VirtIO 驱动程序

VirtIO 驱动程序是 Microsoft Windows 虚拟机在 OpenShift Virtualization 中运行时所需的半虚拟化设备驱动程序。驱动程序由其余镜像提供,不需要单独下载。

必须将 container-native-virtualization/virtio-win 容器磁盘作为 SATA CD 驱动器附加到虚拟机,以启用驱动程序安装。您可以在安装过程中安装 VirtIO 驱动程序,或添加到现有 Windows 安装中。

安装驱动程序后,可从虚拟机中移除 container-native-virtualization/virtio-win 容器磁盘。

表 7.3. 支持的驱动程序
驱动程序名称硬件 ID描述

viostor

VEN_1AF4&DEV_1001
VEN_1AF4&DEV_1042

块驱动程序。有时在 Other devices 组中被标记为 SCSI Controller

viorng

VEN_1AF4&DEV_1005
VEN_1AF4&DEV_1044

熵源(entropy)驱动程序。有时在 Other devices 组中被标记为 PCI 设备。

NetKVM

VEN_1AF4&DEV_1000
VEN_1AF4&DEV_1041

网络驱动程序。有时,在 Other devices 组中被标记为 Ethernet Controller。仅在配置了 VirtIO NIC 时可用。

7.2.5.2.1. 在安装过程中将 VirtIO 容器磁盘附加到 Windows 虚拟机

您必须将 VirtIO 容器磁盘附加到 Windows 虚拟机,以安装必要的 Windows 驱动程序。这可以在创建虚拟机时完成。

流程

  1. 从模板创建 Windows 虚拟机时,点 Customize VirtualMachine
  2. 选择 Mount Windows 驱动程序磁盘
  3. Customize VirtualMachine 参数
  4. Create VirtualMachine

创建虚拟机后,virtio-win SATA CD 磁盘将附加到虚拟机。

7.2.5.2.2. 将 VirtIO 容器磁盘附加到现有的 Windows 虚拟机

您必须将 VirtIO 容器磁盘附加到 Windows 虚拟机,以安装必要的 Windows 驱动程序。这可以对现有的虚拟机完成。

流程

  1. 导航到现有的 Windows 虚拟机,然后点 ActionsStop
  2. 进入 VM DetailsConfigurationDisks,然后点 Add disk
  3. 从容器源添加 windows-driver-disk,将 Type 设置为 CD-ROM,然后将 Interface 设置为 SATA
  4. 点击 Save
  5. 启动虚拟机并连接到图形控制台。
7.2.5.2.3. 在 Windows 安装过程中安装 VirtIO 驱动程序

您可以在虚拟机 (VM) 上安装 Windows 时安装 VirtIO 驱动程序。

注意

该流程使用通用方法安装 Windows,且安装方法可能因 Windows 版本而异。有关您要安装的 Windows 版本,请参阅相关文档。

先决条件

  • 包含 virtio 驱动程序的存储设备必须附加到虚拟机。

流程

  1. 在 Windows 操作系统中,使用 File Explorer 进入到 virtio-win CD 驱动器。
  2. 双击该驱动器为您的虚拟机运行适当的安装程序。

    对于 64 位 vCPU,请选择 virtio-win-gt-x64 安装程序。不再支持 32 位 vCPU。

  3. 可选:在安装程序的 Custom Setup 步骤中,选择您要安装的设备驱动程序。推荐的驱动程序集会被默认选择。
  4. 安装完成后,选择 Finish
  5. 重启虚拟机。

验证

  1. 在 PC 上打开系统磁盘。这通常是 C:
  2. 进入到 Program FilesVirtio-Win

如果 Virtio-Win 目录存在并包含每个驱动程序的子目录,则安装可以成功。

7.2.5.2.4. 在现有 Windows 虚拟机上从 SATA CD 驱动器安装 VirtIO 驱动程序

您可以从现有 Windows 虚拟机(VM)上的 SATA CD 驱动器安装 VirtIO 驱动程序。

注意

该流程使用通用方法为 Windows 添加驱动。有关具体安装步骤,请参阅您的 Windows 版本安装文档。

先决条件

  • 包含 virtio 驱动程序的存储设备必须作为 SATA CD 驱动器附加到虚拟机。

流程

  1. 启动虚拟机并连接到图形控制台。
  2. 登录 Windows 用户会话。
  3. 打开 Device Manager 并展开 Other devices 以列出所有 Unknown device

    1. 打开 Device Properties 以识别未知设备。
    2. 右击设备并选择 Properties
    3. 单击 Details 选项卡,并在 Property 列表中选择 Hardware Ids
    4. Hardware IdsValue 与受支持的 VirtIO 驱动程序相比较。
  4. 右击设备并选择 Update Driver Software
  5. 点击 Browse my computer for driver software 并浏览所附加的 VirtIO 驱动程序所在 SATA CD 驱动器。驱动程序将按照其驱动程序类型、操作系统和 CPU 架构分层排列。
  6. 点击 Next 以安装驱动程序。
  7. 对所有必要 VirtIO 驱动程序重复这一过程。
  8. 安装完驱动程序后,点击 Close 关闭窗口。
  9. 重启虚拟机以完成驱动程序安装。
7.2.5.2.5. 从添加为 SATA CD 驱动器的容器磁盘安装 VirtIO 驱动程序

您可以从作为 SATA CD 驱动器添加到 Windows 虚拟机(VM)的容器磁盘中安装 VirtIO 驱动程序。

提示

从红帽生态系统目录 下载 container-native-virtualization/virtio-win 容器磁盘不是必须的,因为如果集群中不存在容器磁盘,则会从红帽 registry 下载容器磁盘。但是,下载可减少安装时间。

先决条件

  • 您必须在受限环境中访问红帽 registry 或下载的 container-native-virtualization/virtio-win 容器磁盘。

流程

  1. 通过编辑 VirtualMachine 清单将 container-native-virtualization/virtio-win 容器磁盘添加为 CD 驱动器:

    # ...
    spec:
      domain:
        devices:
          disks:
            - name: virtiocontainerdisk
              bootOrder: 2 1
              cdrom:
                bus: sata
    volumes:
      - containerDisk:
          image: container-native-virtualization/virtio-win
        name: virtiocontainerdisk
    1
    OpenShift Virtualization 按照 VirtualMachine 清单中定义的顺序引导虚拟机磁盘。您可以定义在 container-native-virtualization/virtio-win 容器磁盘前引导的其他虚拟机磁盘,或使用可选的 bootOrder 参数来确保虚拟机从正确的磁盘启动。如果为磁盘配置引导顺序,您必须为其他磁盘配置引导顺序。
  2. 应用更改:

    • 如果虚拟机没有运行,请运行以下命令:

      $ virtctl start <vm> -n <namespace>
    • 如果虚拟机正在运行,重启虚拟机或运行以下命令:

      $ oc apply -f <vm.yaml>
  3. 虚拟机启动后,从 SATA CD 驱动器安装 VirtIO 驱动程序。

7.2.5.3. 更新 VirtIO 驱动程序

7.2.5.3.1. 更新 Windows 虚拟机上的 VirtIO 驱动程序

使用 Windows Update 服务更新 Windows 虚拟机(VM)上的 virtio 驱动程序。

先决条件

  • 集群必须连接到互联网。断开连接的集群无法访问 Windows Update 服务。

流程

  1. 在 Windows Guest 操作系统中,点 Windows 密钥并选择 Settings
  2. 进入到 Windows UpdateAdvanced OptionsOptional Updates
  3. 安装 Red Hat, Inc. 的所有更新。
  4. 重启虚拟机。

验证

  1. 在 Windows 虚拟机上,进入到 设备管理器
  2. 选择一个设备。
  3. 选择 Driver 选项卡。
  4. Driver Details,并确认 virtio 驱动程序详情显示了正确的版本。

7.2.6. 克隆虚拟机

您可以克隆虚拟机(VM)或从快照创建新虚拟机。

7.2.6.1. 使用 Web 控制台克隆虚拟机

您可以使用 Web 控制台克隆现有虚拟机。

流程

  1. 在 web 控制台中进入到 VirtualizationVirtualMachines
  2. 选择一个虚拟机以打开 VirtualMachine 详情页。
  3. Actions
  4. 选择 Clone
  5. Clone VirtualMachine 页面中,输入新虚拟机的名称。
  6. (可选)选择 Start cloned VM 复选框来启动克隆的虚拟机。
  7. 单击 Clone

7.2.6.2. 使用 Web 控制台从现有快照创建虚拟机

您可以通过复制现有快照来创建新虚拟机。

流程

  1. 在 web 控制台中进入到 VirtualizationVirtualMachines
  2. 选择一个虚拟机以打开 VirtualMachine 详情页。
  3. Snapshots 标签页。
  4. 对于您要复制的快照,点操作菜单 kebab
  5. 选择 Create VirtualMachine
  6. 输入虚拟机的名称。
  7. (可选)选择 Start this VirtualMachine after creation 来启动新的虚拟机。
  8. Create

7.2.6.3. 其他资源

7.2.7. 通过克隆 PVC 创建虚拟机

您可以通过使用自定义镜像克隆现有持久性卷声明 (PVC) 来创建虚拟机 (VM)。

您必须在从红帽提供的操作系统镜像创建的虚拟机上安装 QEMU 客户机代理

您可以通过创建一个引用源 PVC 的数据卷来克隆 PVC。

7.2.7.1. 关于克隆

在克隆数据卷时,Containerized Data Importer (CDI)选择以下 Container Storage Interface (CSI)克隆方法之一:

  • CSI 卷克隆
  • 智能克隆

CSI 卷克隆和智能克隆方法都非常高效,但使用它们会有一定的要求。如果没有满足要求,CDI 将使用主机辅助克隆。主机辅助克隆是最慢且效率最低的克隆方法,但使用它的要求比其它两种克隆方法要少。

7.2.7.1.1. CSI 卷克隆

Container Storage Interface (CSI) 克隆使用 CSI 驱动程序功能更有效地克隆源数据卷。

CSI 卷克隆有以下要求:

  • 支持持久性卷声明(PVC)的存储类的 CSI 驱动程序必须支持卷克隆。
  • 对于 CDI 无法识别的置备程序,对应的存储配置集必须将 cloneStrategy 设置为 CSI Volume Cloning。
  • 源和目标 PVC 必须具有相同的存储类和卷模式。
  • 如果创建数据卷,则必须有在源命名空间中创建 datavolumes/source 资源的权限。
  • 源卷不能在使用中。
7.2.7.1.2. 智能克隆

当有快照功能的 Container Storage Interface (CSI) 插件时,Containerized Data Importer (CDI) 会从快照创建一个持久性卷声明 (PVC),然后允许有效地克隆额外的 PVC。

智能克隆有以下要求:

  • 与存储类关联的快照类必须存在。
  • 源和目标 PVC 必须具有相同的存储类和卷模式。
  • 如果创建数据卷,则必须有在源命名空间中创建 datavolumes/source 资源的权限。
  • 源卷不能在使用中。
7.2.7.1.3. 主机辅助克隆

当没有满足 Container Storage Interface (CSI) 卷克隆或智能克隆的要求时,主机辅助克隆将用作回退方法。主机辅助克隆比其他两个克隆方法之一更高效。

主机辅助克隆使用源 pod 和目标 pod 将数据从源卷复制到目标卷。目标持久性卷声明 (PVC) 使用回退原因标注,该原因解释了使用主机辅助克隆的原因,并创建事件。

PVC 目标注解示例

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  annotations:
    cdi.kubevirt.io/cloneFallbackReason: The volume modes of source and target are incompatible
    cdi.kubevirt.io/clonePhase: Succeeded
    cdi.kubevirt.io/cloneType: copy

事件示例

NAMESPACE   LAST SEEN   TYPE      REASON                    OBJECT                              MESSAGE
test-ns     0s          Warning   IncompatibleVolumeModes   persistentvolumeclaim/test-target   The volume modes of source and target are incompatible

7.2.7.2. 使用 Web 控制台从 PVC 创建虚拟机

您可以使用 OpenShift Container Platform Web 控制台从网页导入镜像来创建虚拟机 (VM)。您可以使用 OpenShift Container Platform web 控制台克隆持久性卷声明 (PVC) 来创建虚拟机 (VM)。

先决条件

  • 您必须有权访问包含镜像的网页。
  • 您必须有权访问包含源 PVC 的命名空间。

流程

  1. 在 web 控制台中进入到 VirtualizationCatalog
  2. 点没有可用引导源的模板标题。
  3. Customize VirtualMachine
  4. Customize template parameters 页面中,展开 Storage,然后从 Disk source 列表中选择 PVC (clone PVC)
  5. 输入镜像 URL。示例:https://access.redhat.com/downloads/content/69/ver=/rhel---7/7.9/x86_64/product-software
  6. 输入容器镜像 URL。示例:https://mirror.arizona.edu/fedora/linux/releases/38/Cloud/x86_64/images/Fedora-Cloud-Base-38-1.6.x86_64.qcow2
  7. 选择 PVC 项目和 PVC 名称。
  8. 设置磁盘大小。
  9. 点击 Next
  10. Create VirtualMachine

7.2.7.3. 使用命令行从 PVC 创建虚拟机

您可以使用命令行克隆现有虚拟机的持久性卷声明 (PVC) 来创建虚拟机 (VM)。

您可以使用以下选项之一克隆 PVC:

  • 将 PVC 克隆到新数据卷中。

    这个方法会创建一个独立于原始虚拟机的数据卷。删除原始虚拟机不会影响新数据卷或者关联的 PVC。

  • 通过使用 dataVolumeTemplates 小节创建 VirtualMachine 清单来克隆 PVC。

    这个方法会创建一个数据卷,其生命周期取决于原始虚拟机。删除原始虚拟机会删除克隆的数据卷及其关联的 PVC。

7.2.7.3.1. 将 PVC 克隆到数据卷中

您可以使用命令行将现有虚拟机 (VM) 磁盘的持久性卷声明 (PVC) 克隆到数据卷中。

您可以创建一个引用原始源 PVC 的数据卷。新数据卷的生命周期独立于原始虚拟机。删除原始虚拟机不会影响新数据卷或者关联的 PVC。

主机辅助克隆支持在不同卷模式间进行克隆,如从块持久性卷 (PV) 克隆到文件系统 PV,只要源和目标 PV 属于 kubevirt 内容类型。

注意

智能克隆比主机辅助克隆更快、效率更高,因为它使用快照克隆 PVC。支持快照的存储供应商支持智能克隆,如 Red Hat OpenShift Data Foundation。

对于智能克隆,不支持在不同卷模式间进行克隆。

先决条件

  • 带有源 PVC 的虚拟机必须被关闭。
  • 如果将 PVC 克隆到不同的命名空间中,则必须具有在目标命名空间中创建资源的权限。
  • smart-cloning 的额外先决条件:

    • 您的存储供应商必须支持快照。
    • 源和目标 PVC 必须具有相同的存储供应商和卷模式。
    • VolumeSnapshotClass 对象的 driver 键的值必须与 StorageClass 对象的 provisioner 键的值匹配,如下例所示:

      VolumeSnapshotClass 对象示例

      kind: VolumeSnapshotClass
      apiVersion: snapshot.storage.k8s.io/v1
      driver: openshift-storage.rbd.csi.ceph.com
      # ...

      StorageClass 对象示例

      kind: StorageClass
      apiVersion: storage.k8s.io/v1
      # ...
      provisioner: openshift-storage.rbd.csi.ceph.com

流程

  1. 如以下示例所示创建 DataVolume 清单:

    apiVersion: cdi.kubevirt.io/v1beta1
    kind: DataVolume
    metadata:
      name: <datavolume> 1
    spec:
      source:
        pvc:
          namespace: "<source_namespace>" 2
          name: "<my_vm_disk>" 3
      storage: {}
    1
    指定新数据卷的名称。
    2
    指定源 PVC 的命名空间。
    3
    指定源 PVC 的名称。
  2. 运行以下命令来创建数据卷:

    $ oc create -f <datavolume>.yaml
    注意

    数据卷可防止虚拟机在 PVC 准备好前启动。您可以创建一个在克隆 PVC 时引用新数据卷的虚拟机。

7.2.7.3.2. 使用数据卷模板从克隆的 PVC 创建虚拟机

您可以创建一个虚拟机 (VM) 来使用数据卷模板克隆现有虚拟机的持久性卷声明 (PVC)。

这个方法会创建一个数据卷,其生命周期取决于原始虚拟机。删除原始虚拟机会删除克隆的数据卷及其关联的 PVC。

先决条件

  • 带有源 PVC 的虚拟机必须被关闭。

流程

  1. 如以下示例所示,创建一个 VirtualMachine 清单:

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      labels:
        kubevirt.io/vm: vm-dv-clone
      name: vm-dv-clone 1
    spec:
      running: false
      template:
        metadata:
          labels:
            kubevirt.io/vm: vm-dv-clone
        spec:
          domain:
            devices:
              disks:
              - disk:
                  bus: virtio
                name: root-disk
            resources:
              requests:
                memory: 64M
          volumes:
          - dataVolume:
              name: favorite-clone
            name: root-disk
      dataVolumeTemplates:
      - metadata:
          name: favorite-clone
        spec:
          storage:
            accessModes:
            - ReadWriteOnce
            resources:
              requests:
                storage: 2Gi
          source:
            pvc:
              namespace: <source_namespace> 2
              name: "<source_pvc>" 3
    1
    指定虚拟机的名称。
    2
    指定源 PVC 的命名空间。
    3
    指定源 PVC 的名称。
  2. 使用 PVC 克隆的数据卷创建虚拟机:

    $ oc create -f <vm-clone-datavolumetemplate>.yaml

7.3. 连接到虚拟机控制台

您可以连接到以下控制台来访问正在运行的虚拟机 (VM):

7.3.1. 连接至 VNC 控制台

您可以使用 OpenShift Container Platform web 控制台或 virtctl 命令行工具连接到虚拟机的 VNC 控制台。

7.3.1.1. 使用 Web 控制台连接到 VNC 控制台

您可以使用 OpenShift Container Platform Web 控制台连接至虚拟机的 VNC 控制台。

注意

如果您使用分配了介质设备的 vGPU 连接到 Windows 虚拟机,您可以在默认显示和 vGPU 显示间切换。

流程

  1. VirtualizationVirtualMachines 页面中,点虚拟机打开 VirtualMachine 详情页。
  2. 点击 Console 选项卡。VNC 控制台会话会自动启动。
  3. 可选: 要切换到 Windows 虚拟机的 vGPU 显示,请从 Send key 列表中选择 Ctl + Alt + 2

    • Send key 列表中选择 Ctl + Alt + 1 以恢复默认显示。
  4. 要结束控制台会话,请点控制台窗格外,然后点 Disconnect

7.3.1.2. 使用 virtctl 连接到 VNC 控制台

您可使用 virtctl 命令行工具连接到正在运行的虚拟机的 VNC 控制台。

注意

如果您通过 SSH 连接在远程机器上运行 virtctl vnc 命令,则必须使用 -X-Y 标志运行 ssh 命令,将 X 会话转发到本地机器。

先决条件

  • 您必须安装 virt-viewer 软件包。

流程

  1. 运行以下命令以启动控制台会话:

    $ virtctl vnc <vm_name>
  2. 如果连接失败,请运行以下命令来收集故障排除信息:

    $ virtctl vnc <vm_name> -v 4

7.3.1.3. 为 VNC 控制台生成临时令牌

为 Kubernetes API 生成临时身份验证 bearer 令牌,以访问虚拟机的 VNC。

注意

Kubernetes 还支持通过修改 curl 命令来使用客户端证书进行身份验证,而不是 bearer 令牌。

先决条件

  • 使用 OpenShift Virtualization 4.14 或更高版本和 ssp-operator 4.14 或更高版本的虚拟机

流程

  1. 在 HyperConverged (HCO)自定义资源(CR)中启用功能门:

    $ oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv --type json -p '[{"op": "replace", "path": "/spec/featureGates/deployVmConsoleProxy", "value": true}]'
  2. 运行以下命令来生成令牌:

    $ curl --header "Authorization: Bearer ${TOKEN}" \
         "https://api.<cluster_fqdn>/apis/token.kubevirt.io/v1alpha1/namespaces/<namespace>/virtualmachines/<vm_name>/vnc?duration=<duration>" 1
    1
    持续时间可能以小时和分钟为单位,最小持续时间为 10 分钟。示例: 5h30m.如果没有设置此参数,则令牌默认有效 10 分钟。

    输出示例:

    { "token": "eyJhb..." }
  3. 可选:使用输出中提供的令牌来创建变量:

    $ export VNC_TOKEN="<token>"

现在,您可以使用令牌来访问虚拟机的 VNC 控制台。

验证

  1. 运行以下命令登录到集群:

    $ oc login --token ${VNC_TOKEN}
  2. 运行以下命令,使用 virtctl 测试对虚拟机的 VNC 控制台的访问:

    $ virtctl vnc <vm_name> -n <namespace>

7.3.2. 连接至串行控制台

您可以使用 OpenShift Container Platform web 控制台或 virtctl 命令行工具连接到虚拟机的串行控制台。

注意

目前不支持运行到单个虚拟机的并发 VNC 连接。

7.3.2.1. 使用 Web 控制台连接到串行控制台

您可以使用 OpenShift Container Platform web 控制台连接至虚拟机的串行控制台。

流程

  1. VirtualizationVirtualMachines 页面中,点虚拟机打开 VirtualMachine 详情页。
  2. 点击 Console 选项卡。VNC 控制台会话会自动启动。
  3. Disconnect 结束 VNC 控制台会话。否则,VNC 控制台会话会在后台继续运行。
  4. 从控制台列表中选择 Serial console
  5. 要结束控制台会话,请点控制台窗格外,然后点 Disconnect

7.3.2.2. 使用 virtctl 连接到串行控制台

您可使用 virtctl 命令行工具连接到正在运行的虚拟机的串行控制台。

流程

  1. 运行以下命令以启动控制台会话:

    $ virtctl console <vm_name>
  2. Ctrl+] 结束控制台会话。

7.3.3. 连接到桌面视图

您可以使用 desktop viewer 和 Remote Desktop Protocol (RDP) 连接到 Windows 虚拟机。

7.3.3.1. 使用 Web 控制台连接到桌面查看器

您可以使用 OpenShift Container Platform Web 控制台连接到 Windows 虚拟机的桌面视图。

先决条件

  • 您已在 Windows 虚拟机上安装了 QEMU 客户机代理。
  • 已安装 RDP 客户端。

流程

  1. VirtualizationVirtualMachines 页面中,点虚拟机打开 VirtualMachine 详情页。
  2. 点击 Console 选项卡。VNC 控制台会话会自动启动。
  3. Disconnect 结束 VNC 控制台会话。否则,VNC 控制台会话会在后台继续运行。
  4. 从控制台列表中选择 Desktop viewer
  5. Create RDP Service 打开 RDP Service 对话框。
  6. 选择 Expose RDP Service 并点 Save 创建节点端口服务。
  7. Launch Remote Desktop 以下载 .rdp 文件并启动桌面查看器。

7.4. 配置对虚拟机的 SSH 访问

您可以使用以下方法配置对虚拟机的 SSH 访问:

  • virtctl ssh 命令

    您可以创建一个 SSH 密钥对,将公钥添加到虚拟机,并使用私钥运行 virtctl ssh 命令连接到虚拟机。

    您可以在运行时将公共 SSH 密钥添加到 Red Hat Enterprise Linux (RHEL) 9 虚拟机,或第一次引导到使用 cloud-init 数据源配置的客户机操作系统的虚拟机。

  • virtctl port-forward 命令

    您可以将 virtctl port-foward 命令添加到 .ssh/config 文件中,并使用 OpenSSH 连接到虚拟机。

  • 服务

    您可以创建一个服务,将服务与虚拟机关联,并连接到该服务公开的 IP 地址和端口。

  • 二级网络

    您可以配置二级网络,将虚拟机(VM)附加到二级网络接口,并连接到 DHCP 分配的 IP 地址。

7.4.1. 访问配置注意事项

根据流量负载和客户端要求,配置对虚拟机(VM)的访问的每个方法都有优点和限制。

服务为从集群外部访问的应用程序提供出色的性能,并推荐使用。

如果内部集群网络无法处理流量负载,您可以配置二级网络。

virtctl sshvirtctl port-forwarding 命令
  • 易于配置。
  • 建议对虚拟机进行故障排除。
  • 推荐使用 Ansible 自动配置虚拟机的 virtctl port-forwarding
  • 动态公共 SSH 密钥可用于使用 Ansible 调配虚拟机。
  • 因为 API 服务器的负担,不建议用于 Rsync 或 Remote Desktop Protocol 等高流量应用程序。
  • API 服务器必须能够处理流量负载。
  • 客户端必须能够访问 API 服务器。
  • 客户端必须具有集群的访问凭证。
集群 I