虚拟化
OpenShift Virtualization 安装、使用和发行注记
摘要
第 1 章 关于 复制链接链接已复制到粘贴板!
1.1. 关于 OpenShift virtualization 复制链接链接已复制到粘贴板!
OpenShift Virtualization 的功能与支持范围。
1.1.1. OpenShift Virtualization 的作用 复制链接链接已复制到粘贴板!
OpenShift Virtualization 在 Red Hat OpenShift 中提供了可扩展的企业级虚拟化功能。您可以使用它来专门管理虚拟机(VM),或同时管理容器工作负载和虚拟机。
如果您有 Red Hat OpenShift Virtualization Engine 订阅,可以在订阅的主机上运行无限台虚拟机,但不能在容器中运行应用程序实例。如需更多信息,请参阅 Red Hat OpenShift Virtualization Engine 和相关产品的订阅指南部分。
OpenShift Virtualization 通过使用 Kubernetes 自定义资源将新对象添加至 OpenShift Container Platform 集群中,以启用虚拟化任务。这些任务包括:
- 创建和管理 Linux 和 Windows 虚拟机
- 在集群中运行 pod 和虚拟机工作负载
- 通过各种控制台和 CLI 工具连接至虚拟机
- 导入和克隆现有虚拟机
- 管理附加到虚拟机的网络接口控制器和存储磁盘
- 在节点间实时迁移虚拟机
您可以使用 OpenShift Container Platform Web 控制台的 Virtualization 视角并使用 OpenShift CLI (oc)来管理集群和虚拟化资源。
OpenShift Virtualization 被设计为与 Red Hat OpenShift Data Foundation 功能配合工作,并经过了相关的测试。
在部署带有 OpenShift Data Foundation 的 OpenShift Virtualization 时,您必须为 Windows 虚拟机磁盘创建一个专用存储类。详情请参阅为 Windows 虚拟机优化 ODF PersistentVolume。
您可以将 OpenShift Virtualization 与 OVN-Kubernetes 搭配使用,或 认证的 OpenShift CNI 插件中列出的其他认证网络插件。
您可以通过安装 Compliance Operator 并运行带有 ocp4-moderate 和 ocp4-moderate-node 配置集的扫描来检查您的 OpenShift Virtualization 集群的合规性。Compliance Operator 使用 NIST 认证的工具 OpenSCAP 来扫描并执行安全策略。
有关与独立软件供应商(ISV)和服务合作伙伴合作以进行特殊存储、网络、备份和其他功能的信息,请参阅 红帽生态系统目录。
1.1.2. OpenShift Virtualization 与 VMware vSphere 的比较 复制链接链接已复制到粘贴板!
如果您熟悉 VMware vSphere,下表列出了可用于完成类似任务的 OpenShift Virtualization 组件。但是,因为 OpenShift Virtualization 在概念上与 vSphere 不同,它的许多功能都来自底层的 OpenShift Container Platform,所以 OpenShift Virtualization 并没有对所有 vSphere 概念或组件提供直接的替代方案。
| vSphere 概念 | OpenShift Virtualization | 解释 |
|---|---|---|
| Datastore(数据存储) |
持久性卷 (PV) + |
存储虚拟机磁盘。PV 代表现有存储,它通过 PVC 附加到虚拟机。当使用 |
| 动态资源调度 (DRS) |
Pod 驱除策略 + | 提供主动资源平衡。将 pod 驱除策略和 descheduler 相结合,允许将虚拟机实时迁移到更合适的节点,以保持节点资源利用率的可管理性。 |
| NSX |
Multus + | 提供覆盖网络配置。OpenShift Virtualization 中没有与 NSX 直接对应的部分,但您可以使用 OVN-Kubernetes 网络供应商或安装经认证的第三方 CNI 插件。 |
| 基于存储策略的管理(SPBM) | Storage class(存储类) | 提供基于策略的存储选择。存储类代表不同的存储类型并描述了存储功能,如服务质量、备份策略、重新声明策略以及是否允许卷扩展。PVC 可以请求一个特定的存储类来满足应用程序要求。 |
|
vCenter | OpenShift Metrics 和 Monitoring | 提供主机和虚拟机指标。您可以使用 OpenShift Container Platform Web 控制台查看指标并监控集群和虚拟机的整体健康状况。 |
| vMotion | Live migration(实时迁移) |
在不中断正常运行的情况下将正在运行的虚拟机移到另一节点。为了可以使用实时迁移,附加到虚拟机的 PVC 必须具有 |
|
vSwitch |
NMState Operator + | 提供物理网络配置。您可以使用 NMState Operator 来应用状态驱动的网络配置,并管理各种网络接口类型,包括 Linux 网桥和网络绑定。通过 Multus,您可以附加多个网络接口,并将虚拟机连接到外部网络。 |
1.1.3. OpenShift Virtualization 支持的集群版本 复制链接链接已复制到粘贴板!
OpenShift Virtualization 4.17 的最新稳定版本为 4.17.33。
支持在 OpenShift Container Platform 4.17 集群中使用 OpenShift Virtualization 4.17。要使用 OpenShift Virtualization 的最新 z-stream 版本,您需要首先升级到 OpenShift Container Platform 的最新版本。
1.1.4. 关于虚拟机磁盘的卷和访问模式 复制链接链接已复制到粘贴板!
如果您将存储 API 与已知的存储供应商搭配使用,则会自动选择卷和访问模式。但是,如果您使用没有存储配置集的存储类,则需要配置卷和访问模式。
如需 OpenShift Virtualization 的已知存储供应商列表,请参阅 红帽生态系统目录。
要获得最佳结果,请使用 ReadWriteMany (RWX) 访问模式和 Block 卷模式。因为以下原因,这一点非常重要:
-
实时迁移需要
ReadWriteMany(RWX) 访问模式。 Block卷模式的性能优于Filesystem卷模式。这是因为Filesystem卷模式会使用更多存储层,包括文件系统层和磁盘镜像文件。对于虚拟机磁盘存储,并不需要这些层。例如,如果您使用 Red Hat OpenShift Data Foundation,首选使用 Ceph RBD 而不是 CephFS 卷。
您不能实时迁移带有以下配置的虚拟机:
-
具有
ReadWriteOnce(RWO) 访问模式的存储卷 - 具有透传功能,比如 GPU
对于这些虚拟机,将 evictionStrategy 字段设置为 None。None 策略会在节点重启过程中关闭虚拟机。
1.1.5. 单节点 Openshift 的不同 复制链接链接已复制到粘贴板!
您可以在单节点 OpenShift 上安装 OpenShift Virtualization。
但请注意,单节点 OpenShift 不支持以下功能:
- 高可用性
- Pod disruption
- Live migration(实时迁移)
- 配置了驱除策略的虚拟机或模板
1.2. 支持的限制 复制链接链接已复制到粘贴板!
您可以在为 OpenShift Virtualization 规划 OpenShift Container Platform 环境时引用测试的对象最大值。但是,接近最大值可以降低性能并增加延迟。确保您的计划适用于您的特定用例,并考虑可能会影响集群扩展的所有因素。
有关影响性能的集群配置和选项的更多信息,请参阅红帽知识库中的 OpenShift Virtualization - 调优和扩展指南。
1.2.1. 为 OpenShift Virtualization 测试的最大值 复制链接链接已复制到粘贴板!
以下限制适用于大规模 OpenShift Virtualization 4.x 环境。它们基于最大可能大小的单一集群。在计划环境时,请记住多个较小的集群可能是您的用例的最佳选择。
1.2.1.1. 虚拟机最大值 复制链接链接已复制到粘贴板!
以下最大值适用于 OpenShift Virtualization 上运行的虚拟机 (VM)。这些值取决于使用 KVM 的 Red Hat Enterprise Linux 的虚拟化限制中指定的限制。
| 目标(每个虚拟机) | 经过测试的限制 | 理论上的限制 |
|---|---|---|
| 虚拟 CPU | 216 个 vCPU | 255 个 vCPU |
| 内存 | 6 TB | 16 TB |
| 单个磁盘大小 | 20 TB | 100 TB |
| 热插磁盘 | 255 个磁盘 | N/A |
每个虚拟机必须具有至少 512 MB 内存。
1.2.1.2. 主机最大值 复制链接链接已复制到粘贴板!
以下最大值适用于用于 OpenShift Virtualization 的 OpenShift Container Platform 主机。
| 目标(每个主机) | 经过测试的限制 | 理论上的限制 |
|---|---|---|
| 逻辑 CPU 内核或线程 | 与 Red Hat Enterprise Linux (RHEL) 相同 | N/A |
| RAM | 与 RHEL 相同 | N/A |
| 同时实时迁移 | 默认为每个节点 2 个出站迁移,每个集群 5 个并发迁移 | 取决于 NIC 带宽 |
| 实时迁移带宽 | 没有默认限制 | 取决于 NIC 带宽 |
1.2.1.3. 集群最大限制 复制链接链接已复制到粘贴板!
以下最大值应用到 OpenShift Virtualization 中定义的对象。
| 目标(每个集群) | 经过测试的限制 | 理论上的限制 |
|---|---|---|
| 每个节点附加的 PV 数量 | N/A | CSI 存储供应商依赖 |
| 最大 PV 大小 | N/A | CSI 存储供应商依赖 |
| 主机 | 500 个主机(推荐使用 100 个或更少)[1] | 与 OpenShift Container Platform 相同 |
| 定义的虚拟机 | 10,000 个 VM [2] | 与 OpenShift Container Platform 相同 |
如果使用超过 100 个节点,请考虑使用 Red Hat Advanced Cluster Management (RHACM) 来管理多个集群,而不是扩展单个 control plane。较大的集群增加了复杂性,需要更长的更新,并根据节点大小和对象密度增加,它们可以增加 control plane 压力。
使用多个集群对于如按集群隔离和高可用性等区域很有用。
每个节点的最大虚拟机数量取决于主机硬件和资源容量。它还受以下参数的限制:
-
限制可调度到节点的 pod 数量的设置。例如:
maxPods。 -
默认 KVM 设备数。例如:
devices.kubevirt.io/kvm: 1k。
-
限制可调度到节点的 pod 数量的设置。例如:
1.3. 安全策略 复制链接链接已复制到粘贴板!
了解 OpenShift Virtualization 安全和授权。
关键点
-
OpenShift Virtualization 遵循
restrictedKubernetes pod security standards 配置集,旨在强制实施 Pod 安全性的当前最佳实践。 - 虚拟机 (VM) 工作负载作为非特权 pod 运行。
-
为
kubevirt-controller服务帐户定义 安全性上下文约束 (SCC)。 - OpenShift Virtualization 组件的 TLS 证书会被更新并自动轮转。
1.3.1. 关于工作负载安全性 复制链接链接已复制到粘贴板!
默认情况下,虚拟机 (VM) 工作负载在 OpenShift Virtualization 中不会使用 root 权限运行,且支持的 OpenShift Virtualization 功能都不需要 root 权限。
对于每个虚拟机,都会有一个 virt-launcher pod,它以会话模式(session mode)运行一个 libvirt 实例,用于管理 VM 进程。在会话模式中,libvirt 守护进程是以非 root 用户帐户运行的,它只允许来自使用同一用户标识符 (UID) 运行的客户端的连接。这样,虚拟机就可以作为非特权 pod 运行,遵循了最小特权的安全原则。
1.3.2. TLS 证书 复制链接链接已复制到粘贴板!
OpenShift Virtualization 组件的 TLS 证书会被自动更新并轮转。您不需要手动刷新它们。
自动续订调度
TLS 证书会根据以下调度被自动删除并替换:
- KubeVirt 证书每天都会被更新。
- Containerized Data Importer controller (CDI) 证书每 15 天更新一次。
- MAC 池证书每年更新一次。
自动 TLS 证书轮转不会影响任何操作。例如,以下操作可在没有任何中断的情况下继续工作:
- 迁移
- 镜像上传
- VNC 和控制台连接
1.3.3. 授权 复制链接链接已复制到粘贴板!
OpenShift Virtualization 使用基于角色的访问控制 (RBAC )为人类用户和服务帐户定义权限。为服务帐户定义的权限用于控制 OpenShift Virtualization 组件可以执行的操作。
您还可以使用 RBAC 角色来管理用户对虚拟化功能的访问。例如,管理员可以创建一个 RBAC 角色,它提供启动虚拟机所需的权限。然后,管理员可以通过将角色绑定到特定用户来限制访问权限。
1.3.3.1. OpenShift Virtualization 的默认集群角色 复制链接链接已复制到粘贴板!
通过使用集群角色聚合,OpenShift Virtualization 会扩展默认的 OpenShift Container Platform 集群角色,使其包含访问虚拟化对象的权限。
| 默认集群角色 | OpenShift Virtualization 集群角色 | OpenShift Virtualization 集群角色描述 |
|---|---|---|
|
|
| 此用户可以查看集群中的所有 OpenShift Virtualization 资源,但不能创建、删除、修改或访问它们。例如,用户可以看到虚拟机 (VM) 正在运行,但不能将其关闭或访问其控制台。 |
|
|
| 可以修改集群中的所有 OpenShift Virtualization 资源。例如,用户可以创建虚拟机、访问虚拟机控制台和删除虚拟机。 |
|
|
|
具有所有 OpenShift Virtualization 资源的完整权限,包括删除资源集合。用户也可以查看和修改 OpenShift Virtualization 运行时配置,该配置位于 |
1.3.3.2. OpenShift Virtualization 中存储功能的 RBAC 角色 复制链接链接已复制到粘贴板!
为 Containerized Data Importer (CDI) 授予以下权限,包括 cdi-operator 和 cdi-controller 服务帐户。
1.3.3.2.1. 集群范围的 RBAC 角色 复制链接链接已复制到粘贴板!
| CDI 集群角色 | Resources | Verbs |
|---|---|---|
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
|
| API 组 | Resources | Verbs |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
允许列表: |
|
|
|
允许列表: |
|
|
|
|
|
| API 组 | Resources | Verbs |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1.3.3.2.2. 命名空间的 RBAC 角色 复制链接链接已复制到粘贴板!
| API 组 | Resources | Verbs |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| API 组 | Resources | Verbs |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1.3.3.3. kubevirt-controller 服务帐户的额外 SCC 和权限 复制链接链接已复制到粘贴板!
Pod 的安全上下文约束(SCC)控制权限。这些权限包括 Pod(容器集合)可以执行的操作以及它们可以访问的资源。您可以使用 SCC 定义 Pod 运行必须满足的一组条件,以便其能被系统接受。
virt-controller 是一个集群控制器,可为集群中的虚拟机创建 virt-launcher pod。
默认情况下,virt-launcher pod 使用命名空间中的 default 服务帐户运行。如果您的合规控制需要唯一的服务帐户,请为虚拟机分配一个。此设置适用于 VirtualMachineInstance 对象和 virt-launcher pod。
kubevirt-controller 服务帐户被授予额外的 SCC 和 Linux 功能,以便能够创建具有适当权限的 virt-launcher Pod。这些扩展权限允许虚拟机使用超出典型 pod 范围的 OpenShift Virtualization 功能。
kubevirt-controller 服务帐户被授予以下 SCC:
-
scc.AllowHostDirVolumePlugin = true
这允许虚拟机使用 hostpath 卷插件。 -
scc.AllowPrivilegedContainer = false
可确保virt-launcherpod 没有作为特权容器运行。 scc.AllowedCapabilities = []corev1.Capability{"SYS_NICE", "NET_BIND_SERVICE"}-
SYS_NICE允许设置 CPU 关联性。 -
NET_BIND_SERVICE允许 DHCP 和 Slirp 操作。
-
查看 kubevirt-controller 的 SCC 和 RBAC 定义
您可以使用 oc 工具查看 kubevirt-controller 的 SecurityContextConstraints 定义:
oc get scc kubevirt-controller -o yaml
$ oc get scc kubevirt-controller -o yaml
您可以使用 oc 工具查看 kubevirt-controller clusterrole 的 RBAC 定义:
oc get clusterrole kubevirt-controller -o yaml
$ oc get clusterrole kubevirt-controller -o yaml
1.4. OpenShift Virtualization 架构 复制链接链接已复制到粘贴板!
Operator Lifecycle Manager (OLM) 为 OpenShift Virtualization 的每个组件部署 Operator pod:
-
Compute:
virt-operator -
Storage:
cdi-operator -
Network:
cluster-network-addons-operator -
Scaling:
ssp-operator
OLM 还会部署 hyperconverged-cluster-operator pod,它负责其他组件的部署、配置和生命周期,以及几个 helper pod: hco-webhook 和 hyperconverged-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-controller、virt-handler 和 virt-api。
OLM 部署 Hostpath Provisioner (HPP) Operator,但它在创建 hostpath-provisioner CR 前它无法正常工作。
1.4.1. 关于 HyperConverged Operator (HCO) 复制链接链接已复制到粘贴板!
HCO、hco-operator 提供了用于部署和管理 OpenShift Virtualization 的一个单一进入点,并带有多个具有默认设置的 helper operator。它还会为这些 operator 创建自定义资源(CR)。
| 组件 | 描述 |
|---|---|
|
|
验证 |
|
|
提供 |
|
| 包含 OpenShift Virtualization 需要的所有 operator、CR 和对象。 |
|
| 调度、扩展和性能 (SSP) CR。这由 HCO 自动创建。 |
|
| Containerized Data Importer (CDI) CR。这由 HCO 自动创建。 |
|
|
指示并由 |
1.4.2. 关于 Containerized Data Importer (CDI) Operator 复制链接链接已复制到粘贴板!
CDI Operator cdi-operator, 管理 CDI 及其相关资源,它使用数据卷将虚拟机(VM)镜像导入到持久性卷声明(PVC)中。
| 组件 | 描述 |
|---|---|
|
| 管理将虚拟机磁盘上传到 PVC 的授权过程,它会发布安全上传令牌。 |
|
| 将外部磁盘上传流量定向到适当的上传服务器 pod,以便将其写入正确的 PVC。需要一个有效的上传令牌。 |
|
| helper(帮助程序)Pod,用于在创建数据卷时将虚拟机镜像导入到 PVC 中。 |
1.4.3. 关于 Cluster Network Addons Operator 复制链接链接已复制到粘贴板!
Cluster Network Addons Operator cluster-network-addons-operator 在集群中部署网络组件,并管理扩展网络功能的相关资源。
| 组件 | 描述 |
|---|---|
|
| 管理 Kubemacpool 的 webhook 的 TLS 证书。 |
|
| 为虚拟机 (VM) 网络接口卡 (NIC) 提供 MAC 地址池服务。 |
|
| 将节点上可用的网络桥接标记为节点资源。 |
|
| 在集群节点上安装 Container Network Interface (CNI) 插件,通过网络附加定义将虚拟机附加到 Linux 网桥。 |
1.4.4. 关于 Hostpath Provisioner (HPP) Operator 复制链接链接已复制到粘贴板!
HPP Operator hostpath-provisioner-operator,部署和管理多节点 HPP 和相关资源。
| 组件 | 描述 |
|---|---|
|
| 为 HPP 要在其中运行的每个节点提供一个 worker。pod 在节点上挂载指定的后备存储。 |
|
| 实现 HPP 的容器存储接口(CSI)驱动程序接口。 |
|
| 实现 HPP 的传统驱动程序接口。 |
1.4.5. 关于 Scheduling、Scale 和 Performance (SSP) Operator 复制链接链接已复制到粘贴板!
SSP Operator(ssp-operator)部署通用模板、相关的默认引导源、管道任务和模板验证器。
1.4.6. 关于 OpenShift Virtualization Operator 复制链接链接已复制到粘贴板!
OpenShift Virtualization Operator(virt-operator)部署、升级和管理 OpenShift Virtualization,而不会影响当前虚拟机 (VM) 工作负载。另外,OpenShift Virtualization Operator 部署通用实例类型和通用首选项。
| 组件 | 描述 |
|---|---|
|
| HTTP API 服务器,用作所有与虚拟化相关的流的入口点。 |
|
|
观察创建新虚拟机实例对象,并创建对应的 pod。当 pod 被调度到某个节点上时, |
|
|
监控对虚拟机的任何更改,并指示 |
|
|
包含通过 |
第 2 章 发行注记 复制链接链接已复制到粘贴板!
2.1. OpenShift Virtualization 发行注记 复制链接链接已复制到粘贴板!
2.1.1. 提供文档反馈 复制链接链接已复制到粘贴板!
要报告错误或改进文档,请登录到 Red Hat JIRA 帐户 并提交 JIRA 问题。
2.1.2. 关于 Red Hat OpenShift Virtualization 复制链接链接已复制到粘贴板!
通过 Red Hat OpenShift Virtualization,您可以将传统虚拟机 (VM) 集成到 OpenShift Container Platform 环境中,并将它们与容器一同运行。在 OpenShift Virtualization 中,虚拟机是原生的 Kubernetes 对象,可以使用 OpenShift Container Platform Web 控制台或命令行进行管理。
OpenShift Virtualization 由
图标表示。
您可以使用 OpenShift Virtualization 作为 OVN-Kubernetes Container Network Interface (CNI)网络供应商。
了解更多有关 OpenShift Virtualization 的功能。
了解更多有关 OpenShift Virtualization 架构和部署的信息。
为 OpenShift Virtualization 准备集群。
2.1.2.1. OpenShift Virtualization 支持的集群版本 复制链接链接已复制到粘贴板!
OpenShift Virtualization 4.17 的最新稳定版本为 4.17.33。
支持在 OpenShift Container Platform 4.17 集群中使用 OpenShift Virtualization 4.17。要使用 OpenShift Virtualization 的最新 z-stream 版本,您需要首先升级到 OpenShift Container Platform 的最新版本。
2.1.2.2. 支持的客户端操作系统 复制链接链接已复制到粘贴板!
要查看 OpenShift Virtualization 支持的客户机操作系统,请参阅 Red Hat OpenStack Platform、Red Hat Virtualization、OpenShift Virtualization 和带有 KVM 的 Red Hat Enterprise Linux 中的认证的客户机操作系统。
2.1.2.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.17。
- Intel 和 AMD CPU。
2.1.3. 快速启动 复制链接链接已复制到粘贴板!
几个 OpenShift Virtualization 功能的快速入门导览。要查看导览,请点 OpenShift Container Platform Web 控制台标题的菜单栏中的 Help 图标 ?,然后选择 Quick Starts。您可以通过在 Filter 字段中输入关键字 virtualization 来过滤可用的导览。
2.1.4. 新增和改变的功能 复制链接链接已复制到粘贴板!
此发行版本添加了与以下组件和概念相关的新功能和改进:
2.1.4.1. 基础架构 复制链接链接已复制到粘贴板!
-
现在,在导入的容器磁盘中支持
inferFromVolume属性。请求时,OpenShift Virtualization 可以将标签instancetype.kubevirt.io/default-instancetype和instancetype.kubevirt.io/default-preference从源容器磁盘复制到新虚拟机的引导卷。
-
现在,您可以为红帽金级镜像选择自定义命名空间,而不是使用默认的
openshift-virtualization-os-images命名空间。通过使用自定义命名空间,集群管理员可以限制用户访问默认引导源。要使用 Web 控制台更新此设置,请转至 Virtualization → Overview → Settings → Cluster → General settings → Bootable volumes 项目。
2.1.4.2. 虚拟化 复制链接链接已复制到粘贴板!
现在,您可以通过使用
wasp-agent过量使用内存(RAM) 来提高节点上的虚拟机工作负载密度。isp 代理将交换资源分配给 worker 节点,并在节点面临风险时管理 pod 驱除。注意过度使用中的内存可能会降低工作负载性能。
- 为虚拟机工作负载启用复制实时迁移现已正式发布。
- 作为集群管理员,您可以在集群中公开 USB 设备,使它们可供虚拟机(VM)所有者分配给虚拟机。您可以通过首先启用主机透传来公开 USB 设备,然后将虚拟机配置为访问 USB 设备。
-
现在,您可以使用 Application-Aware Quota (AAQ) Operator 为 OpenShift Container Platform 集群中各个组件自定义和管理资源配额。AAQ Operator 提供了
ApplicationAwareResourceQuota和ApplicationAwareClusterResourceQuota自定义资源定义 (CRD),它们可用于分配资源,而无需干扰升级和节点维护等集群级别的活动。
-
OpenShift Virtualization 现在会自动更新存储在
ControllerRevisions中的instancetype.kubevirt.io对象,这些对象由VirtualMachine资源引用到对象的最新 API 版本。因此,您不再需要手动更新这些对象。
- OpenShift Virtualization 版本 4.17.1 引入了对 Microsoft Windows Server 2025 的支持,作为认证的客户机操作系统。如需了解更多详细信息,请参阅 OpenShift Virtualization 中的认证客户机操作系统。
2.1.4.3. 存储 复制链接链接已复制到粘贴板!
-
VirtualMachineSnapshotAPI 版本现在是 v1beta1。
-
VirtualMachineExportAPI 版本现在是 v1beta1。
2.1.4.4. Web 控制台 复制链接链接已复制到粘贴板!
OpenShift Container Platform Web 控制台包括一个新的集中视图,它提供了一个特定于 OpenShift Virtualization 视角的精简导航菜单。此视图补充但并没有替换现有的 OpenShift Container Platform Web 控制台 Virtualization 导航选项。
要访问新视图,请在 web 控制台中导航至 Administrator → Virtualization。
- OpenShift Virtualization 指南式导览现已正式发布。您可以点 Welcome to OpenShift Virtualization 对话框中的 Start Tour,或 Virtualization → Overview → Settings → User → Getting started resources → Guided tour 来访问这个导览。
- 从 web 控制台中为虚拟机 热插内存 现已正式发布。
- 现在,从 web 控制台为虚拟机 热插 CPU 已正式发布。
2.1.5. 弃用和删除的功能 复制链接链接已复制到粘贴板!
2.1.5.1. 弃用的功能 复制链接链接已复制到粘贴板!
弃用的功能包括在当前发行版本中并被支持。但是,它们将在以后的发行版本中删除,且不建议用于新部署。
-
DevPreviewLongLifecycle配置集已弃用。该配置集现在为LongLifecycle,并正式发布。
-
copy-template,modify-vm-template, 和create-vm-from-template任务已弃用。
- 对 Windows Server 2012 R2 模板的支持已弃用。
-
警报
KubeVirtComponentExceedsRequestedMemory和KubeVirtComponentExceedsRequestedCPU已被弃用。您可以安全地静默它们。
2.1.5.2. 删除的功能 复制链接链接已复制到粘贴板!
删除的功能是在早期版本中弃用的功能。现在,它们已从 OpenShift Virtualization 中删除,不再被支持。
- CentOS 7 和 CentOS Stream 8 现在处于生命周期结束阶段。因此,这些操作系统的容器镜像已从 OpenShift Virtualization 中删除,不再被社区支持。
-
tekton-tasks-operator已被删除。Tekton 任务和示例管道现在包括在任务目录中 (ArtifactHub)。
2.1.6. 技术预览功能 复制链接链接已复制到粘贴板!
此版本中的一些功能当前还处于技术预览状态。它们并不适用于在生产环境中使用。请参阅红帽门户网站中关于对技术预览功能支持范围的信息:
现在,您可以为运行和停止的虚拟机迁移存储类。
注意在
HyperConverged自定义资源中不默认启用存储实时迁移。要启用所需的功能门,请遵循红帽知识库中的在 OpenShift Virtualization 4.17 中启用存储实时迁移中的临时解决方案。
- 现在,您可以在 OpenShift Virtualization 主机中启用嵌套虚拟化。
2.1.7. 已知问题 复制链接链接已复制到粘贴板!
网络
当您从 OpenShift Container Platform 4.12 更新至较新的次版本时,使用
cnv-bridgeContainer Network Interface (CNI) 的虚拟机无法实时迁移。(https://access.redhat.com/solutions/7069807)-
作为临时解决方案,请在执行更新前将
NetworkAttachmentDefinition清单中的spec.config.type字段从cnv-bridge更改为bridge。
-
作为临时解决方案,请在执行更新前将
节点
-
卸载 OpenShift Virtualization 不会删除 OpenShift Virtualization 创建的
feature.node.kubevirt.io节点标签。您必须手动删除标签。(CNV-38543)
- 在具有不同计算节点的异构集群中,启用了 HyperV Reenlightenment 的虚拟机无法调度到不支持 timestamp-counter scaling (TSC),或具有适当 TSC 频率的节点。(BZ#2151169)
Storage
如果您使用
csi-clone克隆策略克隆超过 100 个虚拟机,则 Ceph CSI 可能无法清除克隆。手动删除克隆也可能会失败。(CNV-23501)-
作为临时解决方案,您可以重启
ceph-mgr来清除虚拟机克隆。
-
作为临时解决方案,您可以重启
虚拟化
- 如果虚拟机名称超过 47 个字符,实时迁移会失败。(CNV-61066)
-
当在 Windows 虚拟机中添加 Trusted Platform Module (vTPM) 设备时,BitLocker Drive Encryption 系统检查会通过,即使 vTPM 设备并不具有持久性。这是因为,vTPM 设备并不是持久性存储,并在
virt-launcherpod 生命周期中使用临时存储恢复加密密钥。当虚拟机迁移或关闭并重启后,vTPM 数据会丢失。(CNV-36448)
OpenShift Virtualization 将 pod 使用的服务帐户令牌链接到该特定 pod。OpenShift Virtualization 通过创建包含令牌的磁盘镜像来实施服务帐户卷。如果您迁移虚拟机,则服务帐户卷会无效。(CNV-33835)
- 作为临时解决方案,使用用户帐户而不是服务帐户,因为用户帐户令牌没有绑定到特定 pod。
第 3 章 开始使用 复制链接链接已复制到粘贴板!
3.1. OpenShift Virtualization 入门 复制链接链接已复制到粘贴板!
您可以通过安装和配置基本环境来探索 OpenShift Virtualization 的功能和功能。
集群配置过程需要 cluster-admin 权限。
3.1.1. 导览和快速启动 复制链接链接已复制到粘贴板!
您可以通过在 OpenShift Container Platform Web 控制台中执行导览来开始探索 OpenShift Virtualization。
开始使用
本简短指南介绍了使用 OpenShift Virtualization 的一些关键方面。启动导览的方法有两种:
- 在 Welcome to OpenShift Virtualization 对话框中,点 Start Tour。
- 进入 Virtualization → Overview → Settings → User → Getting started resources,然后点guide tour。
快速启动
几个 OpenShift Virtualization 功能的快速入门导览。要访问快速启动,请完成以下步骤:
- 点 OpenShift Container Platform Web 控制台标题上的菜单栏中的 Help 图标 ?。
- 选择Quick Starts。
您可以通过在 Filter 字段中输入关键字 virtual 来过滤可用的导览。
3.1.2. 规划和安装 OpenShift Virtualization 复制链接链接已复制到粘贴板!
在 OpenShift Container Platform 集群中计划并安装 OpenShift Virtualization:
规划和安装资源
3.1.3. 创建和管理虚拟机 复制链接链接已复制到粘贴板!
创建虚拟机:
您可以使用红帽模板或实例类型创建虚拟机。
您可以通过从容器 registry 或网页导入自定义镜像来创建虚拟机,方法是从本地机器上传镜像,或者克隆持久性卷声明(PVC)。
将虚拟机连接到二级网络:
- Linux 网桥网络.
- 打开虚拟网络(OVN)-Kubernetes 辅助网络。
- 注意
默认情况下,虚拟机连接到 pod 网络。
连接到虚拟机:
管理虚拟机:
3.1.4. 迁移到 OpenShift Virtualization 复制链接链接已复制到粘贴板!
要从一个外部供应商(如 VMware vSphere、Red Hat OpenStack Platform (RHOSP)、Red Hat Virtualization)或从另一个 OpenShift Container Platform 集群迁移虚拟机,请使用 Migration Toolkit for Virtualization (MTV)。您还可以迁移由 VMware vSphere 创建的开放虚拟设备(OVA)文件。
Migration Toolkit for Virtualization 不是 OpenShift Virtualization 的一部分,需要单独的安装。因此,这个过程中的所有链接都包括在 OpenShift Virtualization 文档之外。
先决条件
- Migration Toolkit for Virtualization Operator 已安装。
3.1.5. 后续步骤 复制链接链接已复制到粘贴板!
3.2. 使用 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 软件包。
您可以从 OpenShift Container Platform web 控制台下载适用于操作系统的 virtctl 二进制文件,然后安装它。
流程
- 在 web 控制台中进入到 Virtualization → Overview 页面。
-
点 Download virtctl 链接为您的操作系统下载
virtctl二进制文件。 安装
virtctl:对于 RHEL 9 和其他 Linux 操作系统:
解压缩存档文件:
tar -xvf <virtctl-version-distribution.arch>.tar.gz
$ tar -xvf <virtctl-version-distribution.arch>.tar.gzCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令使
virtctl二进制可执行文件:chmod +x <path/virtctl-file-name>
$ chmod +x <path/virtctl-file-name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
virtctl二进制文件移到PATH环境变量中的目录中。您可以运行以下命令来检查您的路径:
echo $PATH
$ echo $PATHCopy to Clipboard Copied! Toggle word wrap Toggle overflow 设置
KUBECONFIG环境变量:export KUBECONFIG=/home/<user>/clusters/current/auth/kubeconfig
$ export KUBECONFIG=/home/<user>/clusters/current/auth/kubeconfigCopy to Clipboard Copied! Toggle word wrap Toggle overflow
对于 Windows:
- 解压缩存档文件。
-
进入解压的目录中,双击
virtctl可执行文件来安装客户端。 将
virtctl二进制文件移到PATH环境变量中的目录中。您可以运行以下命令来检查您的路径:
path
C:\> pathCopy to Clipboard Copied! Toggle word wrap Toggle overflow
macOS:
- 解压缩存档文件。
将
virtctl二进制文件移到PATH环境变量中的目录中。您可以运行以下命令来检查您的路径:
echo $PATH
echo $PATHCopy to Clipboard Copied! Toggle word wrap Toggle overflow
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 订阅。
流程
使用
subscription-managerCLI 工具启用 OpenShift Virtualization 存储库,以运行以下命令:subscription-manager repos --enable cnv-4.17-for-rhel-8-x86_64-rpms
# subscription-manager repos --enable cnv-4.17-for-rhel-8-x86_64-rpmsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令安装
kubevirt-virtctl软件包:yum install kubevirt-virtctl
# yum install kubevirt-virtctlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.2.2. virtctl 命令 复制链接链接已复制到粘贴板!
virtctl 客户端是用于管理 OpenShift Virtualization 资源的命令行实用程序。
除非另有指定,否则虚拟机(VM)命令也适用于虚拟机实例(VMI)。
3.2.2.1. virtctl 信息命令 复制链接链接已复制到粘贴板!
您可使用 virtctl 信息命令查看 virtctl 客户端的信息。
| 命令 | 描述 |
|---|---|
|
|
查看 |
|
|
查看 |
|
| 查看特定命令的选项列表。 |
|
|
查看任何 |
3.2.2.2. VM 信息命令 复制链接链接已复制到粘贴板!
您可使用 virtctl 查看有关虚拟机(VM)和虚拟机实例(VMI)的信息。
| 命令 | 描述 |
|---|---|
|
| 查看客户机机器上可用的文件系统。 |
|
| 查看客户机机器上操作系统的信息。 |
|
| 查看客户机机器上的登录用户。 |
3.2.2.3. VM 清单创建命令 复制链接链接已复制到粘贴板!
您可使用 virtctl create 命令为虚拟机、实例类型和首选项创建清单。
| 命令 | 描述 |
|---|---|
|
创建 |
|
| 创建虚拟机清单,指定虚拟机的名称。 |
|
| 创建使用现有集群范围实例类型的虚拟机清单。 |
|
| 创建使用现有命名空间的实例类型的虚拟机清单。 |
|
| 为集群范围的实例类型创建清单。 |
|
| 为命名空间实例类型创建清单。 |
|
| 为集群范围的虚拟机首选项创建清单,为首选项指定一个名称。 |
|
| 为命名空间虚拟机首选项创建清单。 |
3.2.2.4. VM 管理命令 复制链接链接已复制到粘贴板!
您可使用 virtctl 虚拟机(VM)管理命令管理和迁移虚拟机(VM)和虚拟机实例(VMI)。
| 命令 | 描述 |
|---|---|
|
| 启动虚拟机。 |
|
| 以暂停状态启动虚拟机。这个选项可让您从 VNC 控制台中断引导过程。 |
|
| 停止虚拟机。 |
|
| 强制停止虚拟机。这个选项可能会导致数据不一致或数据丢失。 |
|
| 暂停虚拟机。机器状态保存在内存中。 |
|
| 取消暂停虚拟机。 |
|
| 迁移虚拟机。 |
|
| 取消虚拟机迁移。 |
|
| 重启虚拟机。 |
3.2.2.5. VM 连接命令 复制链接链接已复制到粘贴板!
您可使用 virtctl connection 命令来公开端口并连接到虚拟机(VM)和虚拟机实例(VMI)。
| 命令 | 描述 |
|---|---|
|
| 连接到虚拟机的串行控制台。 |
|
| 创建转发虚拟机的指定端口的服务,并在节点的指定端口上公开服务。
示例: |
|
| 将文件从机器复制到虚拟机。此命令使用 SSH 密钥对的私钥。虚拟机必须使用公钥配置。 |
|
| 将文件从虚拟机复制到您的机器中。此命令使用 SSH 密钥对的私钥。虚拟机必须使用公钥配置。 |
|
| 与虚拟机打开 SSH 连接。此命令使用 SSH 密钥对的私钥。虚拟机必须使用公钥配置。 |
|
| 连接到虚拟机的 VNC 控制台。
已安装 |
|
| 显示端口号,并使用任何查看器通过 VNC 连接手动连接到 VMI。 |
|
| 如果该端口可用,则指定端口号用于在指定端口上运行代理。 如果没有指定端口号,代理会在随机端口上运行。 |
3.2.2.6. VM 导出命令 复制链接链接已复制到粘贴板!
使用 virtctl vmexport 命令来创建、下载或删除从虚拟机、虚拟机快照或持久性卷声明 (PVC) 导出的卷。某些清单还包含标头 secret,它授予对端点的访问权限,以 OpenShift Virtualization 可以使用的格式导入磁盘镜像。
| 命令 | 描述 |
|---|---|
|
|
创建一个
|
|
|
手动删除 |
|
|
下载在
可选:
|
|
|
创建一个 |
|
| 为一个现有的导出获取清单。清单不包括标头 secret。 |
|
| 为虚拟机 example 创建一个虚拟机导出,并获取清单。清单不包括标头 secret。 |
|
| 为虚拟机快照 example 创建一个虚拟机导出,并获取清单。清单不包括标头 secret。 |
|
| 为一个现有的导出获取清单。清单包括标头 secret。 |
|
| 以 json 格式检索现有导出的清单。清单不包括标头 secret。 |
|
| 为一个现有的导出获取清单。清单包括标头 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"}]'$ oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv \ --type json -p '[{"op": "add", "path": "/spec/featureGates", \ "value": "HotplugVolumes"}]'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
下载内存转储
您必须使用 virtctl vmexport download 命令下载内存转储:
virtctl vmexport download <vmexport_name> --vm|pvc=<object_name> \ --volume=<volume_name> --output=<output_file>
$ virtctl vmexport download <vmexport_name> --vm|pvc=<object_name> \
--volume=<volume_name> --output=<output_file>
| 命令 | 描述 |
|---|---|
|
|
在 PVC 上保存虚拟机的内存转储。内存转储状态显示在 可选:
|
|
|
使用相同的 PVC 重新运行 这个命令覆盖以前的内存转储。 |
|
| 删除内存转储。 如果要更改目标 PVC,则必须手动删除内存转储。
这个命令会删除虚拟机和 PVC 之间的关联,以便在 |
3.2.2.8. 热插和热拔命令 复制链接链接已复制到粘贴板!
您可使用 virtctl 从正在运行的虚拟机(VM)和虚拟机实例(VMI)中添加或删除资源。
| 命令 | 描述 |
|---|---|
|
| 热插数据卷或持久性卷声明 (PVC)。 可选:
|
|
| 热拔一个虚拟磁盘。 |
3.2.2.9. 镜像上传命令 复制链接链接已复制到粘贴板!
您可使用 virtctl image-upload 命令将虚拟机镜像上传到数据卷中。
| 命令 | 描述 |
|---|---|
|
| 将虚拟机镜像上传到已存在的数据卷中。 |
|
| 将虚拟机镜像上传到指定请求大小的新数据卷中。 |
3.2.3. 使用 virtctl 部署 libguestfs 复制链接链接已复制到粘贴板!
您可以使用 virtctl guestfs 命令部署带有 libguestfs-tools 以及附加到它的持久性卷声明 (PVC) 的交互式容器。
流程
要部署一个带有
libguestfs-tools的容器,挂载 PVC 并为其附加一个 shell,运行以下命令:virtctl guestfs -n <namespace> <pvc_name>
$ virtctl guestfs -n <namespace> <pvc_name>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- PVC 名称是必需的参数。如果没有包括它,则会出现错误消息。
3.2.3.1. libguestfs 和 virtctl guestfs 命令 复制链接链接已复制到粘贴板!
libguestfs 工具可帮助您访问和修改虚拟机 (VM) 磁盘镜像。您可以使用 libguestfs 工具查看和编辑客户机中的文件、克隆和构建虚拟机,以及格式化和调整磁盘大小。
您还可以使用 virtctl guestfs 命令及其子命令在 PVC 上修改、检查和调试虚拟机磁盘。要查看子命令的完整列表,请在命令行中输入 virt- 并按 Tab 键。例如:
| 命令 | 描述 |
|---|---|
|
| 在终端中以交互方式编辑文件。 |
|
| 将 ssh 密钥注入客户系统并创建登录。 |
|
| 查看虚拟机使用了多少磁盘空间。 |
|
| 通过创建包含完整列表的输出文件,查看虚拟客户机上安装的所有 RPM 的完整列表。 |
|
|
在终端中使用 |
|
| 封装要用作模板的虚拟机磁盘镜像。 |
默认情况下,virtctl guestfs 会创建一个会话,其中包含管理 VM 磁盘所需的一切内容。但是,该命令还支持几个标志选项来自定义其行为:
| 标记选项 | 描述 |
|---|---|
|
|
为 |
|
带有 | 使用来自一个特定命名空间中的 PVC。
如果没有使用
如果没有包括 |
|
|
列出
您可以使用 |
|
|
代表
默认情况下,
如果集群没有任何
如果没有设置, |
|
|
显示
您还可以通过设置 |
这个命令还会检查 PVC 是否被另一个 pod 使用,如果被另外一个 pod 使用,则会一个错误信息。但是,libguestfs-tools 进程启动后,设置无法新的 pod 会使用相同的 PVC。在启动会访问同一 PVC 的虚拟机前,您必须先验证没有活跃的 virtctl guestfs pod。
virtctl guestfs 命令只能接受一个 PVC 被附加到不活跃的 pod。
3.2.4. 使用 Ansible 复制链接链接已复制到粘贴板!
要使用 OpenShift Virtualization 的 Ansible 集合,请参阅 Red Hat Ansible Automation Hub (Red Hat Hybrid Cloud Console)。
第 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 中使用以下平台:
- 内部裸机服务器。请参阅为 OpenShift Virtualization 规划裸机集群。
- Amazon Web Services 裸机实例。请参阅使用自定义在 AWS 上安装集群
IBM Cloud® 裸机服务器。请参阅在 IBM Cloud® Bare Metal 节点上部署 OpenShift Virtualization。
重要在 IBM Cloud® 裸机服务器上安装 OpenShift Virtualization 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅以下链接:
不支持由其他云供应商提供的裸机实例或服务器。
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 裸机集群相同。
在设置集群前,请查看以下支持的功能和限制概述:
- 安装
您可以使用安装程序置备的基础架构安装集群,确保为 worker 节点指定裸机实例类型。例如,您可以对基于 x86_64 架构的机器使用
c5n.metal类型值。您可以通过编辑install-config.yaml文件来指定裸机实例类型。如需更多信息,请参阅在 AWS 上安装 OpenShift Container Platform 文档。
- 访问虚拟机 (VM)
-
使用
virtctlCLI 工具或 OpenShift Container Platform Web 控制台访问虚拟机的方式没有变化。 您可以使用
NodePort或LoadBalancer服务公开虚拟机。注意使用负载均衡器是首选的,因为 OpenShift Container Platform 会在 AWS 中自动创建负载均衡器并管理其生命周期。另外,还会为负载均衡器创建一个安全组,您可以使用注解来附加现有的安全组。删除服务时,OpenShift Container Platform 会移除负载均衡器及其关联的资源。
- 网络
- 您不能使用单根 I/O 虚拟化 (SR-IOV) 或桥接 Container Network Interface (CNI) 网络,包括虚拟 LAN (VLAN)。如果您的应用程序需要扁平第 2 层网络或对 IP 池进行控制,请考虑使用 OVN-Kubernetes 二级覆盖网络。
- 存储
您可以使用存储厂商认证的任何存储解决方案与底层平台一起使用。
重要AWS 裸机和 ROSA 集群可能有不同的存储解决方案。请确保您的存储供应商可以支持。
在 OpenShift Virtualization 中使用 Amazon Elastic File System (EFS) 或 Amazon Elastic Block Store (EBS) 可能会导致性能和功能限制,如下表所示:
Expand 表 4.1. EFS 和 EBS 性能和功能限制 功能 EBS 卷 EFS 卷 共享存储解决方案 gp2
gp3
io2
VM 实时迁移
不可用
不可用
可用
可用
可用
使用克隆快速创建虚拟机
可用
不可用
可用
使用快照进行虚拟机备份和恢复
可用
不可用
可用
考虑使用支持 ReadWriteMany (RWX)、克隆和快照的 CSI 存储来启用实时迁移、快速虚拟机创建和虚拟机快照功能。
- 托管 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 (no execute)标记。
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 与已知的存储供应商搭配使用,则会自动选择卷和访问模式。但是,如果您使用没有存储配置集的存储类,则需要配置卷和访问模式。
如需 OpenShift Virtualization 的已知存储供应商列表,请参阅 红帽生态系统目录。
要获得最佳结果,请使用 ReadWriteMany (RWX) 访问模式和 Block 卷模式。因为以下原因,这一点非常重要:
-
实时迁移需要
ReadWriteMany(RWX) 访问模式。 Block卷模式的性能优于Filesystem卷模式。这是因为Filesystem卷模式会使用更多存储层,包括文件系统层和磁盘镜像文件。对于虚拟机磁盘存储,并不需要这些层。例如,如果您使用 Red Hat OpenShift Data Foundation,首选使用 Ceph RBD 而不是 CephFS 卷。
您不能实时迁移带有以下配置的虚拟机:
-
具有
ReadWriteOnce(RWO) 访问模式的存储卷 - 具有透传功能,比如 GPU
对于这些虚拟机,将 evictionStrategy 字段设置为 None。None 策略会在节点重启过程中关闭虚拟机。
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)
Product of (Maximum number of nodes that can drain in parallel) and (Highest total VM memory request allocations across nodes)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在集群中可以并行运行的迁移数量的默认值为 5。
- 如果虚拟机使用 host model CPU,则节点必须支持虚拟机的 host model 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 infrastructure node ≈ 150 MiB
Memory overhead per worker node ≈ 360 MiB
Memory overhead per worker node ≈ 360 MiB
另外,OpenShift Virtualization 环境资源需要总计 2179 MiB 的内存,分布到所有基础架构节点。
虚拟机内存开销
Memory overhead per virtual machine ≈ (0.002 × requested memory) \
+ 218 MiB \
+ 8 MiB × (number of vCPUs) \
+ 16 MiB × (number of graphics devices) \
+ (additional memory overhead)
Memory overhead per virtual machine ≈ (0.002 × requested memory) \
+ 218 MiB \
+ 8 MiB × (number of vCPUs) \
+ 16 MiB × (number of graphics devices) \
+ (additional memory overhead)
CPU 开销
使用以下内容计算 OpenShift Virtualization 的集群处理器开销要求。每个虚拟机的 CPU 开销取决于您的具体设置。
集群 CPU 开销
CPU overhead for infrastructure nodes ≈ 4 cores
CPU overhead for infrastructure nodes ≈ 4 cores
OpenShift Virtualization 增加集群级别服务的整体使用,如日志记录、路由和监控。要考虑这个工作负载,请确保托管基础架构组件的节点分配了用于不同节点的 4 个额外内核(4000 毫秒)的容量。
CPU overhead for worker nodes ≈ 2 cores + CPU overhead per virtual machine
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
Aggregated storage overhead per node ≈ 10 GiB
在安装 OpenShift Virtualization 时,集群中每个节点的磁盘存储影响估计值为 10 GiB。
虚拟机存储开销
每个虚拟机的存储开销取决于虚拟机内的具体资源分配请求。该请求可能用于集群中其他位置托管的节点或存储资源的临时存储。OpenShift Virtualization 目前不会为正在运行的容器本身分配任何额外的临时存储。
例如
作为集群管理员,如果您计划托管集群中的 10 个虚拟机,每个虚拟机都有 1 GiB RAM 和 2 个 vCPU,集群中的内存影响为 11.68 GiB。集群中每个节点的磁盘存储影响估算为 10 GiB,托管虚拟机工作负载的 worker 节点的 CPU 影响为最小 2 个内核。
4.1.5. 单节点 Openshift 的不同 复制链接链接已复制到粘贴板!
您可以在单节点 OpenShift 上安装 OpenShift Virtualization。
但请注意,单节点 OpenShift 不支持以下功能:
- 高可用性
- Pod disruption
- Live migration(实时迁移)
- 配置了驱除策略的虚拟机或模板
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 中配置代理支持,以访问 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.17。
-
以具有
cluster-admin权限的用户身份登录到 OpenShift Container Platform web 控制台。
流程
- 从 Administrator 视角中,点 Operators → OperatorHub。
- 在 Filter by keyword 字段中,键入 Virtualization。
- 选择带有 Red Hat source 标签的 OpenShift Virtualization Operator 标题。
- 阅读 Operator 信息并点 Install。
在 Install Operator 页中:
- 从可用 Update Channel 选项列表中选择 stable。这样可确保安装与 OpenShift Container Platform 版本兼容的 OpenShift Virtualization 版本。
对于安装的命名空间,请确保选择了 Operator 推荐的命名空间选项。这会在
openshift-cnv命名空间中安装 Operator,该命名空间在不存在时会自动创建。警告尝试在
openshift-cnv以外的命名空间中安装 OpenShift Virtualization Operator 会导致安装失败。对于 Approval Strategy,强烈建议您选择 Automatic (默认值),以便在 stable 更新频道中提供新版本时 OpenShift Virtualization 会自动更新。
虽然可以选择 Manual 批准策略,但这不可取,因为它会给集群提供支持和功能带来高风险。只有在您完全了解这些风险且无法使用 Automatic 时,才选择 Manual。
警告因为 OpenShift Virtualization 只在与对应的 OpenShift Container Platform 版本搭配使用时被支持,所以缺少的 OpenShift Virtualization 更新可能会导致您的集群不被支持。
-
点 Install 使 Operator 可供
openshift-cnv命名空间使用。 - 当 Operator 成功安装时,点 Create HyperConverged。
- 可选: 为 OpenShift Virtualization 组件配置 Infra 和 Workloads 节点放置选项。
- 点 Create 启动 OpenShift Virtualization。
验证
- 进入到 Workloads → Pods 页,监控 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)来配置 Namespace、OperatorGroup 和 Subscription 对象。
先决条件
- 在集群上安装 OpenShift Container Platform 4.17。
-
安装 OpenShift CLI (
oc) 。 -
以具有
cluster-admin特权的用户身份登录。
流程
创建一个包含以下清单的 YAML 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 使用
stable频道可确保您安装与 OpenShift Container Platform 版本兼容的 OpenShift Virtualization 版本。
运行以下命令,为 OpenShift Virtualization 创建所需的
Namespace、OperatorGroup和Subscription对象:oc apply -f <filename>.yaml
$ oc apply -f <filename>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
您必须验证订阅创建是否成功,然后才能安装 OpenShift Virtualization。
检查
ClusterServiceVersion(CSV)对象是否已成功创建。运行以下命令并验证输出:oc get csv -n openshift-cnv
$ oc get csv -n openshift-cnvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果成功创建 CSV,输出会显示一个条目,其中包含
kubevirt-hyperconverged-operatorchannel、DISPLAY值、OpenShift Virtualization的 DISPLAY 值和PHASE值Succeeded,如下例所示:输出示例
NAME DISPLAY VERSION REPLACES PHASE kubevirt-hyperconverged-operator.v4.17.33 OpenShift Virtualization 4.17.33 kubevirt-hyperconverged-operator.v4.16.0 Succeeded
NAME DISPLAY VERSION REPLACES PHASE kubevirt-hyperconverged-operator.v4.17.33 OpenShift Virtualization 4.17.33 kubevirt-hyperconverged-operator.v4.16.0 SucceededCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查
HyperConverged自定义资源(CR)是否具有正确的版本。运行以下命令并验证输出:oc get hco -n openshift-cnv kubevirt-hyperconverged -o json | jq .status.versions
$ oc get hco -n openshift-cnv kubevirt-hyperconverged -o json | jq .status.versionsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
{ "name": "operator", "version": "4.17.33" }{ "name": "operator", "version": "4.17.33" }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证
HyperConvergedCR 条件。运行以下命令并检查输出:oc get hco kubevirt-hyperconverged -n openshift-cnv -o json | jq -r '.status.conditions[] | {type,status}'$ oc get hco kubevirt-hyperconverged -n openshift-cnv -o json | jq -r '.status.conditions[] | {type,status}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
您可以在 YAML 文件中配置证书轮转参数。
4.2.1.2.2. 使用 CLI 部署 OpenShift Virtualization Operator 复制链接链接已复制到粘贴板!
您可以使用 oc CLI 部署 OpenShift Virtualization Operator。
先决条件
-
在
openshift-cnv命名空间中订阅 OpenShift Virtualization 目录。 -
以具有
cluster-admin特权的用户身份登录。
流程
创建一个包含以下清单的 YAML 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来部署 OpenShift Virtualization Operator:
oc apply -f <file_name>.yaml
$ oc apply -f <file_name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
通过观察
openshift-cnv命名空间中集群服务版本(CSV)的PHASE来确保 OpenShift Virtualization 已被成功部署。运行以下命令:watch oc get csv -n openshift-cnv
$ watch oc get csv -n openshift-cnvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果部署成功,则会显示以下输出:
输出示例
NAME DISPLAY VERSION REPLACES PHASE kubevirt-hyperconverged-operator.v4.17.33 OpenShift Virtualization 4.17.33 Succeeded
NAME DISPLAY VERSION REPLACES PHASE kubevirt-hyperconverged-operator.v4.17.33 OpenShift Virtualization 4.17.33 SucceededCopy to Clipboard Copied! Toggle word wrap Toggle overflow
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 来执行以下任务:
4.3.1.1. 删除 HyperConverged 自定义资源 复制链接链接已复制到粘贴板!
要卸载 OpenShift Virtualization,首先删除 HyperConverged 自定义资源 (CR)。
先决条件
-
可以使用具有
cluster-admin权限的账户访问 OpenShift Container Platform 集群。
流程
- 进入到 Operators → Installed Operators 页面。
- 选择 OpenShift Virtualization Operator。
- 点 OpenShift Virtualization Deployment 选项卡。
-
点
kubevirt-hyperconverged旁边的 Options 菜单
,然后选择 Delete HyperConverged。
- 在确认窗口中点击 Delete。
4.3.1.2. 使用 Web 控制台从集群中删除 Operator 复制链接链接已复制到粘贴板!
集群管理员可以使用 Web 控制台从所选命名空间中删除已安装的 Operator。
先决条件
-
您可以使用具有
cluster-admin权限的账户访问 OpenShift Container Platform 集群 Web 控制台。
流程
- 进入到 Operators → Installed Operators 页面。
- 在 Filter by name 字段中滚动或输入关键字以查找您要删除的 Operator。然后点它。
在 Operator Details 页面右侧,从 Actions 列表中选择 Uninstall Operator。
此时会显示 Uninstall Operator? 对话框。
选择 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 集群。
流程
- 导航至 Administration → Namespaces。
- 在命名空间列表中找到您要删除的命名空间。
-
在命名空间列表的右侧,从 Options 菜单
中选择 Delete Namespace。
- 当 Delete Namespace 页打开时,在相关项中输入您要删除的命名空间的名称。
- 点击 Delete。
4.3.1.4. 删除 OpenShift Virtualization 自定义资源定义 复制链接链接已复制到粘贴板!
您可以使用 Web 控制台删除 OpenShift Virtualization 自定义资源定义 (CRD)。
先决条件
-
可以使用具有
cluster-admin权限的账户访问 OpenShift Container Platform 集群。
流程
- 进入到 Administration → CustomResourceDefinitions。
-
选择 Label 过滤器,并在 Search 字段中输入
operators.coreos.com/kubevirt-hyperconverged.openshift-cnv,以显示 OpenShift Virtualization CRD。 -
点每个 CRD 旁边的 Options 菜单
,然后选择 Delete CustomResourceDefinition。
4.3.2. 使用 CLI 卸载 OpenShift Virtualization 复制链接链接已复制到粘贴板!
您可以使用 OpenShift CLI (oc) 卸载 OpenShift Virtualization。
先决条件
-
可以使用具有
cluster-admin权限的账户访问 OpenShift Container Platform 集群。 -
已安装 OpenShift CLI(
oc)。 - 您已删除所有虚拟机和虚拟机实例。当其工作负载保留在集群中时,您无法卸载 OpenShift Virtualization。
流程
删除
HyperConverged自定义资源:oc delete HyperConverged kubevirt-hyperconverged -n openshift-cnv
$ oc delete HyperConverged kubevirt-hyperconverged -n openshift-cnvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 删除 OpenShift Virtualization Operator 订阅:
oc delete subscription hco-operatorhub -n openshift-cnv
$ oc delete subscription hco-operatorhub -n openshift-cnvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 删除 OpenShift Virtualization
ClusterServiceVersion资源:oc delete csv -n openshift-cnv -l operators.coreos.com/kubevirt-hyperconverged.openshift-cnv
$ oc delete csv -n openshift-cnv -l operators.coreos.com/kubevirt-hyperconverged.openshift-cnvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 删除 OpenShift Virtualization 命名空间:
oc delete namespace openshift-cnv
$ oc delete namespace openshift-cnvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
dry-run选项运行oc delete crd命令列出 OpenShift Virtualization 自定义资源定义 (CRD):oc delete crd --dry-run=client -l operators.coreos.com/kubevirt-hyperconverged.openshift-cnv
$ oc delete crd --dry-run=client -l operators.coreos.com/kubevirt-hyperconverged.openshift-cnvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行
oc delete crd命令来删除 CRD,而无需dry-run选项:oc delete crd -l operators.coreos.com/kubevirt-hyperconverged.openshift-cnv
$ oc delete crd -l operators.coreos.com/kubevirt-hyperconverged.openshift-cnvCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 5 章 安装后配置 复制链接链接已复制到粘贴板!
5.1. 安装后配置 复制链接链接已复制到粘贴板!
安装 OpenShift Virtualization 后通常会执行以下步骤。您可以配置与环境相关的组件:
- OpenShift Virtualization Operator、工作负载和控制器的节点放置规则
网络配置 :
- 安装 Kubernetes NMState 和 SR-IOV Operator
- 配置 Linux 网桥网络以从外部访问虚拟机(VM)
- 为实时迁移配置专用的二级网络
- 配置 SR-IOV 网络
- 使用 OpenShift Container Platform Web 控制台启用创建负载均衡器服务
存储配置 :
- 为 Container Storage Interface (CSI) 定义默认存储类
- 使用 Hostpath Provisioner (HPP) 配置本地存储
5.2. 为 OpenShift Virtualization 组件指定节点 复制链接链接已复制到粘贴板!
裸机节点上虚拟机(VM)的默认调度是适当的。另外,您可以通过配置节点放置规则来指定您要部署 OpenShift Virtualization Operator、工作负载和控制器的节点。
在安装 OpenShift Virtualization 后,您可以为一些组件配置节点放置规则,但如果要为工作负载配置节点放置规则,则虚拟机将无法被存在。
5.2.1. 关于 OpenShift Virtualization 组件的节点放置规则 复制链接链接已复制到粘贴板!
您可以将节点放置规则用于以下任务:
- 仅在用于虚拟化工作负载的节点上部署虚拟机。
- 仅在基础架构节点上部署 Operator。
- 在工作负载之间保持隔离。
根据对象,您可以使用以下一个或多个规则类型:
nodeSelector- 允许将 Pod 调度到使用您在此字段中指定的键值对标记的节点上。节点必须具有与所有列出的对完全匹配的标签。
affinity- 可让您使用更宽松的语法来设置与 pod 匹配的规则。关联性也允许在规则应用方面更加精细。例如,您可以指定规则是首选项,而不是要求。如果规则是首选项的,则在不满足规则时仍然会调度 pod。
容限(tolerations)- 允许将 pod 调度到具有匹配污点的节点。如果某个节点有污点(taint),则该节点只接受容许该污点的 pod。
5.2.2. 应用节点放置规则 复制链接链接已复制到粘贴板!
您可以使用命令行编辑 Subscription、HyperConverged 或 HostPathProvisioner 对象来应用节点放置规则。
先决条件
-
已安装
ocCLI 工具。 - 使用集群管理员权限登录。
流程
运行以下命令,在默认编辑器中编辑对象:
oc edit <resource_type> <resource_name> -n openshift-cnv
$ oc edit <resource_type> <resource_name> -n openshift-cnvCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存文件以使改变生效。
5.2.3. 节点放置规则示例 复制链接链接已复制到粘贴板!
您可以通过编辑 Subscription、HyperConverged 或 HostPathProvisioner 对象来为 OpenShift Virtualization 组件指定节点放置规则。
5.2.3.1. 订阅对象节点放置规则示例 复制链接链接已复制到粘贴板!
要指定 OLM 部署 OpenShift Virtualization Operator 的节点,在 OpenShift Virtualization 安装过程中编辑 Subscription 对象。
目前,您无法使用 Web 控制台为 Subscription 对象配置节点放置规则。
Subscription 对象不支持 affinity 节点放置规则。
使用 nodeSelector 规则的 Subscription 对象示例
- 1
- OLM 在带有
example.io/example-infra-key = example-infra-value的节点上部署 OpenShift Virtualization Operator。
带有 tolerations 规则的 Subscription 对象示例
- 1
- OLM 在带有
key = virtualization:NoSchedule污点的节点上部署 OpenShift Virtualization Operator。只有具有匹配容限的 pod 才会调度到这些节点上。
5.2.3.2. HyperConverged 对象节点放置规则示例 复制链接链接已复制到粘贴板!
要指定 OpenShift Virtualization 部署其组件的节点,您可以在 OpenShift Virtualization 安装过程中创建的 HyperConverged 自定义资源(CR)文件中编辑 nodePlacement 对象。
使用 nodeSelector 规则的 HyperConverged 对象示例
使用 affinity 规则的 HyperConverged 对象示例
带有 tolerations 规则的 HyperConverged 对象示例
- 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 字段指定 nodeSelector、affinity 或 tolerations 来配置节点放置规则。
带有 nodeSelector 规则的 HostPathProvisioner 对象示例
- 1
- 工作负载放置在带有
example.io/example-workloads-key = example-workloads-value的节点上。
5.3. 安装后的网络配置 复制链接链接已复制到粘贴板!
默认情况下,OpenShift Virtualization 在安装后使用单个内部 pod 网络。
安装 OpenShift Virtualization 后,您可以安装网络 Operator 并配置额外网络。
5.3.1. 安装网络 Operator 复制链接链接已复制到粘贴板!
您必须安装 Kubernetes NMState Operator,以配置 Linux 网桥网络,以进行实时迁移或从外部访问虚拟机(VM)。有关安装说明,请参阅使用 Web 控制台安装 Kubernetes NMState Operator。
您可以安装 SR-IOV Operator 来管理 SR-IOV 网络设备和网络附加。有关安装说明,请参阅安装 SR-IOV Network Operator。
您可以添加 About MetalLB 和 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。
5.3.2.2. 使用 Web 控制台创建 Linux 网桥 NAD 复制链接链接已复制到粘贴板!
您可以创建一个网络附加定义(NAD)来使用 OpenShift Container Platform web 控制台为 Pod 和虚拟机提供第 2 层网络。
Linux 网桥网络附加定义是将虚拟机连接至 VLAN 的最有效方法。
不支持在虚拟机的网络附加定义中配置 IP 地址管理(IPAM)。
流程
- 在 Web 控制台中,点 Networking → NetworkAttachmentDefinitions。
点 Create Network Attachment Definition。
注意网络附加定义必须与 pod 或虚拟机位于同一个命名空间中。
- 输入唯一 Name 和可选 Description。
- 从 Network Type 列表中选择 CNV Linux 网桥。
- 在 Bridge Name 字段输入网桥名称。
- 可选:如果资源配置了 VLAN ID,请在 VLAN Tag Number 字段中输入 ID 号。
- 可选: 选择 MAC Spoof Check 来启用 MAC spoof 过滤。此功能只允许单个 MAC 地址退出 pod,从而可以防止使用 MAC 欺骗进行的安全攻击。
- 点 Create。
5.3.3. 后续步骤 复制链接链接已复制到粘贴板!
5.3.4. 配置网络以进行实时迁移 复制链接链接已复制到粘贴板!
配置了 Linux 网桥网络后,您可以为实时迁移配置专用网络。专用的网络可最小化实时迁移期间对租户工作负载的网络饱和影响。
5.3.4.1. 为实时迁移配置专用的二级网络 复制链接链接已复制到粘贴板!
要为实时迁移配置专用的二级网络,您必须首先使用 CLI 创建桥接网络附加定义(NAD)。然后,您可以将 NetworkAttachmentDefinition 对象的名称添加到 HyperConverged 自定义资源(CR)中。
先决条件
-
已安装 OpenShift CLI(
oc)。 -
您以具有
cluster-admin角色的用户身份登录到集群。 - 每个节点至少有两个网络接口卡 (NIC)。
- 用于实时迁移的 NIC 连接到同一 VLAN。
流程
根据以下示例创建
NetworkAttachmentDefinition清单:配置文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
metadata.name-
指定
NetworkAttachmentDefinition对象的名称。 config.master- 指定要用于实时迁移的 NIC 名称。
config.type- 指定为 NAD 提供网络的 CNI 插件名称。
config.range- 为二级网络指定一个 IP 地址范围。这个范围不得与主网络的 IP 地址重叠。
运行以下命令,在默认编辑器中打开
HyperConvergedCR:oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
NetworkAttachmentDefinition对象的名称添加到HyperConvergedCR 的spec.liveMigrationConfig小节中:HyperConverged清单示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
network-
指定要用于实时迁移的 Multus
NetworkAttachmentDefinition对象的名称。
-
保存更改并退出编辑器。
virt-handlerPod 会重启并连接到二级网络。
验证
当运行虚拟机的节点置于维护模式时,虚拟机会自动迁移到集群中的另一个节点。您可以通过检查虚拟机实例(VMI)元数据中的目标 IP 地址,验证迁移是否在二级网络中发生,而不是默认 pod 网络。
oc get vmi <vmi_name> -o jsonpath='{.status.migrationState.targetNodeAddress}'$ oc get vmi <vmi_name> -o jsonpath='{.status.migrationState.targetNodeAddress}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3.4.2. 使用 Web 控制台选择专用网络 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform Web 控制台为实时迁移选择一个专用网络。
先决条件
- 为实时迁移配置了 Multus 网络。
- 为网络创建了网络附加定义。
流程
- 在 OpenShift Container Platform web 控制台中进入到 Virtualization > Overview。
- 点 Settings 选项卡,然后点 Live migration。
- 从 Live migration network 列表中选择网络。
5.3.5. 配置 SR-IOV 网络 复制链接链接已复制到粘贴板!
安装 SR-IOV Operator 后,您可以配置 SR-IOV 网络。
5.3.5.1. 配置 SR-IOV 网络设备 复制链接链接已复制到粘贴板!
SR-IOV Network Operator 把 SriovNetworkNodePolicy.sriovnetwork.openshift.io CRD 添加到 OpenShift Container Platform。您可以通过创建一个 SriovNetworkNodePolicy 自定义资源 (CR) 来配置 SR-IOV 网络设备。
在应用由 SriovNetworkNodePolicy 对象中指定的配置时,SR-IOV Operator 可能会排空节点,并在某些情况下会重启节点。仅在以下情况下重启:
-
使用 Mellanox NIC (
mlx5驱动程序) 时,每次当在一个物理功能(PF)中的虚拟功能 (VF) 数量增加时,节点都会重启。 -
使用 Intel NIC 时,只有在内核参数不包含
intel_iommu=on和iommu=pt时,才会重启。
它可能需要几分钟时间来应用配置更改。
先决条件
-
已安装 OpenShift CLI(
oc)。 -
您可以使用具有
cluster-admin角色的用户访问集群。 - 已安装 SR-IOV Network Operator。
- 集群中有足够的可用节点,用于处理从排空节点中驱除的工作负载。
- 您还没有为 SR-IOV 网络设备配置选择任何 control plane 节点。
流程
创建一个
SriovNetworkNodePolicy对象,然后在<name>-sriov-node-network.yaml文件中保存 YAML。使用配置的实际名称替换<name>。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 为 CR 对象指定一个名称。
- 2
- 指定 SR-IOV Operator 安装到的命名空间。
- 3
- 指定 SR-IOV 设备插件的资源名称。您可以为一个资源名称创建多个
SriovNetworkNodePolicy对象。 - 4
- 指定节点选择器来选择要配置哪些节点。只有所选节点上的 SR-IOV 网络设备才会被配置。SR-IOV Container Network Interface(CNI)插件和设备插件仅在所选节点上部署。
- 5
- 可选:指定一个
0到99之间的整数。较小的数值具有较高的优先权,优先级10高于优先级99。默认值为99。 - 6
- 可选:为虚拟功能(VF)的最大传输单位 (MTU) 指定一个值。最大 MTU 值可能因不同的 NIC 型号而有所不同。
- 7
- 为 SR-IOV 物理网络设备指定要创建的虚拟功能 (VF) 的数量。对于 Intel 网络接口控制器(NIC),VF 的数量不能超过该设备支持的 VF 总数。对于 Mellanox NIC,VF 的数量不能超过
127。 - 8
nicSelector映射为 Operator 选择要配置的以太网设备。您不需要为所有参数指定值。注意建议您以足够的准确度来识别以太网适配器,以便尽量减小意外选择其他以太网设备的可能性。如果指定了
rootDevices,则必须同时为vendor、deviceID或pfNames指定一个值。如果同时指定了
pfNames和rootDevices,请确保它们指向同一个设备。- 9
- 可选:指定 SR-IOV 网络设备的厂商十六进制代码。允许的值只能是
8086或15b3。 - 10
- 可选:指定 SR-IOV 网络设备的设备十六进制代码。允许的值只能是
158b、1015、1017。 - 11
- 可选:参数接受包括以太网设备的一个或多个物理功能 (PF) 的数组。
- 12
- 参数接受一个包括一个或多个 PCI 总线地址,用于以太网设备的物理功能的数组。使用以下格式提供地址:
0000:02:00.1。 - 13
- OpenShift Virtualization 中的虚拟功能需要
vfio-pci驱动程序类型。 - 14
- 可选:指定是否启用远程直接访问(RDMA)模式。对于 Mellanox 卡,请将
isRdma设置为false。默认值为false。注意如果将
RDMA标记设定为true,您可以继续使用启用了 RDMA 的 VF 作为普通网络设备。设备可在其中的一个模式中使用。
-
可选:将 SR-IOV 功能的集群节点标记为
SriovNetworkNodePolicy.Spec.NodeSelector(如果它们还没有标记)。有关标记节点的更多信息,请参阅"了解如何更新节点上的标签"。 创建
SriovNetworkNodePolicy对象:oc create -f <name>-sriov-node-network.yaml
$ oc create -f <name>-sriov-node-network.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
<name>指定这个配置的名称。在应用配置更新后,
sriov-network-operator命名空间中的所有 Pod 都会变为Running状态。要验证是否已配置了 SR-IOV 网络设备,请输入以下命令。将
<node_name>替换为带有您刚才配置的 SR-IOV 网络设备的节点名称。oc get sriovnetworknodestates -n openshift-sriov-network-operator <node_name> -o jsonpath='{.status.syncStatus}'$ oc get sriovnetworknodestates -n openshift-sriov-network-operator <node_name> -o jsonpath='{.status.syncStatus}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3.6. 后续步骤 复制链接链接已复制到粘贴板!
5.3.7. 使用 Web 控制台启用负载均衡器服务创建 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform web 控制台为虚拟机(VM)创建负载均衡器服务。
先决条件
- 已为集群配置负载均衡器。
-
以具有
cluster-admin角色的用户身份登录。 - 为网络创建了网络附加定义。
流程
- 进入到 Virtualization → Overview。
- 在 Settings 选项卡中,点 Cluster。
- 展开 General settings 和 SSH 配置。
- 将 SSH over LoadBalancer 服务 设置为 on。
5.3.8. 配置到 cdi-uploadproxy 服务的额外路由 复制链接链接已复制到粘贴板!
作为集群管理员,您可以配置到 cdi-uploadproxy 服务的额外路由,以允许用户从集群外部上传虚拟机镜像。
先决条件
-
已安装 OpenShift CLI(
oc)。 -
您以具有
cluster-admin角色的用户身份登录到集群。
流程
运行以下命令,配置到外部主机的路由:
oc create route reencrypt <route_name> -n openshift-cnv \ --insecure-policy=Redirect \ --hostname=<host_name_or_address> \ --service=cdi-uploadproxy$ oc create route reencrypt <route_name> -n openshift-cnv \ --insecure-policy=Redirect \ --hostname=<host_name_or_address> \ --service=cdi-uploadproxyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
- <route_name>
- 指定要分配给此自定义路由的名称。
- <host_name_or_address>
- 指定提供镜像上传访问权限的外部主机的完全限定域名或 IP 地址。
运行以下命令来注解路由。这样可确保在轮转证书时注入正确的 Containerized Data Importer (CDI) CA 证书:
oc annotate route <route_name> -n openshift-cnv \ operator.cdi.kubevirt.io/injectUploadProxyCert="true"$ oc annotate route <route_name> -n openshift-cnv \ operator.cdi.kubevirt.io/injectUploadProxyCert="true"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
- <route_name>
- 您创建的路由的名称。
5.4. 安装后存储配置 复制链接链接已复制到粘贴板!
以下存储配置任务是必需的:
可选: 您可以使用 hostpath 置备程序(HPP)配置本地存储。
如需了解更多选项,请参阅存储配置概述,包括配置 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 参数设置为 WaitForFirstConsumer 的 StorageClass 值,PV 的绑定和置备会延迟到 pod 使用 PVC。
流程
创建
storageclass_csi.yaml文件来定义存储类:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存文件并退出。
运行以下命令来创建
StorageClass对象:oc create -f storageclass_csi.yaml
$ oc create -f storageclass_csi.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.5. 配置更高的虚拟机工作负载密度 复制链接链接已复制到粘贴板!
您可以通过过量使用内存(RAM)来增加节点上的虚拟机(VM)的数量。在以下情况下,增加虚拟机工作负载密度非常有用:
- 您有许多类似的工作负载。
- 您有没有被充分利用的工作负载。
内存过量使用可能会在高度使用的系统中降低工作负载性能。
5.5.1. 使用 wasp-agent 来提高虚拟机工作负载密度 复制链接链接已复制到粘贴板!
wasp-agent 组件通过将交换资源分配给 worker 节点来实现内存过量使用。它还管理节点因高交换 I/O 流量或高利用率而面临风险时进行 pod 驱除。
交换资源只能分配给 Burstable 服务质量 (QoS) 类的虚拟机工作负载 (VM pod)。属于虚拟机的 Guaranteed QoS 类和任何 QoS 类的 pod 不能交换资源。
有关 QoS 类的描述,请参阅为 Pod 配置服务质量 (Kubernetes 文档)。
在 VM 清单中使用 spec.domain.resources.requests.memory 禁用内存过量使用配置。使用 spec.domain.memory.guest 替代。
先决条件
-
已安装 OpenShift CLI(
oc)。 -
使用
cluster-admin角色登录到集群。 - 定义内存过量使用比率。
- 节点属于 worker 池。
wasp-agent 组件部署开放容器项目 (OCI) hook,以启用节点级别上容器的交换使用情况。低级性质要求 DaemonSet 对象具有特权。
流程
将
kubelet服务配置为允许交换使用:使用以下示例中显示的参数创建或编辑
KubeletConfig文件:KubeletConfig文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,等待 worker 节点与新配置同步:
$ oc wait mcp worker --for condition=Updated=True --timeout=-1s
$ oc wait mcp worker --for condition=Updated=True --timeout=-1sCopy to Clipboard Copied! Toggle word wrap Toggle overflow
通过创建
MachineConfig对象来置备 swap。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为了在出现最糟糕的情况时有足够的交换空间,请确保置备的交换空间的数量最少与过量使用 RAM 相同。使用以下公式计算节点上置备的 swap 空间量:
NODE_SWAP_SPACE = NODE_RAM * (MEMORY_OVER_COMMIT_PERCENT / 100% - 1)
NODE_SWAP_SPACE = NODE_RAM * (MEMORY_OVER_COMMIT_PERCENT / 100% - 1)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如
NODE_SWAP_SPACE = 16 GB * (150% / 100% - 1) = 16 GB * (1.5 - 1) = 16 GB * (0.5) = 8 GBNODE_SWAP_SPACE = 16 GB * (150% / 100% - 1) = 16 GB * (1.5 - 1) = 16 GB * (0.5) = 8 GBCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建特权服务帐户:
oc adm new-project wasp
$ oc adm new-project waspCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc create sa -n wasp wasp
$ oc create sa -n wasp waspCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc create clusterrolebinding wasp --clusterrole=cluster-admin --serviceaccount=wasp:wasp
$ oc create clusterrolebinding wasp --clusterrole=cluster-admin --serviceaccount=wasp:waspCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc adm policy add-scc-to-user -n wasp privileged -z wasp
$ oc adm policy add-scc-to-user -n wasp privileged -z waspCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,等待 worker 节点与新配置同步:
$ oc wait mcp worker --for condition=Updated=True --timeout=-1s
$ oc wait mcp worker --for condition=Updated=True --timeout=-1sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,确定 wasp 代理镜像的 pull URL:
oc get csv -n openshift-cnv -l=operators.coreos.com/kubevirt-hyperconverged.openshift-cnv -ojson | jq '.items[0].spec.relatedImages[] | select(.name|test(".*wasp-agent.*")) | .image'$ oc get csv -n openshift-cnv -l=operators.coreos.com/kubevirt-hyperconverged.openshift-cnv -ojson | jq '.items[0].spec.relatedImages[] | select(.name|test(".*wasp-agent.*")) | .image'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过创建一个
DaemonSet对象来部署wasp-agent,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
image值替换为上一步中的镜像 URL
通过创建
PrometheusRule对象来部署警报规则。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,将
cluster-monitoring标签添加到wasp命名空间中:oc label namespace wasp openshift.io/cluster-monitoring="true"
$ oc label namespace wasp openshift.io/cluster-monitoring="true"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Web 控制台或 CLI 在 OpenShift Virtualization 中启用内存过量使用。
Web 控制台
- 在 OpenShift Container Platform web 控制台中,进入 Virtualization → Overview → Settings → General settings → Memory density。
- 将 Enable memory density 设置为 on。
CLI
配置 OpenShift Virtualization 以启用更高的内存密度并设置过量分配率:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 成功输出
hyperconverged.hco.kubevirt.io/kubevirt-hyperconverged patched
hyperconverged.hco.kubevirt.io/kubevirt-hyperconverged patchedCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要验证
wasp-agent的部署,请运行以下命令:oc rollout status ds wasp-agent -n wasp
$ oc rollout status ds wasp-agent -n waspCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果部署成功,则会显示以下信息:
输出示例
daemon set "wasp-agent" successfully rolled out
daemon set "wasp-agent" successfully rolled outCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要验证是否正确置备了 swap,请完成以下步骤:
运行以下命令,查看 worker 节点列表:
oc get nodes -l node-role.kubernetes.io/worker
$ oc get nodes -l node-role.kubernetes.io/workerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,从列表中选择节点并显示其内存用量:
oc debug node/<selected_node> -- free -m
$ oc debug node/<selected_node> -- free -m1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<selected_node>替换为节点名称。
如果置备了交换,则
Swap:行会显示大于零的数量。Expand 表 5.1. 输出示例 total
使用的
free
shared
buff/cache
可用
Mem:
31846
23155
1044
6014
14483
8690
Swap:
8191
2337
5854
运行以下命令验证 OpenShift Virtualization 内存过量使用配置:
oc -n openshift-cnv get HyperConverged/kubevirt-hyperconverged -o jsonpath='{.spec.higherWorkloadDensity}{"\n"}'$ oc -n openshift-cnv get HyperConverged/kubevirt-hyperconverged -o jsonpath='{.spec.higherWorkloadDensity}{"\n"}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
{"memoryOvercommitPercentage":150}{"memoryOvercommitPercentage":150}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 返回的值必须与之前配置的值匹配。
5.5.2. 删除 wasp-agent 组件 复制链接链接已复制到粘贴板!
如果您不再需要内存过量使用,您可以从集群中删除 wasp-agent 组件和相关资源。
先决条件
-
使用
cluster-admin角色登录到集群。 -
已安装 OpenShift CLI(
oc)。
流程
删除
wasp-agentDaemonSet:oc delete daemonset wasp-agent -n wasp
$ oc delete daemonset wasp-agent -n waspCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果部署,删除警报规则:
oc delete prometheusrule wasp-rules -n wasp
$ oc delete prometheusrule wasp-rules -n waspCopy to Clipboard Copied! Toggle word wrap Toggle overflow 另外,如果没有其他资源,删除 is
p命名空间:oc delete namespace wasp
$ oc delete namespace waspCopy to Clipboard Copied! Toggle word wrap Toggle overflow 恢复内存过量使用配置:
oc -n openshift-cnv patch HyperConverged/kubevirt-hyperconverged \ --type='json' \ -p='[{"op": "remove", "path": "/spec/higherWorkloadDensity"}]'$ oc -n openshift-cnv patch HyperConverged/kubevirt-hyperconverged \ --type='json' \ -p='[{"op": "remove", "path": "/spec/higherWorkloadDensity"}]'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除置备交换内存的
MachineConfig:oc delete machineconfig 90-worker-swap
$ oc delete machineconfig 90-worker-swapCopy to Clipboard Copied! Toggle word wrap Toggle overflow 删除关联的
KubeletConfig:oc delete kubeletconfig custom-config
$ oc delete kubeletconfig custom-configCopy to Clipboard Copied! Toggle word wrap Toggle overflow 等待 worker 节点协调:
oc wait mcp worker --for condition=Updated=True --timeout=-1s
$ oc wait mcp worker --for condition=Updated=True --timeout=-1sCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
确认
wasp-agentDaemonSet 已被删除:oc get daemonset -n wasp
$ oc get daemonset -n waspCopy to Clipboard Copied! Toggle word wrap Toggle overflow 不应列出
wasp-agent。确认节点上不再启用 swap:
oc debug node/<selected_node> -- free -m
$ oc debug node/<selected_node> -- free -mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 确保
Swap:行显示0或没有交换空间显示为 provisioned。
5.5.3. wasp-agent 使用的 Pod 驱除条件 复制链接链接已复制到粘贴板!
当系统大量加载且节点面临风险时,wasp 代理会管理 pod 驱除。如果满足以下条件之一,则会触发驱除:
- 高交换 I/O 流量
当与交换相关的 I/O 流量过高时,会满足此条件。
状况
averageSwapInPerSecond > maxAverageSwapInPagesPerSecond && averageSwapOutPerSecond > maxAverageSwapOutPagesPerSecond
averageSwapInPerSecond > maxAverageSwapInPagesPerSecond && averageSwapOutPerSecond > maxAverageSwapOutPagesPerSecondCopy to Clipboard Copied! Toggle word wrap Toggle overflow 默认情况下,
maxAverageSwapInPagesPerSecond和maxAverageSwapOutPagesPerSecond设置为 1000 页。计算平均的默认时间间隔是 30 秒。- 高 swap 使用率
当交换利用率过高时满足此条件,导致当前虚拟内存用量超过因数的阈值。
MachineConfig对象中的NODE_SWAP_SPACE设置可能会影响这种情况。状况
nodeWorkingSet + nodeSwapUsage < totalNodeMemory + totalSwapMemory × thresholdFactor
nodeWorkingSet + nodeSwapUsage < totalNodeMemory + totalSwapMemory × thresholdFactorCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.5.3.1. 环境变量 复制链接链接已复制到粘贴板!
您可以使用以下环境变量来调整用于计算驱除条件的值:
| 环境变量 | 功能 |
|
|
设置 |
|
|
设置 |
|
|
设置用于计算高 swap 使用率的 |
|
| 设置计算平均交换使用量的时间间隔。 |
第 6 章 更新 复制链接链接已复制到粘贴板!
6.1. 更新 OpenShift Virtualization 复制链接链接已复制到粘贴板!
了解如何使 OpenShift Virtualization 更新和与 OpenShift Container Platform 兼容。
6.1.1. 关于更新 OpenShift Virtualization 复制链接链接已复制到粘贴板!
安装 OpenShift Virtualization 时,您可以选择更新频道和批准策略。更新频道决定了 OpenShift Virtualization 将更新至的版本。批准策略设置决定了是自动进行更新,或是需要手动批准。这两个设置对支持性都有影响。
6.1.1.1. 推荐的设置 复制链接链接已复制到粘贴板!
要使环境仍然会被支持,请使用以下设置:
- 更新频道:stable
- 批准策略:Automatic
使用这些设置,当在 stable 频道中出现了一个新版本的 Operator 时,更新过程会自动开始。这样可确保 OpenShift Virtualization 和 OpenShift Container Platform 的版本保持兼容,并且您的 OpenShift Virtualization 版本适合生产环境。
只有在运行对应的 OpenShift Container Platform 版本时,才会支持 OpenShift Virtualization 的每个次版本。例如,您必须在 OpenShift Container Platform 4.17 上运行 OpenShift Virtualization 4.17。
6.1.1.2. 预期的情况 复制链接链接已复制到粘贴板!
- 更新完成所需时间取决于您的网络连接情况。大部分自动更新可在十五分钟内完成。
- 更新 OpenShift Virtualization 不会中断网络连接。
- 数据卷及其关联的持久性卷声明会在更新过程中保留。
如果您的虚拟机正在运行,使用 hostpath 置备程序存储,则无法实时迁移,并可能会阻止 OpenShift Container Platform 集群更新。
作为临时解决方案,您可以重新配置虚拟机以便在集群更新过程中自动关闭它们。将 evictionStrategy 字段设置为 None,将 runStrategy 字段设置为 Always。
6.1.1.3. 更新如何工作 复制链接链接已复制到粘贴板!
- 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 更新至下一个次版本。
6.1.1.4. RHEL 9 兼容性 复制链接链接已复制到粘贴板!
OpenShift Virtualization 4.17 基于 Red Hat Enterprise Linux (RHEL) 9。您可以根据标准 OpenShift Virtualization 更新过程,从基于 RHEL 8 的版本升级到 OpenShift Virtualization 4.17。不需要额外的步骤。
与之前的版本一样,您可以在不中断运行工作负载的情况下执行更新。OpenShift Virtualization 4.17 支持从 RHEL 8 节点实时迁移到 RHEL 9 节点。
6.1.1.4.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 更新的状态,请观察集群服务版本(CSV) PHASE。此外您还可在 web 控制台中,或运行此处提供的命令来监控 CSV 状况。
PHASE 和状况值均是基于可用信息的近似值。
先决条件
-
以具有
cluster-admin角色的用户身份登录集群。 -
安装 OpenShift CLI(
oc)。
流程
运行以下命令:
oc get csv -n openshift-cnv
$ oc get csv -n openshift-cnvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 查看输出,检查
PHASE字段。例如:输出示例
VERSION REPLACES PHASE 4.9.0 kubevirt-hyperconverged-operator.v4.8.2 Installing 4.9.0 kubevirt-hyperconverged-operator.v4.9.0 Replacing
VERSION REPLACES PHASE 4.9.0 kubevirt-hyperconverged-operator.v4.8.2 Installing 4.9.0 kubevirt-hyperconverged-operator.v4.9.0 ReplacingCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:运行以下命令来监控所有 OpenShift Virtualization 组件状况的聚合状态:
oc get hyperconverged kubevirt-hyperconverged -n openshift-cnv \ -o=jsonpath='{range .status.conditions[*]}{.type}{"\t"}{.status}{"\t"}{.message}{"\n"}{end}'$ oc get hyperconverged kubevirt-hyperconverged -n openshift-cnv \ -o=jsonpath='{range .status.conditions[*]}{.type}{"\t"}{.status}{"\t"}{.message}{"\n"}{end}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 成功升级后会输出以下内容:
输出示例
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
ReconcileComplete True Reconcile completed successfully Available True Reconcile completed successfully Progressing False Reconcile completed successfully Degraded False Reconcile completed successfully Upgradeable True Reconcile completed successfullyCopy to Clipboard Copied! Toggle word wrap Toggle overflow
6.1.3. VM 工作负载更新 复制链接链接已复制到粘贴板!
更新 OpenShift Virtualization 时,虚拟机工作负载(包括 libvirt、virt-launcher )和 qemu (如果支持实时迁移)会自动更新。
每个虚拟机均有一个 virt-launcher pod,用于运行虚拟机实例(VMI)。virt-launcher pod 运行一个 libvirt 实例,用于管理虚拟机(VM)进程。
您可以通过编辑 HyperConverged 自定义资源 (CR) 的 spec.workloadUpdateStrategy 小节来配置工作负载的更新方式。可用的工作负载更新方法有两种: LiveMigrate 和 Evict。
因为 Evict 方法关闭 VMI pod,所以只启用 LiveMigrate 更新策略。
当 LiveMigrate 是唯一启用的更新策略时:
- 支持实时迁移的 VMI 会在更新过程中进行迁移。VM 客户机会进入启用了更新组件的新 pod。
不支持实时迁移的 VMI 不会中断或更新。
-
如果 VMI 有
LiveMigrate驱除策略,但没有支持实时迁移。
-
如果 VMI 有
如果您同时启用 LiveMigrate 和 Evict :
-
支持实时迁移的 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.3.1. 配置工作负载更新方法 复制链接链接已复制到粘贴板!
您可以通过编辑 HyperConverged 自定义资源(CR)来配置工作负载更新方法。
先决条件
要使用实时迁移作为更新方法,您必须首先在集群中启用实时迁移。
注意如果
VirtualMachineInstanceCR 包含evictionStrategy: LiveMigrate,且虚拟机实例(VMI)不支持实时迁移,则 VMI 将不会更新。
流程
要在默认编辑器中打开
HyperConvergedCR,请运行以下命令:oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑
HyperConvergedCR 的workloadUpdateStrategy小节。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 可用于执行自动化工作负载更新的方法。可用值为
LiveMigrate和Evict。如果您如本例所示启用这两个选项,则更新会为不支持实时迁移的 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方法。
注意您可以通过编辑
HyperConvergedCR 的spec.liveMigrationConfig小节来配置实时迁移限制和超时。- 若要应用您的更改,请保存并退出编辑器。
6.1.3.2. 查看过时的虚拟机工作负载 复制链接链接已复制到粘贴板!
您可以使用 CLI 查看过时的虚拟机(VM)工作负载列表。
如果集群中存在过时的虚拟化 pod,OutdatedVirtualMachineInstanceWorkloads 警报会触发。
流程
要查看过时的虚拟机实例 (VMI) 列表,请运行以下命令:
oc get vmi -l kubevirt.io/outdatedLauncherImage --all-namespaces
$ oc get vmi -l kubevirt.io/outdatedLauncherImage --all-namespacesCopy to Clipboard Copied! Toggle word wrap Toggle overflow
为确保 VMI 自动更新,请配置工作负载更新。
6.1.4. Control Plane Only 更新 复制链接链接已复制到粘贴板!
每个带有偶数的 OpenShift Container Platform 次版本都是延长更新支持(EUS)版本。但是,Kubernetes 设计了串行次版本更新,因此您无法直接从一个 EUS 版本更新到下一个版本。EUS 到 EUS 的更新从将 OpenShift Virtualization 更新至下一个奇数次版本的最新 z-stream。接下来,将 OpenShift Container Platform 更新至目标 EUS 版本。当 OpenShift Container Platform 更新成功时,OpenShift Virtualization 的对应更新将变为可用。现在,您可以将 OpenShift Virtualization 更新至目标 EUS 版本。
您可以将 OpenShift Virtualization 直接更新至当前次版本的最新 z-stream 版本,而无需应用每个中间 z-stream 更新。
有关 EUS 版本的更多信息,请参阅 Red Hat OpenShift Container Platform 生命周期政策。
6.1.4.1. 先决条件 复制链接链接已复制到粘贴板!
在开始 Control Plane Only 更新前,您必须:
- 在启动 Control Plane Only 更新前,暂停 worker 节点的机器配置池,以便 worker 不会重启两次。
- 在开始更新过程前禁用自动工作负载更新。这是为了防止 OpenShift Virtualization 迁移或驱除虚拟机(VM),直到您升级到目标 EUS 版本。
默认情况下,当您更新 OpenShift Virtualization Operator 时,OpenShift Virtualization 会自动更新工作负载,如 virt-launcher pod。您可以在 HyperConverged 自定义资源的 spec.workloadUpdateStrategy 小节中配置此行为。
了解有关 执行 Control Plane Only 更新的更多信息。
6.1.4.2. 防止在 Control Plane Only 更新过程中进行工作负载更新 复制链接链接已复制到粘贴板!
当您从一个延长更新支持(EUS)版本升级到下一个版本时,您必须手动禁用自动工作负载更新,以防止 OpenShift Virtualization 在更新过程中迁移或驱除工作负载。
在 OpenShift Container Platform 4.16 中,底层 Red Hat Enterprise Linux CoreOS (RHCOS) 升级至 Red Hat Enterprise Linux (RHEL) 版本 9.4。要正确运行,集群中的所有 virt-launcher pod 都需要使用相同的 RHEL 版本。
从早期版本升级到 OpenShift Container Platform 4.16 后,重新启用 OpenShift Virtualization 中的工作负载更新,以使 virt-launcher pod 更新。在升级到下一个 OpenShift Container Platform 版本前,请验证所有 VMI 是否都使用最新的工作负载:
oc get kv kubevirt-kubevirt-hyperconverged -o json -n openshift-cnv | jq .status.outdatedVirtualMachineInstanceWorkloads
$ oc get kv kubevirt-kubevirt-hyperconverged -o json -n openshift-cnv | jq .status.outdatedVirtualMachineInstanceWorkloads
如果上一命令返回的值大于 0,会列出具有过时 virt-launcher pod 的所有 VMI,并开始实时迁移来将它们更新至一个新版本:
oc get vmi -l kubevirt.io/outdatedLauncherImage --all-namespaces
$ oc get vmi -l kubevirt.io/outdatedLauncherImage --all-namespaces
有关支持的 OpenShift Container Platform 发行版本和使用 RHEL 版本的列表,请参阅 RHCOS 和 OpenShift Container Platform 使用的 RHEL 版本。
先决条件
- 您正在运行 EUS 版本 OpenShift Container Platform,并希望升级到下一个 EUS 版本。还没有同时更新至奇数版本。
- 您可以阅读"准备执行 Control Plane only update",并了解与 OpenShift Container Platform 集群相关的注意事项和要求。
- 按照 OpenShift Container Platform 文档的指示暂停 worker 节点的机器配置池。
- 建议您使用默认的 Automatic 批准策略。如果使用 Manual 批准策略,您必须批准 web 控制台中的所有待处理的更新。如需了解更多详细信息,请参阅"需要批准待处理的 Operator 更新"部分。
流程
运行以下命令并记录
workloadUpdateMethods配置:oc get kv kubevirt-kubevirt-hyperconverged \ -n openshift-cnv -o jsonpath='{.spec.workloadUpdateStrategy.workloadUpdateMethods}'$ oc get kv kubevirt-kubevirt-hyperconverged \ -n openshift-cnv -o jsonpath='{.spec.workloadUpdateStrategy.workloadUpdateMethods}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令关闭所有工作负载更新方法:
oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv \ --type json -p '[{"op":"replace","path":"/spec/workloadUpdateStrategy/workloadUpdateMethods", "value":[]}]'$ oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv \ --type json -p '[{"op":"replace","path":"/spec/workloadUpdateStrategy/workloadUpdateMethods", "value":[]}]'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
hyperconverged.hco.kubevirt.io/kubevirt-hyperconverged patched
hyperconverged.hco.kubevirt.io/kubevirt-hyperconverged patchedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在继续操作前,请确保
HyperConvergedOperator 为Upgradeable。输入以下命令并监控输出:oc get hyperconverged kubevirt-hyperconverged -n openshift-cnv -o json | jq ".status.conditions"
$ oc get hyperconverged kubevirt-hyperconverged -n openshift-cnv -o json | jq ".status.conditions"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例 6.1. 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- OpenShift Virtualization Operator 具有
Upgradeable状态。
手动将集群从源 EUS 版本升级到下一个 OpenShift Container Platform 次要版本:
oc adm upgrade
$ oc adm upgradeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证
运行以下命令检查当前版本:
oc get clusterversion
$ oc get clusterversionCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意将 OpenShift Container Platform 更新至下一版本是更新 OpenShift Virtualization 的先决条件。如需了解更多详细信息,请参阅 OpenShift Container Platform 文档中的"更新集群"部分。
更新 OpenShift Virtualization。
- 使用默认的 Automatic 批准策略,OpenShift Virtualization 会在更新 OpenShift Container Platform 后自动更新到对应的版本。
- 如果使用 Manual 批准策略,请使用 Web 控制台批准待处理的更新。
运行以下命令监控 OpenShift Virtualization 更新:
oc get csv -n openshift-cnv
$ oc get csv -n openshift-cnvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,确认 OpenShift Virtualization 已成功更新至非 EUS 版本的最新 z-stream 版本:
oc get hyperconverged kubevirt-hyperconverged -n openshift-cnv -o json | jq ".status.versions"
$ oc get hyperconverged kubevirt-hyperconverged -n openshift-cnv -o json | jq ".status.versions"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 等待
HyperConvergedOperator 在执行下一次更新前具有Upgradeable状态。输入以下命令并监控输出:oc get hyperconverged kubevirt-hyperconverged -n openshift-cnv -o json | jq ".status.conditions"
$ oc get hyperconverged kubevirt-hyperconverged -n openshift-cnv -o json | jq ".status.conditions"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 将 OpenShift Container Platform 更新至目标 EUS 版本。
通过检查集群版本确认更新是否成功:
oc get clusterversion
$ oc get clusterversionCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 OpenShift Virtualization 更新至目标 EUS 版本。
- 使用默认的 Automatic 批准策略,OpenShift Virtualization 会在更新 OpenShift Container Platform 后自动更新到对应的版本。
- 如果使用 Manual 批准策略,请使用 Web 控制台批准待处理的更新。
运行以下命令监控 OpenShift Virtualization 更新:
oc get csv -n openshift-cnv
$ oc get csv -n openshift-cnvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 当
VERSION字段与目标 EUS 版本匹配并且PHASE字段显示为Succeeded时,更新已完成。使用以下命令恢复您从第 1 步中记录的
workloadUpdateMethods配置:oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv --type json -p \ "[{\"op\":\"add\",\"path\":\"/spec/workloadUpdateStrategy/workloadUpdateMethods\", \"value\":{WorkloadUpdateMethodConfig}}]"$ oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv --type json -p \ "[{\"op\":\"add\",\"path\":\"/spec/workloadUpdateStrategy/workloadUpdateMethods\", \"value\":{WorkloadUpdateMethodConfig}}]"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
hyperconverged.hco.kubevirt.io/kubevirt-hyperconverged patched
hyperconverged.hco.kubevirt.io/kubevirt-hyperconverged patchedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证
运行以下命令检查虚拟机迁移的状态:
oc get vmim -A
$ oc get vmim -ACopy to Clipboard Copied! Toggle word wrap Toggle overflow
后续步骤
- 取消暂停每个计算节点的机器配置池。
6.1.5. 高级选项 复制链接链接已复制到粘贴板!
对于大多数 OpenShift Virtualization 安装,建议使用 stable 发行频道和 Automatic 批准策略。只有在了解相关风险的情况下才使用其他设置。
6.1.5.1. 更改更新设置 复制链接链接已复制到粘贴板!
您可以使用 Web 控制台更改 OpenShift Virtualization Operator 订阅的更新频道和批准策略。
先决条件
- 已安装 OpenShift Virtualization Operator。
- 有管理员权限。
流程
- 点 Operators → Installed Operators。
- 从列表中选择 OpenShift Virtualization。
- 点 Subscription 标签页。
- 在 Subscription details 部分中,点您要更改的设置。例如,要将批准策略从 Manual 更改为 Automatic,点 Manual。
- 在打开的窗口中,选择新的更新频道或批准策略。
- 点击 Save。
6.1.5.2. 手动批准策略 复制链接链接已复制到粘贴板!
如果使用 Manual 批准策略,则必须手动批准每个待处理的更新。如果 OpenShift Container Platform 和 OpenShift Virtualization 更新不同步,您的集群将无法被支持。为了避免对集群的可支持性和功能的风险,请使用 Automatic 批准策略。
如果需要使用 Manual 批准策略,则在有可用的 Operator 更新后立即批准待处理的 Operator 更新来保持可支持的集群。
6.1.5.3. 手动批准待处理的 Operator 更新 复制链接链接已复制到粘贴板!
如果已安装的 Operator 的订阅被设置为 Manual,则当其当前更新频道中发布新更新时,在开始安装前必须手动批准更新。
先决条件
- 之前使用 Operator Lifecycle Manager(OLM)安装的 Operator。
流程
- 在 OpenShift Container Platform Web 控制台的 Administrator 视角中,进入 Operators → Installed Operators。
- 处于待定更新的 Operator 会显示 Upgrade available 状态。点您要更新的 Operator 的名称。
- 点 Subscription 标签页。任何需要批准的更新都会在 Upgrade status 旁边显示。例如:它可能会显示 1 requires approval。
- 点 1 requires approval,然后点 Preview Install Plan。
- 检查列出可用于更新的资源。在满意后,点 Approve。
- 返回到 Operators → Installed Operators 页面,以监控更新的进度。完成后,状态会变为 Succeeded 和 Up to date。
6.1.6. 早期访问版本 复制链接链接已复制到粘贴板!
您可以通过订阅您的 OpenShift Virtualization 版本的 candidate 更新频道来获得开发中的构建访问权限。这些版本尚未由红帽完全测试,且不受支持,但您可以在非生产集群上使用它们测试为那个版本开发的功能和程序错误修复。
与底层 OpenShift Container Platform 版本匹配的 stable 频道是完全测试的,适用于生产环境的系统。您可以在 Operator Hub 中的 stable 和 candidate 频道间切换。但是,红帽并没有测试从 candidate 频道发行版本升级到 stable 频道发行版本。
有些 candidate 版本被提升到 stable 频道。但是,仅存在于 候选 频道中的发行版本可能不包含所有将正式发布(GA)的功能,在 GA 之前可能会删除候选构建中的一些功能。另外,候选版本可能不会向后续的 GA 版本提供升级路径。
candidate 频道仅适用于销毁和重新创建集群可接受的目的。
第 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.1.3. 为金级镜像配置自定义命名空间 复制链接链接已复制到粘贴板!
金级镜像的默认命名空间是 openshift-virtualization-os-images,但您可以配置自定义命名空间来限制用户对默认引导源的访问。
7.1.1.3.1. 使用 Web 控制台为金级镜像配置自定义命名空间 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform Web 控制台为集群中的金级镜像配置自定义命名空间。
流程
- 在 web 控制台中,选择 Virtualization → Overview。
- 选择 Settings 选项卡。
- 在 Cluster 选项卡中,选择 General settings → Bootable volumes 项目。
选择要用于金级镜像的命名空间。
- 如果已创建了命名空间,请从 Project 列表中选择它。
如果您没有创建命名空间,请滚动到列表的底部,然后点 Create project。
- 在 Create project 对话框的 Name 字段中输入您的新命名空间的名称。
- 点 Create。
7.1.1.3.2. 使用 CLI 为金级镜像配置自定义命名空间 复制链接链接已复制到粘贴板!
您可以通过在 HyperConverged 自定义资源 (CR) 中设置 spec.commonBootImageNamespace 字段,为集群中的金级镜像配置自定义命名空间。
先决条件
-
已安装 OpenShift CLI(
oc)。 - 您创建了用于金级镜像的命名空间。
流程
运行以下命令,在默认编辑器中打开
HyperConvergedCR:oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 通过更新
spec.commonBootImageNamespace字段的值来配置自定义命名空间:配置文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 用于金级镜像的命名空间。
- 保存更改并退出编辑器。
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. 所需属性 复制链接链接已复制到粘贴板!
配置实例类型时,您必须定义 cpu 和 memory 属性。其他属性是可选的。
从实例类型创建虚拟机时,您无法覆盖实例类型中定义的任何参数。
因为实例类型需要定义的 CPU 和内存属性,所以 OpenShift Virtualization 始终会在从实例类型创建虚拟机时拒绝这些资源的额外请求。
您可以手动创建实例类型清单。例如:
带有必填字段的 YAML 文件示例
您可以使用 virtctl CLI 实用程序创建实例类型清单。例如:
带有必填字段的 virtctl 命令示例
virtctl create instancetype --cpu 2 --memory 256Mi
$ virtctl create instancetype --cpu 2 --memory 256Mi
其中:
--cpu <value>- 指定要分配给客户机的 vCPU 数量。必需。
--memory <value>- 指定要分配给客户机的内存量。必需。
您可以运行以下命令来立即从新清单中创建对象:
virtctl create instancetype --cpu 2 --memory 256Mi | oc apply -f -
$ virtctl create instancetype --cpu 2 --memory 256Mi | oc apply -f -
7.1.2.1.2. 可选属性 复制链接链接已复制到粘贴板!
除了所需的 cpu 和 memory 属性外,您还可以在 VirtualMachineInstancetypeSpec 中包含以下可选属性:
annotations- 列出应用到虚拟机的注解。
gpus- 列出用于 passthrough 的 vGPU。
hostDevices- 列出用于透传的主机设备。
ioThreadsPolicy- 定义用于管理专用磁盘访问的 IO 线程策略。
launchSecurity- 配置安全加密虚拟化 (SEV)。
nodeSelector- 指定节点选择器来控制调度此虚拟机的节点。
schedulerName- 定义用于此虚拟机的自定义调度程序,而不是默认的调度程序。
7.1.2.2. 预定义的实例类型 复制链接链接已复制到粘贴板!
OpenShift Virtualization 包括一组预定义的实例类型,称为 common-instancetypes。一些会针对特定工作负载进行定制,另一些则与工作负载无关。
这些实例类型资源根据其系列、版本和大小命名。大小值使用 . 分隔符,范围从 nano 到 8xlarge。
| 使用案例 | 系列 | 特性 | vCPU 与内存的比率 | 资源示例 |
|---|---|---|---|---|
| Universal | U |
| 1:4 |
|
| 过量使用 | O |
| 1:4 |
|
| compute-exclusive | CX |
| 1:2 |
|
| NVIDIA GPU | GN |
| 1:4 |
|
| 内存密集型 | M |
| 1:8 |
|
| Network-intensive | N |
| 1:2 |
|
7.1.2.3. 使用 virtctl 工具创建清单 复制链接链接已复制到粘贴板!
您可使用 virtctl CLI 实用程序简化为虚拟机、虚拟机实例类型和虚拟机首选项创建清单。如需更多信息,请参阅虚拟机清单创建命令。
如果您有 VirtualMachine 清单,可以从命令行创建虚拟机。
7.1.2.4. 使用 Web 控制台从实例类型创建虚拟机 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform web 控制台从实例类型创建虚拟机 (VM)。您还可以通过复制现有快照或克隆虚拟机,来使用 Web 控制台创建虚拟机。
您可以从可用可引导卷列表创建虚拟机。您可以在列表中添加基于 Linux 或 Windows 的卷。
流程
在 Web 控制台中,进入到 Virtualization → Catalog。
InstanceTypes 选项卡默认为打开。
选择以下选项之一:
从列表中选择合适的可引导卷。如果列表已被截断,请点 Show all 按钮来显示整个列表。
注意可引导的卷表仅列出
openshift-virtualization-os-images命名空间中具有instancetype.kubevirt.io/default-preference标签的卷。- 可选:点星号图标将可引导卷指定为热门卷。不足的可引导卷首先出现在卷列表中。
点 Add volume 上传新卷,或使用现有的持久性卷声明(PVC)、卷快照或
containerDisk卷。点击 Save。集群中不可用的操作系统的徽标显示在列表的底部。您可以点 Add volume 链接为所需的操作系统添加卷。
另外,还有 创建 Windows 引导源快速启动的链接。如果您将鼠标悬停在 Select volume to boot from 行旁边的问号图标上,则同一链接会出现在弹出窗口中。
安装环境或环境断开连接后,从中引导的卷列表为空。在这种情况下,会显示三个操作系统徽标:Windows、RHEL 和 Linux。您可以点 Add volume 按钮添加新卷来满足您的要求。
- 点实例类型标题,然后选择适合您的工作负载的资源大小。
可选:选择虚拟机详情,包括虚拟机的名称,适用于您要从其引导的卷:
对于基于 Linux 的卷,请按照以下步骤配置 SSH:
- 如果您还没有在项目中添加公共 SSH 密钥,点 VirtualMachine details 部分中的 Authorized SSH key 旁边的编辑图标。
选择以下选项之一:
- 使用现有 :从 secrets 列表中选择一个 secret。
Add new: 遵循以下步骤:
- 浏览到公共 SSH 密钥文件,或在 key 字段中粘贴文件。
- 输入 secret 名称。
- 可选: 选择 Automatically apply this key to any new VirtualMachine you create in this project。
- 点击 Save。
对于 Windows 卷,请按照以下步骤配置 sysprep 选项:
如果您还没有为 Windows 卷添加 sysprep 选项,请按照以下步骤执行:
- 点 VirtualMachine 详情 部分中的 Sysprep 的编辑图标。
- 添加 Autoattend.xml 回答文件。
- 添加 Unattend.xml 回答文件。
- 点击 Save。
如果要将现有的 sysprep 选项用于 Windows 卷,请按照以下步骤执行:
- 点 Attach existing sysprep。
- 输入现有 sysprep Unattend.xml 回答文件的名称。
- 点击 Save。
可选: 如果要创建 Windows 虚拟机,您可以挂载 Windows 驱动程序磁盘:
- 点 Customize VirtualMachine 按钮。
- 在 VirtualMachine 详情页中,点 Storage。
- 选择 Mount Windows 驱动程序磁盘复选框。
- 可选:点 View YAML & CLI 查看 YAML 文件。点 CLI 查看 CLI 命令。您还可以下载或复制 YAML 文件内容或 CLI 命令。
- 点 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 密钥。
流程
- 在 web 控制台中进入到 Virtualization → Catalog。
点 Boot source available 来使用引导源过滤模板。
目录显示默认模板。点 All Items 查看您的过滤器的所有可用模板。
- 点模板标题查看其详情。
- 可选:如果您使用 Windows 模板,可以通过选择 Mount Windows 驱动程序磁盘复选框来挂载 Windows 驱动程序磁盘。
如果您不需要自定义模板或虚拟机参数,点 Quick create VirtualMachine 从模板创建虚拟机。
如果您需要自定义模板或虚拟机参数,请执行以下操作:
- 点 Customize VirtualMachine。
- 展开 Storage 或 Optional 参数,以编辑数据源设置。
点 Customize VirtualMachine 参数。
Customize and create VirtualMachine 窗格显示 Overview, YAML, Scheduling, Environment, Network interfaces, Disks, Scripts, 和 Metadata 标签页。
- 编辑在虚拟机引导前必须设置的参数,如 cloud-init 或静态 SSH 密钥。
点 Create VirtualMachine。
VirtualMachine 详情页面会显示 provisioning 状态。
7.1.3.3. 使用 Web 控制台自定义虚拟机模板 复制链接链接已复制到粘贴板!
在启动虚拟机前,您可以通过修改 VM 或模板参数(如数据源、cloud-init 或 SSH 密钥)来自定义现有虚拟机(VM)模板。如果您通过复制模板并包含其所有标签和注解,则部署新版本的 Scheduling、Scale 和 Performance (SSP) Operator 时,自定义模板将标记为已弃用。
您可以从自定义模板中删除已弃用的设计。
流程
- 在 web 控制台中进入到 Virtualization → Templates。
- 从虚拟机模板列表中,点标记为已弃用的模板。
- 点 Labels 旁边的铅笔图标旁的 Edit。
删除以下两个标签:
-
template.kubevirt.io/type: "base" -
template.kubevirt.io/version: "version"
-
- 点击 Save。
- 点现有 Annotations 数旁边的铅笔图标。
删除以下注解:
-
template.kubevirt.io/deprecated
-
- 点击 Save。
7.1.3.3.1. 在 web 控制台中创建自定义虚拟机模板 复制链接链接已复制到粘贴板!
您可以通过编辑 OpenShift Container Platform web 控制台中的 YAML 文件示例来创建虚拟机模板。
流程
- 在 web 控制台中,在侧边菜单中点 Virtualization → Templates。
-
可选:使用 Project 下拉菜单更改与新模板关联的项目。所有模板都默认保存到
openshift项目中。 - 点 Create Template。
- 通过编辑 YAML 文件来指定模板参数。
点 Create。
模板显示在 Templates 页面中。
- 可选:点 Download 下载并保存 YAML 文件。
7.1.3.3.2. 为虚拟机模板启用专用资源 复制链接链接已复制到粘贴板!
您可以在 OpenShift Container Platform web 控制台中为虚拟机(VM)模板启用专用资源。从此模板创建的虚拟机将使用专用资源调度。
流程
- 在 OpenShift Container Platform web 控制台中,在侧边菜单中点 Virtualization → Templates。
- 选择您要编辑的模板以打开 Template 详情页面。
- 在 Scheduling 选项卡中,点 Dedicated Resources 旁边的编辑图标。
- 选择 Schedule this workload with dedicated resources (guaranteed policy)。
- 点击 Save。
7.1.4. 从命令行创建虚拟机 复制链接链接已复制到粘贴板!
您可以通过编辑或创建 VirtualMachine 清单来从命令行创建虚拟机 (VM)。您可以使用虚拟机清单中的实例类型来简化虚拟机配置。
您还可以使用 Web 控制台从实例类型创建虚拟机。
7.1.4.1. 从 VirtualMachine 清单创建虚拟机 复制链接链接已复制到粘贴板!
您可以从 VirtualMachine 清单创建虚拟机(VM)。要简化这些清单的创建,您可以使用 virtctl 命令行工具。
先决条件
-
已安装
virtctl命令行工具。
流程
为虚拟机创建
VirtualMachine清单,并将它保存为 YAML 文件。例如,要创建最小 Red Hat Enterprise Linux (RHEL) 虚拟机,请运行以下命令:virtctl create vm --name rhel-9-minimal --volume-datasource src:openshift-virtualization-os-images/rhel9
$ virtctl create vm --name rhel-9-minimal --volume-datasource src:openshift-virtualization-os-images/rhel9Copy to Clipboard Copied! Toggle word wrap Toggle overflow 查看虚拟机的
VirtualMachine清单:注意这个示例清单没有配置虚拟机身份验证。
RHEL 虚拟机的清单示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用清单文件创建虚拟机:
oc create -f <vm_manifest_file>.yaml
$ oc create -f <vm_manifest_file>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:启动虚拟机:
virtctl start <vm_name>
$ virtctl start <vm_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
后续步骤
7.2. 从自定义镜像创建虚拟机 复制链接链接已复制到粘贴板!
7.2.1. 从自定义镜像创建虚拟机概述 复制链接链接已复制到粘贴板!
您可以使用以下方法之一从自定义操作系统镜像创建虚拟机(VM):
可选:您可以为容器磁盘启用自动更新。详情请参阅管理自动引导源更新。
- 从网页导入镜像。
- 从本地计算机上传镜像。
- 克隆包含镜像的持久性卷声明(PVC)。
Containerized Data Importer (CDI) 使用数据卷将镜像导入到 PVC 中。您可以使用 OpenShift Container Platform Web 控制台或命令行将 PVC 添加到虚拟机。
7.2.2. 使用容器磁盘创建虚拟机 复制链接链接已复制到粘贴板!
您可以使用从操作系统镜像构建的容器磁盘创建虚拟机 (VM)。
您可以为容器磁盘启用自动更新。详情请参阅管理自动引导源更新。
如果容器磁盘较大,I/O 流量可能会增加,并导致 worker 节点不可用。您可以执行以下任务来解决这个问题:
您可以通过执行以下步骤从容器磁盘创建虚拟机:
- 将操作系统镜像构建到容器磁盘中,并将其上传到容器注册表。
- 如果您的容器 registry 没有 TLS,请将您的环境配置为为您的 registry 禁用 TLS。
- 使用 Web 控制台或命令行使用容器磁盘创建虚拟机作为磁盘源。
您必须在从红帽提供的操作系统镜像创建的虚拟机上安装 QEMU 客户机代理。
7.2.2.1. 构建和上传容器磁盘 复制链接链接已复制到粘贴板!
您可以将虚拟机(VM)镜像构建到容器磁盘中,并将其上传到 registry。
容器磁盘的大小受托管容器磁盘的 registry 的最大层大小的限制。
对于 Red Hat Quay,您可以通过编辑首次部署 Red Hat Quay 时创建的 YAML 配置文件来更改最大层大小。
先决条件
-
必须安装
podman。 - 您必须具有 QCOW2 或 RAW 镜像文件。
流程
创建 Dockerfile 以将虚拟机镜像构建到容器镜像中。虚拟机镜像必须由 QEMU 所有,其 UID 为
107,并放置在容器内的/disk/目录中。/disk/目录的权限必须设为0440。以下示例在第一阶段使用 Red Hat Universal Base Image(UBI)来处理这些配置更改,并使用第二阶段中的最小
scratch镜像存储结果:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 其中
<vm_image>是 QCOW2 或 RAW 格式的镜像。如果使用远程镜像,请将<vm_image>.qcow2替换为完整的 URL。
构建和标记容器:
podman build -t <registry>/<container_disk_name>:latest .
$ podman build -t <registry>/<container_disk_name>:latest .Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将容器镜像推送到 registry:
podman push <registry>/<container_disk_name>:latest
$ podman push <registry>/<container_disk_name>:latestCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.2.2.2. 为容器 registry 禁用 TLS 复制链接链接已复制到粘贴板!
您可以通过编辑 HyperConverged 自定义资源的 insecureRegistries 字段来禁用一个或多个容器 registry 的 TLS(传输层安全)。
先决条件
运行以下命令,在默认编辑器中打开
HyperConvergedCR:oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将不安全的 registry 列表添加到
spec.storageImport.insecureRegistries字段中。HyperConverged自定义资源示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将此列表中的示例替换为有效的 registry 主机名。
7.2.2.3. 使用 Web 控制台从容器磁盘创建虚拟机 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform web 控制台从容器 registry 中导入容器磁盘来创建虚拟机 (VM)。
流程
- 在 web 控制台中进入到 Virtualization → Catalog。
- 点没有可用引导源的模板标题。
- 点 Customize VirtualMachine。
- 在 Customize template parameters 页面中,展开 Storage,然后从 Disk source 列表中选择 Registry (creates PVC)。
-
输入容器镜像 URL。示例:
https://mirror.arizona.edu/fedora/linux/releases/38/Cloud/x86_64/images/Fedora-Cloud-Base-38-1.6.x86_64.qcow2 - 设置磁盘大小。
- 点击 Next。
- 点 Create VirtualMachine。
7.2.2.4. 使用命令行从容器磁盘创建虚拟机 复制链接链接已复制到粘贴板!
您可以使用命令行从容器磁盘创建虚拟机 (VM)。
先决条件
- 您必须具有包含容器磁盘的容器 registry 的访问凭证。
-
已安装
virtctl命令行工具。
流程
为虚拟机创建
VirtualMachine清单,并将它保存为 YAML 文件。例如,要从容器磁盘创建最小 Red Hat Enterprise Linux (RHEL) 虚拟机,请运行以下命令:virtctl create vm --name vm-rhel-9 --instancetype u1.small --preference rhel.9 --volume-containerdisk src:registry.redhat.io/rhel9/rhel-guest-image:9.5
$ virtctl create vm --name vm-rhel-9 --instancetype u1.small --preference rhel.9 --volume-containerdisk src:registry.redhat.io/rhel9/rhel-guest-image:9.5Copy to Clipboard Copied! Toggle word wrap Toggle overflow 查看虚拟机的
VirtualMachine清单:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建虚拟机:
oc create -f <vm_manifest_file>.yaml
$ oc create -f <vm_manifest_file>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
监控虚拟机的状态:
oc get vm <vm_name>
$ oc get vm <vm_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果置备成功,虚拟机状态为
Running:输出示例
NAME AGE STATUS READY vm-rhel-9 18s Running True
NAME AGE STATUS READY vm-rhel-9 18s Running TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 通过访问其串行控制台来验证置备是否已完成,以及虚拟机是否已启动:
virtctl console <vm_name>
$ virtctl console <vm_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果虚拟机正在运行且串行控制台可以访问,输出如下所示:
输出示例
Successfully connected to vm-rhel-9 console. The escape sequence is ^]
Successfully connected to vm-rhel-9 console. The escape sequence is ^]Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.2.3. 通过从网页导入镜像来创建虚拟机 复制链接链接已复制到粘贴板!
您可以通过从 web 页面导入操作系统镜像来创建虚拟机 (VM)。
您必须在从红帽提供的操作系统镜像创建的虚拟机上安装 QEMU 客户机代理。
7.2.3.1. 使用 Web 控制台从网页上的镜像创建虚拟机 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform Web 控制台从网页导入镜像来创建虚拟机 (VM)。
先决条件
- 您必须有权访问包含镜像的网页。
流程
- 在 web 控制台中进入到 Virtualization → Catalog。
- 点没有可用引导源的模板标题。
- 点 Customize VirtualMachine。
- 在 Customize template parameters 页面中,展开 Storage,然后从 Disk source 列表中选择 URL (creates PVC)。
-
输入镜像 URL。示例:
https://access.redhat.com/downloads/content/69/ver=/rhel---7/7.9/x86_64/product-software - 设置磁盘大小。
- 点击 Next。
- 点 Create VirtualMachine。
7.2.3.2. 使用命令行从网页上的镜像创建虚拟机 复制链接链接已复制到粘贴板!
您可以使用命令行从网页中的镜像创建虚拟机 (VM)。
创建虚拟机时,具有镜像的数据卷将导入到持久性存储中。
先决条件
- 您必须有包含镜像的网页的访问凭证。
-
已安装
virtctl命令行工具。
流程
为虚拟机创建
VirtualMachine清单,并将它保存为 YAML 文件。例如,要从网页上的镜像创建最小 Red Hat Enterprise Linux (RHEL) 虚拟机,请运行以下命令:virtctl create vm --name vm-rhel-9 --instancetype u1.small --preference rhel.9 --volume-import type:http,url:https://example.com/rhel9.qcow2,size:10Gi
$ virtctl create vm --name vm-rhel-9 --instancetype u1.small --preference rhel.9 --volume-import type:http,url:https://example.com/rhel9.qcow2,size:10GiCopy to Clipboard Copied! Toggle word wrap Toggle overflow 查看虚拟机的
VirtualMachine清单:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建虚拟机:
oc create -f <vm_manifest_file>.yaml
$ oc create -f <vm_manifest_file>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc create命令创建数据卷和虚拟机。CDI 控制器创建一个带有正确注解和导入过程的底层 PVC。导入完成后,数据卷状态变为Succeeded。您可以启动虚拟机。数据卷置备在后台进行,因此无需监控进程。
验证
importer pod 从指定的 URL 下载镜像,并将其存储在置备的持久性卷上。查看 importer pod 的状态:
oc get pods
$ oc get podsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 监控数据卷的状态:
oc get dv <data_volume_name>
$ oc get dv <data_volume_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果置备成功,数据卷阶段为
Succeeded:输出示例
NAME PHASE PROGRESS RESTARTS AGE imported-volume-6dcpf Succeeded 100.0% 18s
NAME PHASE PROGRESS RESTARTS AGE imported-volume-6dcpf Succeeded 100.0% 18sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 通过访问其串行控制台来验证置备是否已完成,以及虚拟机是否已启动:
virtctl console <vm_name>
$ virtctl console <vm_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果虚拟机正在运行且串行控制台可以访问,输出如下所示:
输出示例
Successfully connected to vm-rhel-9 console. The escape sequence is ^]
Successfully connected to vm-rhel-9 console. The escape sequence is ^]Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.2.4. 通过上传镜像来创建虚拟机 复制链接链接已复制到粘贴板!
您可以通过从本地机器上传操作系统镜像来创建虚拟机 (VM)。
您可以通过上传 Windows 镜像到 PVC 来创建 Windows 虚拟机。然后,在创建虚拟机时克隆 PVC。
您必须在从红帽提供的操作系统镜像创建的虚拟机上安装 QEMU 客户机代理。
您还必须在 Windows 虚拟机上安装 VirtIO 驱动程序。
7.2.4.1. 使用 Web 控制台从上传的镜像创建虚拟机 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform web 控制台从上传的操作系统镜像创建虚拟机 (VM)。
先决条件
-
您必须有一个
IMG、ISO或QCOW2镜像文件。
流程
- 在 web 控制台中进入到 Virtualization → Catalog。
- 点没有可用引导源的模板标题。
- 点 Customize VirtualMachine。
- 在 Customize template parameters 页面中,展开 Storage,然后从 Disk source 列表中选择 Upload (Upload a new file to a PVC)。
- 浏览到本地机器上的镜像并设置磁盘大小。
- 点 Customize VirtualMachine。
- 点 Create VirtualMachine。
7.2.4.1.1. 常规化一个虚拟机镜像 复制链接链接已复制到粘贴板!
在使用镜像创建金级镜像(虚拟机)前,您可以对 Red Hat Enterprise Linux (RHEL) 镜像进行常规化,以删除所有特定于系统的配置数据。您可以使用金级镜像来部署新虚拟机。
您可使用 virtctl、guestfs 和 virt-sysprep 工具对 RHEL 虚拟机进行常规化。
先决条件
- 您有一个 RHEL 虚拟机 (VM) 作为基本虚拟机。
-
已安装 OpenShift CLI(
oc)。 -
已安装
virtctl工具。
流程
输入以下命令停止 RHEL 虚拟机(如果它正在运行):
virtctl stop <my_vm_name>
$ virtctl stop <my_vm_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 可选:克隆虚拟机,以避免丢失原始虚拟机中的数据。然后您可以对克隆的虚拟机进行常规化。
运行以下命令,检索为虚拟机存储根文件系统的
dataVolume:oc get vm <my_vm_name> -o jsonpath="{.spec.template.spec.volumes}{'\n'}"$ oc get vm <my_vm_name> -o jsonpath="{.spec.template.spec.volumes}{'\n'}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
[{"dataVolume":{"name":"<my_vm_volume>"},"name":"rootdisk"},{"cloudInitNoCloud":{...}][{"dataVolume":{"name":"<my_vm_volume>"},"name":"rootdisk"},{"cloudInitNoCloud":{...}]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 followimg 命令,检索与列出的
dataVolume匹配的持久性卷声明 (PVC):oc get pvc
$ oc get pvcCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE <my_vm_volume> Bound …
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE <my_vm_volume> Bound …Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果集群配置不允许您克隆虚拟机,为了避免从原始虚拟机丢失数据,您可以将 VM PVC 克隆到数据卷中。然后,您可以使用克隆的 PVC 创建金级镜像。
如果您要通过克隆 PVC 创建金级镜像,请使用克隆的 PVC 继续后续步骤。
运行以下命令,使用
libguestfs-tools部署新的交互式容器,并将 PVC 附加到其中:virtctl guestfs <my-vm-volume> --uid 107
$ virtctl guestfs <my-vm-volume> --uid 107Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此命令会打开一个 shell,供您运行下一个命令。
运行以下命令删除所有特定于您的系统的配置:
virt-sysprep -a disk.img
$ virt-sysprep -a disk.imgCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 在 OpenShift Container Platform 控制台中点 Virtualization → Catalog。
- 点 Add volume。
在 Add volume 窗口中:
- 从 Source type 列表中,选择 Use existing Volume。
- 从 Volume project 列表中,选择您的项目。
- 从 Volume name 列表中,选择正确的 PVC。
- 在 Volume name 字段中输入新金级镜像的名称。
- 在 Preference 列表中,选择您使用的 RHEL 版本。
- 从 Default Instance Type 列表中,为您之前选择的 RHEL 版本选择具有正确 CPU 和内存要求的实例类型。
- 点击 Save。
新卷会出现在 Select volume to boot from 列表中。这是您的新金级镜像。您可以使用这个卷创建新虚拟机。
7.2.4.2. 创建 Windows 虚拟机 复制链接链接已复制到粘贴板!
您可以通过上传 Windows 镜像到持久性卷声明 (PVC) 来创建 Windows 虚拟机,然后使用 OpenShift Container Platform web 控制台创建虚拟机时克隆 PVC。
先决条件
- 已使用 Windows Media Creation Tool 创建 Windows 安装 DVD 或者 USB。请参阅 Microsoft 文档中的创建 Windows 10 安装介质。
-
您创建了
autounattend.xml回答文件。请参阅 Microsoft 文档中的回答文件(unattend.xml)。
流程
将 Windows 镜像上传为新 PVC:
- 在 web 控制台中进入到 Storage → PersistentVolumeClaims。
- 点 Create PersistentVolumeClaim → With Data upload form。
- 浏览 Windows 镜像并选择它。
输入 PVC 名称,选择存储类和大小,然后点 Upload。
Windows 镜像上传到 PVC。
通过克隆上传的 PVC 来配置新虚拟机:
- 进入到 Virtualization → Catalog。
- 选择 Windows 模板标题并点 Customize VirtualMachine。
- 从 Disk source 列表中选择 Clone (clone PVC)。
- 选择 PVC 项目、Windows 镜像 PVC 和磁盘大小。
将回答文件应用到虚拟机:
- 点 Customize VirtualMachine 参数。
- 在 Scripts 选项卡的 Sysprep 部分,点 Edit。
-
浏览到
autounattend.xml回答文件,然后点保存。
设置虚拟机的 run 策略:
- 清除 Start this VirtualMachine after creation,以便虚拟机不会立即启动。
- 点 Create VirtualMachine。
-
在 YAML 标签页中,将
running:false替换为runStrategy: RerunOnFailure,点 Save。
点 Options 菜单
并选择 Start。
虚拟机从包含
autounattend.xml回答文件的sysprep磁盘引导。
7.2.4.2.1. 常规化 Windows 虚拟机镜像 复制链接链接已复制到粘贴板!
在使用镜像创建新虚拟机前,您可以常规化 Windows 操作系统镜像删除所有特定于系统的配置数据。
在常规调整虚拟机前,您必须确保 sysprep 工具在无人值守的 Windows 安装后无法检测到应答文件。
先决条件
- 正在运行的 Windows 虚拟机安装有 QEMU 客户机代理。
流程
- 在 OpenShift Container Platform 控制台中点 Virtualization → VirtualMachines。
- 选择 Windows 虚拟机以打开 VirtualMachine 详情页。
- 点 Configuration → Disks。
-
点
sysprep磁盘
旁边的 Options 菜单并选择 Detach。
- 单击 Detach。
-
重命名
C:\Windows\Panther\unattend.xml以避免sysprep工具对其进行检测。 运行以下命令启动
sysprep程序:%WINDIR%\System32\Sysprep\sysprep.exe /generalize /shutdown /oobe /mode:vm
%WINDIR%\System32\Sysprep\sysprep.exe /generalize /shutdown /oobe /mode:vmCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
sysprep工具完成后,Windows 虚拟机将关闭。VM 的磁盘镜像现在可作为 Windows 虚拟机的安装镜像使用。
现在,您可以对虚拟机进行特殊化。
7.2.4.2.2. 特殊化 Windows 虚拟机镜像 复制链接链接已复制到粘贴板!
特殊化 Windows 虚拟机 (VM) 配置从常规化 Windows 镜像到虚拟机中的计算机特定信息。
先决条件
- 您必须有一个通用的 Windows 磁盘镜像。
-
您必须创建一个
unattend.xml回答文件。详情请查看 Microsoft 文档。
流程
- 在 OpenShift Container Platform 控制台中点 Virtualization → Catalog。
- 选择 Windows 模板并点 Customize VirtualMachine。
- 从 Disk source 列表中选择 PVC(clone PVC)。
- 选择通用 Windows 镜像的 PVC 项目和 PVC 名称。
- 点 Customize VirtualMachine 参数。
- 点 Scripts 选项卡。
-
在 Sysprep 部分中,点 Edit,浏览到
unattend.xml回答文件,然后点保存。 - 点 Create VirtualMachine。
在初次启动过程中,Windows 使用 unattend.xml 回答文件来专注于虚拟机。虚拟机现在可供使用。
7.2.4.3. 使用命令行从上传的镜像创建虚拟机 复制链接链接已复制到粘贴板!
您可使用 virtctl 命令行工具上传操作系统镜像。您可以使用现有数据卷,或为镜像创建新数据卷。
先决条件
-
您必须有一个
ISO、IMG或QCOW2操作系统镜像文件。 -
为获得最佳性能,请使用 virt-sparsify 工具或
xz或gzip工具压缩镜像文件。 -
已安装
virtctl。 - 客户端机器必须配置为信任 OpenShift Container Platform 路由器的证书。
流程
运行
virtctl image-upload命令上传镜像:virtctl image-upload dv <datavolume_name> \ --size=<datavolume_size> \ --image-path=</path/to/image> \
$ virtctl image-upload dv <datavolume_name> \1 --size=<datavolume_size> \2 --image-path=</path/to/image> \3 Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意-
如果您不想创建新数据卷,请省略
--size参数,并包含--no-create标志。 - 将磁盘镜像上传到 PVC 时,PVC 大小必须大于未压缩的虚拟磁盘的大小。
-
若要在使用 HTTPS 时允许不安全的服务器连接,请使用
--insecure参数。当您使用--insecure标志时,不会验证上传端点的真实性。
-
如果您不想创建新数据卷,请省略
可选。要验证数据卷是否已创建,运行以下命令来查看所有数据卷:
oc get dvs
$ oc get dvsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
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 中显示的快照声明中。如果这些条件没有满足您的要求,请尝试再次创建快照,或使用一个离线快照
流程
- 使用控制台或 SSH 登录虚拟机。
运行以下命令来安装 QEMU 客户机代理:
yum install -y qemu-guest-agent
$ yum install -y qemu-guest-agentCopy to Clipboard Copied! Toggle word wrap Toggle overflow 确保服务持久并启动它:
systemctl enable --now qemu-guest-agent
$ systemctl enable --now qemu-guest-agentCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令,以验证
AgentConnected是否列在 VM spec 中:oc get vm <vm_name>
$ oc get vm <vm_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.2.5.1.2. 在 Windows 虚拟机上安装 QEMU 客户机代理 复制链接链接已复制到粘贴板!
对于 Windows 虚拟机,QEMU 客户机代理包含在 VirtIO 驱动程序中。您可以在 Windows 安装过程中或现有 Windows 虚拟机上安装驱动程序。
要创建处于 Running 状态的、带有最高完整性的虚拟机的快照,请安装 QEMU 客户机代理。
QEMU 客户机代理通过尝试静止虚拟机文件系统来获得一个具有一致性的快照。这样可确保在进行快照前将 in-flight I/O 写入磁盘。如果没有客户机代理,则无法静止并生成最佳快照。
请注意,在 Windows 客户机操作系统中,静默还需要 Volume Shadow Copy Service (VSS)。因此,在创建快照前,请确保虚拟机上也启用了 VSS。
执行快照的条件反映在 web 控制台或 CLI 中显示的快照声明中。如果这些条件没有满足您的要求,请尝试再次创建快照,或使用一个离线快照
流程
-
在 Windows 客户机操作系统中,使用 File Explorer 进入到
virtio-winCD 驱动器中的guest-agent目录。 -
运行
qemu-ga-x86_64.msi安装程序。
验证
运行以下命令来获取网络服务列表:
net start
$ net startCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
验证输出是否包含
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 容器磁盘。
| 驱动程序名称 | 硬件 ID | 描述 |
|---|---|---|
| viostor |
VEN_1AF4&DEV_1001 | 块驱动程序。有时在 Other devices 组中被标记为 SCSI Controller。 |
| viorng |
VEN_1AF4&DEV_1005 | 熵源(entropy)驱动程序。有时在 Other devices 组中被标记为 PCI 设备。 |
| NetKVM |
VEN_1AF4&DEV_1000 | 网络驱动程序。有时,在 Other devices 组中被标记为 Ethernet Controller。仅在配置了 VirtIO NIC 时可用。 |
7.2.5.2.1. 在安装过程中将 VirtIO 容器磁盘附加到 Windows 虚拟机 复制链接链接已复制到粘贴板!
您必须将 VirtIO 容器磁盘附加到 Windows 虚拟机,以安装必要的 Windows 驱动程序。这可以在创建虚拟机时完成。
流程
- 从模板创建 Windows 虚拟机时,点 Customize VirtualMachine。
- 选择 Mount Windows 驱动程序磁盘。
- 点 Customize VirtualMachine 参数。
- 点 Create VirtualMachine。
创建虚拟机后,virtio-win SATA CD 磁盘将附加到虚拟机。
7.2.5.2.2. 将 VirtIO 容器磁盘附加到现有的 Windows 虚拟机 复制链接链接已复制到粘贴板!
您必须将 VirtIO 容器磁盘附加到 Windows 虚拟机,以安装必要的 Windows 驱动程序。这可以对现有的虚拟机完成。
流程
- 导航到现有的 Windows 虚拟机,然后点 Actions → Stop。
- 进入 VM Details → Configuration → Storage。
- 选择 Mount Windows 驱动程序磁盘复选框。
- 点击 Save。
- 启动虚拟机并连接到图形控制台。
7.2.5.2.3. 在 Windows 安装过程中安装 VirtIO 驱动程序 复制链接链接已复制到粘贴板!
您可以在虚拟机 (VM) 上安装 Windows 时安装 VirtIO 驱动程序。
该流程使用通用方法安装 Windows,且安装方法可能因 Windows 版本而异。有关您要安装的 Windows 版本,请参阅相关文档。
先决条件
-
包含
virtio驱动程序的存储设备必须附加到虚拟机。
流程
-
在 Windows 操作系统中,使用
File Explorer进入到virtio-winCD 驱动器。 双击该驱动器为您的虚拟机运行适当的安装程序。
对于 64 位 vCPU,请选择
virtio-win-gt-x64安装程序。不再支持 32 位 vCPU。- 可选:在安装程序的 Custom Setup 步骤中,选择您要安装的设备驱动程序。推荐的驱动程序集会被默认选择。
- 安装完成后,选择 Finish。
- 重启虚拟机。
验证
-
在 PC 上打开系统磁盘。这通常是
C:。 - 进入到 Program Files → Virtio-Win。
如果 Virtio-Win 目录存在并包含每个驱动程序的子目录,则安装可以成功。
7.2.5.2.4. 在现有 Windows 虚拟机上从 SATA CD 驱动器安装 VirtIO 驱动程序 复制链接链接已复制到粘贴板!
您可以从现有 Windows 虚拟机(VM)上的 SATA CD 驱动器安装 VirtIO 驱动程序。
该流程使用通用方法为 Windows 添加驱动。有关具体安装步骤,请参阅您的 Windows 版本安装文档。
先决条件
- 包含 virtio 驱动程序的存储设备必须作为 SATA CD 驱动器附加到虚拟机。
流程
- 启动虚拟机并连接到图形控制台。
- 登录 Windows 用户会话。
打开 Device Manager 并展开 Other devices 以列出所有 Unknown device。
- 打开 Device Properties 以识别未知设备。
- 右击设备并选择 Properties。
- 单击 Details 选项卡,并在 Property 列表中选择 Hardware Ids。
- 将 Hardware Ids 的 Value 与受支持的 VirtIO 驱动程序相比较。
- 右击设备并选择 Update Driver Software。
- 点击 Browse my computer for driver software 并浏览所附加的 VirtIO 驱动程序所在 SATA CD 驱动器。驱动程序将按照其驱动程序类型、操作系统和 CPU 架构分层排列。
- 点击 Next 以安装驱动程序。
- 对所有必要 VirtIO 驱动程序重复这一过程。
- 安装完驱动程序后,点击 Close 关闭窗口。
- 重启虚拟机以完成驱动程序安装。
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容器磁盘。
流程
通过编辑
VirtualMachine清单将container-native-virtualization/virtio-win容器磁盘添加为 CD 驱动器:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- OpenShift Virtualization 按照
VirtualMachine清单中定义的顺序引导虚拟机磁盘。您可以定义在container-native-virtualization/virtio-win容器磁盘前引导的其他虚拟机磁盘,或使用可选的bootOrder参数来确保虚拟机从正确的磁盘启动。如果为磁盘配置引导顺序,您必须为其他磁盘配置引导顺序。
应用更改:
如果虚拟机没有运行,请运行以下命令:
virtctl start <vm> -n <namespace>
$ virtctl start <vm> -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果虚拟机正在运行,重启虚拟机或运行以下命令:
oc apply -f <vm.yaml>
$ oc apply -f <vm.yaml>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 虚拟机启动后,从 SATA CD 驱动器安装 VirtIO 驱动程序。
7.2.5.3. 更新 VirtIO 驱动程序 复制链接链接已复制到粘贴板!
7.2.5.3.1. 更新 Windows 虚拟机上的 VirtIO 驱动程序 复制链接链接已复制到粘贴板!
使用 Windows Update 服务更新 Windows 虚拟机(VM)上的 virtio 驱动程序。
先决条件
- 集群必须连接到互联网。断开连接的集群无法访问 Windows Update 服务。
流程
- 在 Windows Guest 操作系统中,点 Windows 密钥并选择 Settings。
- 进入到 Windows Update → Advanced Options → Optional Updates。
- 安装 Red Hat, Inc. 的所有更新。
- 重启虚拟机。
验证
- 在 Windows 虚拟机上,进入到 设备管理器。
- 选择一个设备。
- 选择 Driver 选项卡。
-
点 Driver Details,并确认
virtio驱动程序详情显示了正确的版本。
7.2.6. 克隆虚拟机 复制链接链接已复制到粘贴板!
您可以克隆虚拟机(VM)或从快照创建新虚拟机。
不支持克隆附加了 vTPM 设备的虚拟机。
7.2.6.1. 使用 Web 控制台克隆虚拟机 复制链接链接已复制到粘贴板!
您可以使用 Web 控制台克隆现有虚拟机。
流程
- 在 web 控制台中进入到 Virtualization → VirtualMachines。
- 选择一个虚拟机以打开 VirtualMachine 详情页。
- 点 Actions。
- 选择 Clone。
- 在 Clone VirtualMachine 页面中,输入新虚拟机的名称。
- (可选)选择 Start cloned VM 复选框来启动克隆的虚拟机。
- 单击 Clone。
7.2.6.2. 使用 Web 控制台从现有快照创建虚拟机 复制链接链接已复制到粘贴板!
您可以通过复制现有快照来创建新虚拟机。
流程
- 在 web 控制台中进入到 Virtualization → VirtualMachines。
- 选择一个虚拟机以打开 VirtualMachine 详情页。
- 点 Snapshots 标签页。
-
点您要复制的快照的 Options 菜单
。
- 选择 Create VirtualMachine。
- 输入虚拟机的名称。
- (可选)选择 Start this VirtualMachine after creation 来启动新的虚拟机。
- 点 Create。
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 目标注解示例
事件示例
NAMESPACE LAST SEEN TYPE REASON OBJECT MESSAGE test-ns 0s Warning IncompatibleVolumeModes persistentvolumeclaim/test-target The volume modes of source and target are incompatible
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 控制台克隆持久性卷声明 (PVC) 来创建虚拟机 (VM)。
先决条件
- 您必须有权访问包含源 PVC 的命名空间。
流程
- 在 web 控制台中进入到 Virtualization → Catalog。
- 点没有可用引导源的模板标题。
- 点 Customize VirtualMachine。
- 在 Customize template parameters 页面中,展开 Storage,然后从 Disk source 列表中选择 PVC (clone PVC)。
- 选择 PVC 项目和 PVC 名称。
- 设置磁盘大小。
- 点击 Next。
- 点 Create VirtualMachine。
7.2.7.3. 使用命令行从 PVC 创建虚拟机 复制链接链接已复制到粘贴板!
您可以使用命令行克隆现有虚拟机的持久性卷声明 (PVC) 来创建虚拟机 (VM)。
您可以使用以下选项之一克隆 PVC:
将 PVC 克隆到新数据卷中。
这个方法会创建一个独立于原始虚拟机的数据卷。删除原始虚拟机不会影响新数据卷或者关联的 PVC。
通过使用
dataVolumeTemplates小节创建VirtualMachine清单来克隆 PVC。这个方法会创建一个数据卷,其生命周期取决于原始虚拟机。删除原始虚拟机会删除克隆的数据卷及其关联的 PVC。
7.2.7.3.1. 在 OpenShift Data Foundation 中大规模优化克隆性能 复制链接链接已复制到粘贴板!
使用 OpenShift Data Foundation 时,存储配置集将默认克隆策略配置为 csi-clone。但是,这种方法存在限制,如以下链接所示。从持久性卷声明(PVC)创建一定数量的克隆后,后台扁平化过程开始,这可显著减少大规模克隆创建性能。
要在从单一源 PVC 创建数百个克隆时提高性能,请使用 VolumeSnapshot 克隆方法而不是默认的 csi-clone 策略。
流程
使用以下内容创建源镜像的 VolumeSnapshot 自定义资源 (CR):
-
添加
spec.source.snapshot小节,将VolumeSnapshot引用为DataVolume clone的源:
spec:
source:
snapshot:
namespace: golden-ns
name: golden-volumesnapshot
spec:
source:
snapshot:
namespace: golden-ns
name: golden-volumesnapshot
7.2.7.3.2. 将 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 # ...
kind: VolumeSnapshotClass apiVersion: snapshot.storage.k8s.io/v1 driver: openshift-storage.rbd.csi.ceph.com # ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow StorageClass对象示例kind: StorageClass apiVersion: storage.k8s.io/v1 # ... provisioner: openshift-storage.rbd.csi.ceph.com
kind: StorageClass apiVersion: storage.k8s.io/v1 # ... provisioner: openshift-storage.rbd.csi.ceph.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow
流程
如以下示例所示创建
DataVolume清单:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建数据卷:
oc create -f <datavolume>.yaml
$ oc create -f <datavolume>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意数据卷可防止虚拟机在 PVC 准备好前启动。您可以创建一个在克隆 PVC 时引用新数据卷的虚拟机。
7.2.7.3.3. 使用数据卷模板从克隆的 PVC 创建虚拟机 复制链接链接已复制到粘贴板!
您可以创建一个虚拟机 (VM) 来使用数据卷模板克隆现有虚拟机的持久性卷声明 (PVC)。此方法会创建一个数据卷,其生命周期独立于原始虚拟机。
先决条件
- 带有源 PVC 的虚拟机必须被关闭。
-
已安装
virtctl命令行工具。
流程
为虚拟机创建
VirtualMachine清单,并将其保存为 YAML 文件,例如:virtctl create vm --name rhel-9-clone --volume-import type:pvc,src:my-project/imported-volume-q5pr9
$ virtctl create vm --name rhel-9-clone --volume-import type:pvc,src:my-project/imported-volume-q5pr9Copy to Clipboard Copied! Toggle word wrap Toggle overflow 查看虚拟机的
VirtualMachine清单:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 PVC 克隆的数据卷创建虚拟机:
oc create -f <vm_manifest_file>.yaml
$ oc create -f <vm_manifest_file>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
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 显示间切换。
流程
- 在 Virtualization → VirtualMachines 页面中,点虚拟机打开 VirtualMachine 详情页。
- 点击 Console 选项卡。VNC 控制台会话会自动启动。
可选: 要切换到 Windows 虚拟机的 vGPU 显示,请从 Send key 列表中选择 Ctl + Alt + 2。
- 从 Send key 列表中选择 Ctl + Alt + 1 以恢复默认显示。
- 要结束控制台会话,请点控制台窗格外,然后点 Disconnect。
7.3.1.2. 使用 virtctl 连接到 VNC 控制台 复制链接链接已复制到粘贴板!
您可使用 virtctl 命令行工具连接到正在运行的虚拟机的 VNC 控制台。
如果您通过 SSH 连接在远程机器上运行 virtctl vnc 命令,则必须使用 -X 或 -Y 标志运行 ssh 命令,将 X 会话转发到本地机器。
先决条件
-
您必须安装
virt-viewer软件包。
流程
运行以下命令以启动控制台会话:
virtctl vnc <vm_name>
$ virtctl vnc <vm_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果连接失败,请运行以下命令来收集故障排除信息:
virtctl vnc <vm_name> -v 4
$ virtctl vnc <vm_name> -v 4Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.3.1.3. 为 VNC 控制台生成临时令牌 复制链接链接已复制到粘贴板!
要访问虚拟机的 VNC,请为 Kubernetes API 生成临时身份验证 bearer 令牌。
Kubernetes 还支持通过修改 curl 命令来使用客户端证书进行身份验证,而不是 bearer 令牌。
先决条件
-
一个运行的虚拟机,带有 OpenShift Virtualization 4.14 或更高版本,
ssp-operator4.14 或更高版本
流程
在 HyperConverged (
HCO)自定义资源(CR)中启用功能门:oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv --type json -p '[{"op": "replace", "path": "/spec/featureGates/deployVmConsoleProxy", "value": true}]'$ oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv --type json -p '[{"op": "replace", "path": "/spec/featureGates/deployVmConsoleProxy", "value": true}]'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令生成令牌:
curl --header "Authorization: Bearer ${TOKEN}" \ "https://api.<cluster_fqdn>/apis/token.kubevirt.io/v1alpha1/namespaces/<namespace>/virtualmachines/<vm_name>/vnc?duration=<duration>"$ curl --header "Authorization: Bearer ${TOKEN}" \ "https://api.<cluster_fqdn>/apis/token.kubevirt.io/v1alpha1/namespaces/<namespace>/virtualmachines/<vm_name>/vnc?duration=<duration>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow <duration>参数可以以小时和分钟为单位设置,最小持续时间为 10 分钟。例如:5h30m。如果没有设置此参数,令牌默认为 10 分钟有效。输出示例:
{ "token": "eyJhb..." }{ "token": "eyJhb..." }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:使用输出中提供的令牌来创建变量:
export VNC_TOKEN="<token>"
$ export VNC_TOKEN="<token>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
现在,您可以使用令牌来访问虚拟机的 VNC 控制台。
验证
输入以下命令登录到集群:
oc login --token ${VNC_TOKEN}$ oc login --token ${VNC_TOKEN}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
virtctl命令测试对虚拟机的 VNC 控制台的访问:virtctl vnc <vm_name> -n <namespace>
$ virtctl vnc <vm_name> -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
目前无法撤销特定的令牌。
要撤销令牌,您必须删除用于创建令牌的服务帐户。但是,这也会撤销使用服务帐户创建的所有令牌。请谨慎使用以下命令:
virtctl delete serviceaccount --namespace "<namespace>" "<vm_name>-vnc-access"
$ virtctl delete serviceaccount --namespace "<namespace>" "<vm_name>-vnc-access"
7.3.1.3.1. 使用集群角色为 VNC 控制台授予令牌生成权限 复制链接链接已复制到粘贴板!
作为集群管理员,您可以安装集群角色并将其绑定到用户或服务帐户,以允许访问为 VNC 控制台生成令牌的端点。
流程
选择将集群角色绑定到用户或服务帐户。
运行以下命令,将集群角色绑定到用户:
kubectl create rolebinding "${ROLE_BINDING_NAME}" --clusterrole="token.kubevirt.io:generate" --user="${USER_NAME}"$ kubectl create rolebinding "${ROLE_BINDING_NAME}" --clusterrole="token.kubevirt.io:generate" --user="${USER_NAME}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,将集群角色绑定到服务帐户:
kubectl create rolebinding "${ROLE_BINDING_NAME}" --clusterrole="token.kubevirt.io:generate" --serviceaccount="${SERVICE_ACCOUNT_NAME}"$ kubectl create rolebinding "${ROLE_BINDING_NAME}" --clusterrole="token.kubevirt.io:generate" --serviceaccount="${SERVICE_ACCOUNT_NAME}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.3.2. 连接至串行控制台 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform web 控制台或 virtctl 命令行工具连接到虚拟机的串行控制台。
目前不支持运行到单个虚拟机的并发 VNC 连接。
7.3.2.1. 使用 Web 控制台连接到串行控制台 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform web 控制台连接至虚拟机的串行控制台。
如果您使用分配了介质设备的 vGPU 连接到 Windows 虚拟机,您可以在默认显示和 vGPU 显示间切换。
流程
- 在 Virtualization → VirtualMachines 页面中,点虚拟机打开 VirtualMachine 详情页。
- 点击 Console 选项卡。VNC 控制台会话会自动启动。
- 点 Disconnect 结束 VNC 控制台会话。否则,VNC 控制台会话会在后台继续运行。
- 从控制台列表中选择 Serial console。
可选: 要切换到 Windows 虚拟机的 vGPU 显示,请从 Send key 列表中选择 Ctl + Alt + 2。
- 从 Send key 列表中选择 Ctl + Alt + 1 以恢复默认显示。
- 要结束控制台会话,请点控制台窗格外,然后点 Disconnect。
7.3.2.2. 使用 virtctl 连接到串行控制台 复制链接链接已复制到粘贴板!
您可使用 virtctl 命令行工具连接到正在运行的虚拟机的串行控制台。
如果您通过 SSH 连接在远程机器上运行 virtctl vnc 命令,则必须使用 -X 或 -Y 标志运行 ssh 命令,将 X 会话转发到本地机器。
先决条件
-
您必须安装
virt-viewer软件包。
流程
运行以下命令以启动控制台会话:
virtctl console <vm_name>
$ virtctl console <vm_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 按
Ctrl+]结束控制台会话。virtctl vnc <vm_name>
$ virtctl vnc <vm_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果连接失败,请运行以下命令来收集故障排除信息:
virtctl vnc <vm_name> -v 4
$ virtctl vnc <vm_name> -v 4Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.3.3. 连接到桌面视图 复制链接链接已复制到粘贴板!
您可以使用 desktop viewer 和 Remote Desktop Protocol (RDP) 连接到 Windows 虚拟机。
7.3.3.1. 使用 Web 控制台连接到桌面查看器 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform Web 控制台连接到虚拟机的桌面视图。您可以使用 OpenShift Container Platform Web 控制台连接到 Windows 虚拟机的桌面视图。
如果您使用分配了介质设备的 vGPU 连接到 Windows 虚拟机,您可以在默认显示和 vGPU 显示间切换。
先决条件
- 您已在 Windows 虚拟机上安装了 QEMU 客户机代理。
- 已安装 RDP 客户端。
流程
- 在 Virtualization → VirtualMachines 页面中,点虚拟机打开 VirtualMachine 详情页。
- 点击 Console 选项卡。VNC 控制台会话会自动启动。
- 点 Disconnect 结束 VNC 控制台会话。否则,VNC 控制台会话会在后台继续运行。
- 从控制台列表中选择 Desktop viewer。
- 点 Create RDP Service 打开 RDP Service 对话框。
- 选择 Expose RDP Service 并点 Save 创建节点端口服务。
-
点 Launch Remote Desktop 以下载
.rdp文件并启动桌面查看器。 可选: 要切换到 Windows 虚拟机的 vGPU 显示,请从 Send key 列表中选择 Ctl + Alt + 2。
- 从 Send key 列表中选择 Ctl + Alt + 1 以恢复默认显示。
- 要结束控制台会话,请点控制台窗格外,然后点 Disconnect。
7.4. 指定实例类型或首选项 复制链接链接已复制到粘贴板!
您可以指定实例类型、首选项或两者来定义一组工作负载大小和运行时特征,以便在多个虚拟机间重复使用。
7.4.1. 使用标志来指定实例类型和首选项 复制链接链接已复制到粘贴板!
使用标志指定实例类型和首选项。
先决条件
- 集群中必须具有实例类型、首选或两者。
流程
要在创建虚拟机时指定实例类型,请使用
--instancetype标志。要指定首选项,请使用--preference标志。以下示例包括这两个标记:virtctl create vm --instancetype <my_instancetype> --preference <my_preference>
$ virtctl create vm --instancetype <my_instancetype> --preference <my_preference>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 要指定命名空间的实例类型或首选项,请在传递给
--instancetype或--preference的标志命令的值中包含kind。命名空间实例类型或首选项必须位于您要在其中创建虚拟机的同一命名空间中。以下示例包括命名空间实例类型和命名空间首选项的标记:virtctl create vm --instancetype virtualmachineinstancetype/<my_instancetype> --preference virtualmachinepreference/<my_preference>
$ virtctl create vm --instancetype virtualmachineinstancetype/<my_instancetype> --preference virtualmachinepreference/<my_preference>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.4.2. 推断实例类型或首选项 复制链接链接已复制到粘贴板!
推断实例类型、首选项或两者都默认启用,并且 inferFromVolume 属性的 inferFromVolumeFailure 策略被设置为 Ignore。当引导卷的推断时,会忽略错误,并使用实例类型创建虚拟机并取消设置虚拟机。
但是,当应用标记时,inferFromVolumeFailure 策略默认为 Reject。当从引导卷推断出时,错误会导致创建该虚拟机的拒绝。
您可以使用 --infer-instancetype 和 --infer-preference 标志来推断哪个实例类型、首选项或两者用来定义虚拟机的工作负载大小和运行时特征。
先决条件
-
已安装
virtctl工具。
流程
要从用于启动虚拟机的卷明确推断实例类型,请使用
--infer-instancetype标志。要显式推断首选项,请使用--infer-preference标志。以下命令包括两个标记:virtctl create vm --volume-import type:pvc,src:my-ns/my-pvc --infer-instancetype --infer-preference
$ virtctl create vm --volume-import type:pvc,src:my-ns/my-pvc --infer-instancetype --infer-preferenceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.4.3. 设置 inferFromVolume 标签 复制链接链接已复制到粘贴板!
在 PVC、数据源或数据卷中使用以下标签来指示在尝试从卷引导时使用哪些实例类型、首选或两者。
-
集群范围的实例类型:
instancetype.kubevirt.io/default-instancetype标签。 -
namespaced 实例类型:
instancetype.kubevirt.io/default-instancetype-kind标签。如果留空,则默认为VirtualMachineClusterInstancetype标签。 -
集群范围的首选项:
instancetype.kubevirt.io/default-preference标签。 -
namespaced preference:
instancetype.kubevirt.io/default-preference-kind标签。如果留空,则默认为VirtualMachineClusterPreference标签。
先决条件
- 集群中必须具有实例类型、首选或两者。
流程
要将标签应用到数据源,请使用
oc label。以下命令应用指向集群范围实例类型的标签:oc label DataSource foo instancetype.kubevirt.io/default-instancetype=<my_instancetype>
$ oc label DataSource foo instancetype.kubevirt.io/default-instancetype=<my_instancetype>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.5. 配置对虚拟机的 SSH 访问 复制链接链接已复制到粘贴板!
您可以使用以下方法配置对虚拟机的 SSH 访问:
您可以创建一个 SSH 密钥对,将公钥添加到虚拟机,并使用私钥运行
virtctl ssh命令连接到虚拟机。您可以在运行时将公共 SSH 密钥添加到 Red Hat Enterprise Linux (RHEL) 9 虚拟机,或第一次引导到使用 cloud-init 数据源配置的客户机操作系统的虚拟机。
您可以将
virtctl port-foward命令添加到.ssh/config文件中,并使用 OpenSSH 连接到虚拟机。您可以创建一个服务,将服务与虚拟机关联,并连接到该服务公开的 IP 地址和端口。
您可以配置二级网络,将虚拟机(VM)附加到二级网络接口,并连接到 DHCP 分配的 IP 地址。
7.5.1. 访问配置注意事项 复制链接链接已复制到粘贴板!
根据流量负载和客户端要求,配置对虚拟机(VM)的访问的每个方法都有优点和限制。
服务为从集群外部访问的应用程序提供出色的性能,并推荐使用。
如果内部集群网络无法处理流量负载,您可以配置二级网络。
virtctl ssh和virtctl port-forwarding命令- 易于配置。
- 建议对虚拟机进行故障排除。
-
推荐使用 Ansible 自动配置虚拟机的
virtctl port-forwarding。 - 动态公共 SSH 密钥可用于使用 Ansible 调配虚拟机。
- 因为 API 服务器的负担,不建议用于 Rsync 或 Remote Desktop Protocol 等高流量应用程序。
- API 服务器必须能够处理流量负载。
- 客户端必须能够访问 API 服务器。
- 客户端必须具有集群的访问凭证。
- 集群 IP 服务
- 内部集群网络必须能够处理流量负载。
- 客户端必须能够访问内部集群 IP 地址。
- 节点端口服务
- 内部集群网络必须能够处理流量负载。
- 客户端必须能够访问至少一个节点。
- 负载均衡器服务
- 必须配置负载均衡器。
- 每个节点必须能够处理一个或多个负载均衡器服务的流量负载。
- 二级网络
- 卓越的性能,因为流量不会通过内部集群网络。
- 允许灵活的网络拓扑方法。
- 客户机操作系统必须配置适当的安全性,因为虚拟机直接公开给二级网络。如果虚拟机被破坏,入侵者可能会获得对二级网络的访问权限。
7.5.2. 使用 virtctl ssh 复制链接链接已复制到粘贴板!
您可以将公共 SSH 密钥添加到虚拟机 (VM),并通过运行 virtctl ssh 命令连接到虚拟机。
这个方法易于配置。但是,不建议在有高流量负载的环境中使用,因为它会对 API 服务器造成负担。
7.5.2.1. 关于静态和动态 SSH 密钥管理 复制链接链接已复制到粘贴板!
您可以在首次引导时或在运行时动态向虚拟机 (VM) 静态添加公共 SSH 密钥。
只有 Red Hat Enterprise Linux (RHEL) 9 支持动态密钥注入。
静态 SSH 密钥管理
您可以使用 cloud-init 数据源支持配置的客户机操作系统向虚拟机添加静态管理的 SSH 密钥。密钥会在第一次引导时添加到虚拟机 (VM) 中。
您可以使用以下方法之一添加密钥:
- 在使用 Web 控制台或命令行创建时,向单个虚拟机添加密钥。
- 使用 Web 控制台向项目添加密钥。之后,密钥会自动添加到您在这个项目中创建的虚拟机。
使用案例
- 作为虚拟机所有者,您可以使用单个密钥置备所有新创建的虚拟机。
动态 SSH 密钥管理
您可以为安装了 Red Hat Enterprise Linux (RHEL) 9 的虚拟机启用动态 SSH 密钥管理。之后,您可以在运行时更新密钥。密钥由 QEMU 客户机代理添加,该代理使用 Red Hat 引导源安装。
当禁用动态密钥管理时,虚拟机的默认密钥管理设置由用于虚拟机的镜像决定。
使用案例
-
授予或撤销对虚拟机的访问权限:作为集群管理员,您可以通过从应用到命名空间中的所有虚拟机的
Secret对象添加或删除单个用户的密钥来授予或撤销远程虚拟机访问。 - 用户访问:您可以将访问凭证添加到您创建和管理的所有虚拟机。
Ansible 置备:
- 作为操作团队成员,您可以创建一个单一 secret,其中包含用于 Ansible 置备的所有密钥。
- 作为虚拟机所有者,您可以创建虚拟机并附加用于 Ansible 置备的密钥。
密钥轮转:
- 作为集群管理员,您可以轮转命名空间中虚拟机使用的 Ansible 置备程序密钥。
- 作为工作负载所有者,您可以轮转您管理的虚拟机的密钥。
7.5.2.2. 静态密钥管理 复制链接链接已复制到粘贴板!
当使用 OpenShift Container Platform web 控制台或命令行创建虚拟机 (VM) 时,您可以添加静态管理的公共 SSH 密钥。当虚拟机第一次引导时,密钥会添加为 cloud-init 数据源。
在使用 Web 控制台创建虚拟机时,您还可以将公共 SSH 密钥添加到项目中。密钥保存为 secret,并自动添加到您创建的所有虚拟机中。
如果您在项目中添加 secret,然后删除虚拟机,则 secret 会被保留,因为它是一个命名空间资源。您必须手动删除 secret。
7.5.2.2.1. 从模板创建虚拟机时添加密钥 复制链接链接已复制到粘贴板!
在使用 OpenShift Container Platform web 控制台创建虚拟机时,您可以添加静态管理的公共 SSH 密钥。密钥会在第一次引导时作为 cloud-init 数据源添加到虚拟机。这个方法不会影响 cloud-init 用户数据。
可选:您可以在项目中添加密钥。之后,此密钥会自动添加到您在项目中创建的虚拟机。
先决条件
-
您可以通过运行
ssh-keygen命令生成 SSH 密钥对。
流程
- 在 web 控制台中进入到 Virtualization → Catalog。
点模板标题。
客户机操作系统必须支持 cloud-init 数据源的配置。
- 点 Customize VirtualMachine。
- 点击 Next。
- 点 Scripts 选项卡。
如果您还没有在项目中添加公共 SSH 密钥,点 Authorized SSH key 旁边的编辑图标,然后选择以下选项之一:
- 使用现有 :从 secrets 列表中选择一个 secret。
添加新 :
- 浏览到 SSH 密钥文件或在 key 字段中粘贴文件。
- 输入 secret 名称。
- 可选: 选择 Automatically apply this key to any new VirtualMachine you create in this project。
- 点击 Save。
点 Create VirtualMachine。
VirtualMachine 详情页显示创建虚拟机的进度。
验证
点 Configuration 选项卡上的 Scripts 选项卡。
secret 名称显示在 Authorized SSH key 部分中。
7.5.2.2.2. 使用 Web 控制台从实例类型创建虚拟机时添加密钥 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform web 控制台从实例类型创建虚拟机 (VM)。您还可以通过复制现有快照或克隆虚拟机,来使用 Web 控制台创建虚拟机。
您可以从可用可引导卷列表创建虚拟机。您可以在列表中添加基于 Linux 或 Windows 的卷。
在使用 OpenShift Container Platform web 控制台从实例类型创建虚拟机(VM)时,您可以添加静态管理的 SSH 密钥。密钥会在第一次引导时作为 cloud-init 数据源添加到虚拟机。这个方法不会影响 cloud-init 用户数据。
流程
在 Web 控制台中,进入到 Virtualization → Catalog。
InstanceTypes 选项卡默认为打开。
选择以下选项之一:
从列表中选择合适的可引导卷。如果列表已被截断,请点 Show all 按钮来显示整个列表。
注意可引导的卷表仅列出
openshift-virtualization-os-images命名空间中具有instancetype.kubevirt.io/default-preference标签的卷。- 可选:点星号图标将可引导卷指定为热门卷。不足的可引导卷首先出现在卷列表中。
点 Add volume 上传新卷,或使用现有的持久性卷声明(PVC)、卷快照或
containerDisk卷。点击 Save。集群中不可用的操作系统的徽标显示在列表的底部。您可以点 Add volume 链接为所需的操作系统添加卷。
另外,还有 创建 Windows 引导源快速启动的链接。如果您将鼠标悬停在 Select volume to boot from 行旁边的问号图标上,则同一链接会出现在弹出窗口中。
安装环境或环境断开连接后,从中引导的卷列表为空。在这种情况下,会显示三个操作系统徽标:Windows、RHEL 和 Linux。您可以点 Add volume 按钮添加新卷来满足您的要求。
- 点实例类型标题,然后选择适合您的工作负载的资源大小。
可选:选择虚拟机详情,包括虚拟机的名称,适用于您要从其引导的卷:
对于基于 Linux 的卷,请按照以下步骤配置 SSH:
- 如果您还没有在项目中添加公共 SSH 密钥,点 VirtualMachine details 部分中的 Authorized SSH key 旁边的编辑图标。
选择以下选项之一:
- 使用现有 :从 secrets 列表中选择一个 secret。
Add new: 遵循以下步骤:
- 浏览到公共 SSH 密钥文件,或在 key 字段中粘贴文件。
- 输入 secret 名称。
- 可选: 选择 Automatically apply this key to any new VirtualMachine you create in this project。
- 点击 Save。
对于 Windows 卷,请按照以下步骤配置 sysprep 选项:
如果您还没有为 Windows 卷添加 sysprep 选项,请按照以下步骤执行:
- 点 VirtualMachine 详情 部分中的 Sysprep 的编辑图标。
- 添加 Autoattend.xml 回答文件。
- 添加 Unattend.xml 回答文件。
- 点击 Save。
如果要将现有的 sysprep 选项用于 Windows 卷,请按照以下步骤执行:
- 点 Attach existing sysprep。
- 输入现有 sysprep Unattend.xml 回答文件的名称。
- 点击 Save。
可选: 如果要创建 Windows 虚拟机,您可以挂载 Windows 驱动程序磁盘:
- 点 Customize VirtualMachine 按钮。
- 在 VirtualMachine 详情页中,点 Storage。
- 选择 Mount Windows 驱动程序磁盘复选框。
- 可选:点 View YAML & CLI 查看 YAML 文件。点 CLI 查看 CLI 命令。您还可以下载或复制 YAML 文件内容或 CLI 命令。
- 点 Create VirtualMachine。
创建虚拟机后,您可以在 VirtualMachine 详情页中监控状态。
7.5.2.2.3. 使用命令行在创建虚拟机时添加密钥 复制链接链接已复制到粘贴板!
当使用命令行创建虚拟机(VM)时,您可以添加静态管理的公共 SSH 密钥。密钥会在第一次引导时添加到虚拟机。
密钥作为 cloud-init 数据源添加到虚拟机中。此方法将访问凭据与 cloud-init 用户数据中的应用数据分隔开。这个方法不会影响 cloud-init 用户数据。
先决条件
-
您可以通过运行
ssh-keygen命令生成 SSH 密钥对。
流程
为
VirtualMachine对象和Secret对象创建清单文件:清单示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
VirtualMachine和Secret对象:oc create -f <manifest_file>.yaml
$ oc create -f <manifest_file>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来启动虚拟机:
virtctl start vm example-vm -n example-namespace
$ virtctl start vm example-vm -n example-namespaceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
获取虚拟机配置:
oc describe vm example-vm -n example-namespace
$ oc describe vm example-vm -n example-namespaceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.5.2.3. 动态密钥管理 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform Web 控制台或命令行为虚拟机(VM)启用动态密钥注入。然后,您可以在运行时更新密钥。
只有 Red Hat Enterprise Linux (RHEL) 9 支持动态密钥注入。
如果您禁用动态密钥注入,则虚拟机会继承创建它的镜像的密钥管理方法。
7.5.2.3.1. 从模板创建虚拟机时启用动态密钥注入 复制链接链接已复制到粘贴板!
在使用 OpenShift Container Platform web 控制台从模板创建虚拟机时,您可以启用动态公共 SSH 密钥注入。然后,您可以在运行时更新密钥。
只有 Red Hat Enterprise Linux (RHEL) 9 支持动态密钥注入。
密钥由 QEMU 客户机代理添加到虚拟机,该代理使用 RHEL 9 安装。
先决条件
-
您可以通过运行
ssh-keygen命令生成 SSH 密钥对。
流程
- 在 web 控制台中进入到 Virtualization → Catalog。
- 点 Red Hat Enterprise Linux 9 虚拟机 标题。
- 点 Customize VirtualMachine。
- 点击 Next。
- 点 Scripts 选项卡。
如果您还没有在项目中添加公共 SSH 密钥,点 Authorized SSH key 旁边的编辑图标,然后选择以下选项之一:
- 使用现有 :从 secrets 列表中选择一个 secret。
添加新 :
- 浏览到 SSH 密钥文件或在 key 字段中粘贴文件。
- 输入 secret 名称。
- 可选: 选择 Automatically apply this key to any new VirtualMachine you create in this project。
- 将 Dynamic SSH 密钥注入 设置为 on。
- 点击 Save。
点 Create VirtualMachine。
VirtualMachine 详情页显示创建虚拟机的进度。
验证
点 Configuration 选项卡上的 Scripts 选项卡。
secret 名称显示在 Authorized SSH key 部分中。
7.5.2.3.2. 使用 Web 控制台在从实例类型创建虚拟机时启用动态密钥注入 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform web 控制台从实例类型创建虚拟机 (VM)。您还可以通过复制现有快照或克隆虚拟机,来使用 Web 控制台创建虚拟机。
您可以从可用可引导卷列表创建虚拟机。您可以在列表中添加基于 Linux 或 Windows 的卷。
在使用 OpenShift Container Platform web 控制台从实例类型创建虚拟机(VM)时,您可以启用动态 SSH 密钥注入。然后,您可以在运行时添加或撤销密钥。
只有 Red Hat Enterprise Linux (RHEL) 9 支持动态密钥注入。
密钥由 QEMU 客户机代理添加到虚拟机,该代理使用 RHEL 9 安装。
流程
在 Web 控制台中,进入到 Virtualization → Catalog。
InstanceTypes 选项卡默认为打开。
选择以下选项之一:
从列表中选择合适的可引导卷。如果列表已被截断,请点 Show all 按钮来显示整个列表。
注意可引导的卷表仅列出
openshift-virtualization-os-images命名空间中具有instancetype.kubevirt.io/default-preference标签的卷。- 可选:点星号图标将可引导卷指定为热门卷。不足的可引导卷首先出现在卷列表中。
点 Add volume 上传新卷,或使用现有的持久性卷声明(PVC)、卷快照或
containerDisk卷。点击 Save。集群中不可用的操作系统的徽标显示在列表的底部。您可以点 Add volume 链接为所需的操作系统添加卷。
另外,还有 创建 Windows 引导源快速启动的链接。如果您将鼠标悬停在 Select volume to boot from 行旁边的问号图标上,则同一链接会出现在弹出窗口中。
安装环境或环境断开连接后,从中引导的卷列表为空。在这种情况下,会显示三个操作系统徽标:Windows、RHEL 和 Linux。您可以点 Add volume 按钮添加新卷来满足您的要求。
- 点实例类型标题,然后选择适合您的工作负载的资源大小。
- 点 Red Hat Enterprise Linux 9 虚拟机 标题。
可选:选择虚拟机详情,包括虚拟机的名称,适用于您要从其引导的卷:
对于基于 Linux 的卷,请按照以下步骤配置 SSH:
- 如果您还没有在项目中添加公共 SSH 密钥,点 VirtualMachine details 部分中的 Authorized SSH key 旁边的编辑图标。
选择以下选项之一:
- 使用现有 :从 secrets 列表中选择一个 secret。
Add new: 遵循以下步骤:
- 浏览到公共 SSH 密钥文件,或在 key 字段中粘贴文件。
- 输入 secret 名称。
- 可选: 选择 Automatically apply this key to any new VirtualMachine you create in this project。
- 点击 Save。
对于 Windows 卷,请按照以下步骤配置 sysprep 选项:
如果您还没有为 Windows 卷添加 sysprep 选项,请按照以下步骤执行:
- 点 VirtualMachine 详情 部分中的 Sysprep 的编辑图标。
- 添加 Autoattend.xml 回答文件。
- 添加 Unattend.xml 回答文件。
- 点击 Save。
如果要将现有的 sysprep 选项用于 Windows 卷,请按照以下步骤执行:
- 点 Attach existing sysprep。
- 输入现有 sysprep Unattend.xml 回答文件的名称。
- 点击 Save。
- 在 VirtualMachine 详情 部分中将 Dynamic SSH 密钥注入 设置为 on。
可选: 如果要创建 Windows 虚拟机,您可以挂载 Windows 驱动程序磁盘:
- 点 Customize VirtualMachine 按钮。
- 在 VirtualMachine 详情页中,点 Storage。
- 选择 Mount Windows 驱动程序磁盘复选框。
- 可选:点 View YAML & CLI 查看 YAML 文件。点 CLI 查看 CLI 命令。您还可以下载或复制 YAML 文件内容或 CLI 命令。
- 点 Create VirtualMachine。
创建虚拟机后,您可以在 VirtualMachine 详情页中监控状态。
7.5.2.3.3. 使用 Web 控制台启用动态 SSH 密钥注入 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform Web 控制台为虚拟机 (VM) 启用动态密钥注入。然后,您可以在运行时更新公共 SSH 密钥。
该密钥由 QEMU 客户机代理添加到虚拟机,该代理与 Red Hat Enterprise Linux (RHEL) 9 一起安装。
先决条件
- 客户机操作系统是 RHEL 9。
流程
- 在 web 控制台中进入到 Virtualization → VirtualMachines。
- 选择一个虚拟机以打开 VirtualMachine 详情页。
- 在 Configuration 选项卡上,点 Scripts。
如果您还没有在项目中添加公共 SSH 密钥,点 Authorized SSH key 旁边的编辑图标,然后选择以下选项之一:
- 使用现有 :从 secrets 列表中选择一个 secret。
添加新 :
- 浏览到 SSH 密钥文件或在 key 字段中粘贴文件。
- 输入 secret 名称。
- 可选: 选择 Automatically apply this key to any new VirtualMachine you create in this project。
- 将 Dynamic SSH 密钥注入 设置为 on。
- 点击 Save。
7.5.2.3.4. 使用命令行启用动态密钥注入 复制链接链接已复制到粘贴板!
您可以使用命令行为虚拟机启用动态密钥注入。然后,您可以在运行时更新公共 SSH 密钥。
只有 Red Hat Enterprise Linux (RHEL) 9 支持动态密钥注入。
密钥由 QEMU 客户机代理添加到虚拟机,该代理使用 RHEL 9 自动安装安装。
先决条件
-
您可以通过运行
ssh-keygen命令生成 SSH 密钥对。
流程
为
VirtualMachine对象和Secret对象创建清单文件:清单示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
VirtualMachine和Secret对象:oc create -f <manifest_file>.yaml
$ oc create -f <manifest_file>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来启动虚拟机:
virtctl start vm example-vm -n example-namespace
$ virtctl start vm example-vm -n example-namespaceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
获取虚拟机配置:
oc describe vm example-vm -n example-namespace
$ oc describe vm example-vm -n example-namespaceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.5.2.4. 使用 virtctl ssh 命令 复制链接链接已复制到粘贴板!
您可以使用 virtcl ssh 命令访问正在运行的虚拟机(VM)。
先决条件
-
已安装
virtctl命令行工具。 - 您已向虚拟机添加了一个公共 SSH 密钥。
- 已安装 SSH 客户端。
-
安装
virtctl工具的环境具有访问虚拟机所需的集群权限。例如,运行oc login或设置了KUBECONFIG环境变量。
流程
运行
virtctl ssh命令:virtctl -n <namespace> ssh <username>@example-vm -i <ssh_key>
$ virtctl -n <namespace> ssh <username>@example-vm -i <ssh_key>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定命名空间、用户名和 SSH 私钥。默认的 SSH 密钥位置为
/home/user/.ssh。如果密钥保存在不同的位置,您必须指定路径。
例如
virtctl -n my-namespace ssh cloud-user@example-vm -i my-key
$ virtctl -n my-namespace ssh cloud-user@example-vm -i my-keyCopy to Clipboard Copied! Toggle word wrap Toggle overflow
您可以在 web 控制台中复制 virtctl ssh 命令,方法是从 VirtualMachines 页中的虚拟机旁的选项
菜单中选择 Copy SSH 命令。
7.5.3. 使用 virtctl port-forward 命令 复制链接链接已复制到粘贴板!
您可以使用本地 OpenSSH 客户端和 virtctl port-forward 命令连接到正在运行的虚拟机 (VM)。您可以将此方法与 Ansible 配合使用,以自动配置虚拟机。
对于低流量应用程序,建议使用这个方法,因为端口转发流量通过 control plane 发送。对于 Rsync 或 Remote Desktop 协议等高流量应用程序(如 Rsync 或 Remote Desktop 协议)使用这个方法,因为它对 API 服务器造成大量负担。
先决条件
-
已安装
virtctl客户端。 - 您要访问的虚拟机正在运行。
-
安装
virtctl工具的环境具有访问虚拟机所需的集群权限。例如,运行oc login或设置了KUBECONFIG环境变量。
流程
在客户端机器上的
~/.ssh/config文件中添加以下文本:Host vm/* ProxyCommand virtctl port-forward --stdio=true %h %p
Host vm/* ProxyCommand virtctl port-forward --stdio=true %h %pCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来连接到虚拟机:
ssh <user>@vm/<vm_name>.<namespace>
$ ssh <user>@vm/<vm_name>.<namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.5.4. 使用服务进行 SSH 访问 复制链接链接已复制到粘贴板!
您可以为虚拟机(VM)创建服务,并连接到该服务公开的 IP 地址和端口。
服务为从集群外部或集群外部访问的应用程序提供出色的性能,并推荐使用。入口流量受防火墙保护。
如果集群网络无法处理流量负载,请考虑使用二级网络进行虚拟机访问。
7.5.4.1. 关于服务 复制链接链接已复制到粘贴板!
Kubernetes 服务将客户端的网络访问权限公开给一组容器集上运行的应用。服务在 NodePort 和 LoadBalancer 类型方面提供抽象、负载均衡以及暴露于外部世界。
- ClusterIP
-
在内部 IP 地址上公开服务,并将 DNS 名称公开给集群中的其他应用程序。单个服务可映射到多个虚拟机。当客户端尝试连接到服务时,客户端请求会在可用后端之间平衡负载。
ClusterIP是默认的服务类型。 - NodePort
-
在集群中每个所选节点的同一端口上公开该服务。
NodePort使端口可从集群外部访问,只要节点本身可以被客户端外部访问。 - LoadBalancer
- 在当前云中创建外部负载均衡器(如果支持),并为该服务分配固定的外部 IP 地址。
对于内部集群,您可以通过部署 MetalLB Operator 来配置负载均衡服务。
7.5.4.2. 创建服务 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform web 控制台、virtctl 命令行工具或 YAML 文件创建服务来公开虚拟机(VM)。
7.5.4.2.1. 使用 Web 控制台启用负载均衡器服务创建 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform web 控制台为虚拟机(VM)创建负载均衡器服务。
先决条件
- 已为集群配置负载均衡器。
-
以具有
cluster-admin角色的用户身份登录。 - 为网络创建了网络附加定义。
流程
- 进入到 Virtualization → Overview。
- 在 Settings 选项卡中,点 Cluster。
- 展开 General settings 和 SSH 配置。
- 将 SSH over LoadBalancer 服务 设置为 on。
7.5.4.2.2. 使用 Web 控制台创建服务 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform web 控制台为虚拟机(VM)创建节点端口或负载均衡器服务。
先决条件
- 已将集群网络配置为支持负载均衡器或节点端口。
- 要创建负载均衡器服务,您需要已启用了创建负载均衡器服务。
流程
- 进入 VirtualMachines 并选择虚拟机来查看 VirtualMachine 详情页。
- 在 Details 选项卡中,从 SSH service type 列表中选择 SSH over LoadBalancer。
-
可选:点复制图标将
SSH命令复制到您的剪贴板。
验证
- 检查 Details 标签页中的 Services 窗格,以查看新服务。
7.5.4.2.3. 使用 virtctl 创建服务 复制链接链接已复制到粘贴板!
您可以使用 virtctl 命令行工具为虚拟机 (VM) 创建服务。
先决条件
-
已安装
virtctl命令行工具。 - 您已将集群网络配置为支持该服务。
-
安装
virtctl的环境具有访问虚拟机所需的集群权限。例如,运行oc login或设置了KUBECONFIG环境变量。
流程
运行以下命令来创建服务:
virtctl expose vm <vm_name> --name <service_name> --type <service_type> --port <port>
$ virtctl expose vm <vm_name> --name <service_name> --type <service_type> --port <port>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定
ClusterIP、NodePort或LoadBalancer服务类型。
例如
virtctl expose vm example-vm --name example-service --type NodePort --port 22
$ virtctl expose vm example-vm --name example-service --type NodePort --port 22Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令验证服务:
oc get service
$ oc get serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
后续步骤
使用 virtctl 创建服务后,您必须将 special: key 添加到 VirtualMachine 清单的 spec.template.metadata.labels 小节中。请参阅使用命令行创建服务。
7.5.4.2.4. 使用命令行创建服务 复制链接链接已复制到粘贴板!
您可以使用命令行创建服务并将其与虚拟机 (VM) 关联。
先决条件
- 您已将集群网络配置为支持该服务。
流程
编辑
VirtualMachine清单,为创建服务添加标签:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 在
spec.template.metadata.labels小节中添加special: key。
注意虚拟机上的标签会传递到 pod。
special: key标签必须与Service清单的spec.selector属性中的标签匹配。-
保存
VirtualMachine清单文件以应用更改。 创建
Service清单以公开虚拟机:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
保存
Service清单文件。 运行以下命令来创建服务:
oc create -f example-service.yaml
$ oc create -f example-service.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 重启虚拟机以应用更改。
验证
查询
Service对象以验证它是否可用:oc get service -n example-namespace
$ oc get service -n example-namespaceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.5.4.3. 使用 SSH 连接到服务公开的虚拟机 复制链接链接已复制到粘贴板!
您可以使用 SSH 连接到服务公开的虚拟机 (VM)。
先决条件
- 您创建了服务来公开虚拟机。
- 已安装 SSH 客户端。
- 已登陆到集群。
流程
运行以下命令来访问虚拟机:
ssh <user_name>@<ip_address> -p <port>
$ ssh <user_name>@<ip_address> -p <port>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定集群 IP 服务的集群 IP、节点端口服务的节点 IP 或负载均衡器服务的外部 IP 地址。
7.5.5. 使用二级网络进行 SSH 访问 复制链接链接已复制到粘贴板!
您可以配置二级网络,将虚拟机 (VM) 附加到二级网络接口,并使用 SSH 连接到 DHCP 分配的 IP 地址。
辅助网络提供卓越的性能,因为流量不是由集群网络堆栈处理。但是,虚拟机直接公开给二级网络,不受防火墙保护。如果虚拟机被破坏,入侵者可能会获得对二级网络的访问权限。如果使用此方法,您必须在虚拟机操作系统中配置适当的安全性。
有关网络选项的更多信息,请参阅 OpenShift Virtualization 调优和扩展指南中的 Multus 和 SR-IOV 文档。
先决条件
- 已配置了一个二级网络,如 Linux 网桥或 SR-IOV。
-
为 Linux 网桥网络 或 SR-IOV Network Operator 创建网络附加定义,在创建
SriovNetwork对象时创建了网络附加定义。
7.5.5.1. 使用 Web 控制台配置虚拟机网络接口 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform Web 控制台为虚拟机配置网络接口。
先决条件
- 为网络创建了网络附加定义。
流程
- 进入到 Virtualization → VirtualMachines。
- 点虚拟机查看 VirtualMachine 详情页。
- 在 Configuration 选项卡上,点 Network interfaces 选项卡。
- 点 Add network interface。
- 输入接口名称,然后从 Network 列表中选择网络附加定义。
- 点击 Save。
- 重启或实时迁移虚拟机以应用更改。
7.5.5.2. 使用 SSH 连接到附加到二级网络的虚拟机 复制链接链接已复制到粘贴板!
您可以使用 SSH 连接到二级网络的虚拟机 (VM)。
先决条件
- 将虚拟机附加到使用 DHCP 服务器的二级网络。
- 已安装 SSH 客户端。
流程
运行以下命令来获取虚拟机的 IP 地址:
oc describe vm <vm_name> -n <namespace>
$ oc describe vm <vm_name> -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来连接到虚拟机:
ssh <user_name>@<ip_address> -i <ssh_key>
$ ssh <user_name>@<ip_address> -i <ssh_key>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如
ssh cloud-user@10.244.0.37 -i ~/.ssh/id_rsa_cloud-user
$ ssh cloud-user@10.244.0.37 -i ~/.ssh/id_rsa_cloud-userCopy to Clipboard Copied! Toggle word wrap Toggle overflow
您还可以使用 集群 FQDN 访问附加到二级网络接口的虚拟机。
7.6. 编辑虚拟机 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform web 控制台更新虚拟机(VM)配置。您可以更新 YAML 文件或 VirtualMachine 详情页。
您还可以使用命令行编辑虚拟机。
要编辑虚拟机以使用虚拟磁盘或 LUN 配置磁盘共享,请参阅为虚拟机配置共享卷。
7.6.1. 热插虚拟机内存 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform web 控制台添加或删除分配给虚拟机 (VM) 的内存量,而无需使用 OpenShift Container Platform web 控制台重启虚拟机。
流程
- 进入到 Virtualization → VirtualMachines。
- 选择所需的虚拟机以打开 VirtualMachine 详情页。
- 在 Configuration 选项卡中,点 Edit CPU|Memory。
输入所需内存量,然后点保存。
注意您可以热插到默认虚拟机初始内存量的三倍。超过这个限制需要重启。
系统会立即应用这些更改。如果虚拟机是可迁移的,则会触发实时迁移。如果没有,或者无法更新更改,则会为虚拟机添加一个
RestartRequired条件。
虚拟机的内存热插拔需要 virtio-mem 驱动程序的客户机操作系统支持。这个支持取决于客户端操作系统中包含的和启用的驱动程序,而不是在特定的上游内核版本中。
支持的客户端操作系统:
- RHEL 9.4 及更新的版本
- RHEL 8.10 及更新的版本(默认情况下禁用 hot-unplug)
-
其他 Linux 客户机需要内核版本 5.16 或更高版本,以及
virtio-mem内核模块 -
Windows 客户机需要
virtio-mem驱动程序版本 100.95.104.26200 或更高版本
7.6.2. 在虚拟机上热插 CPU 复制链接链接已复制到粘贴板!
您可以增加或减少分配给虚拟机的 CPU 插槽数量,而无需使用 OpenShift Container Platform web 控制台重启虚拟机。
流程
- 进入到 Virtualization → VirtualMachines。
- 选择所需的虚拟机以打开 VirtualMachine 详情页。
- 在 Configuration 选项卡中,点 Edit CPU|Memory。
- 选择 vCPU 单选按钮。
输入所需的 vCPU 插槽数量,然后点 Save。
注意您可以热插到虚拟机的默认 vCPU 插槽初始数的三倍。超过这个限制需要重启。
如果虚拟机是可迁移的,则会触发实时迁移。如果没有,或者无法更新更改,则会为虚拟机添加一个
RestartRequired条件。
7.6.3. 使用命令行编辑虚拟机 复制链接链接已复制到粘贴板!
您可以使用命令行编辑虚拟机 (VM)。
先决条件
-
已安装
ocCLI。
流程
运行以下命令来获取虚拟机配置:
oc edit vm <vm_name>
$ oc edit vm <vm_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 编辑 YAML 配置。
如果要编辑正在运行的虚拟机,您需要执行以下任一操作:
- 重启虚拟机。
运行以下命令使新配置生效:
oc apply vm <vm_name> -n <namespace>
$ oc apply vm <vm_name> -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.6.4. 将磁盘添加到虚拟机 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform web 控制台将虚拟磁盘添加到虚拟机 (VM)。
流程
- 在 web 控制台中进入到 Virtualization → VirtualMachines。
- 选择一个虚拟机以打开 VirtualMachine 详情页。
- 在 Disks 选项卡上,点 Add disk。
指定 Source、Name、Size、Type、Interface 和 Storage Class。
- 可选:如果您使用空磁盘源并在创建数据卷时要求最大写入性能,则可以启用预分配。如果要这样做,可选中启用预分配复选框。
-
可选:您可以清除 Apply optimized StorageProfile 设置,以更改虚拟磁盘的卷模式和访问模式。如果没有指定这些参数,系统将使用
kubevirt-storage-class-defaults配置映射中的默认值。
- 点击 Add。
如果虚拟机正在运行,您必须重启虚拟机以应用更改。
7.6.4.1. 存储字段 复制链接链接已复制到粘贴板!
| 字段 | 描述 |
|---|---|
| 空白(创建 PVC) | 创建一个空磁盘。 |
| 通过 URL 导入(创建 PVC) | 通过 URL(HTTP 或 HTTPS 端点)导入内容。 |
| 使用现有的 PVC | 使用集群中已可用的 PVC。 |
| 克隆现有的 PVC(创建 PVC) | 选择集群中可用的现有 PVC 并克隆它。 |
| 通过 Registry 导入(创建 PVC) | 通过容器 registry 导入内容。 |
| 容器(临时) | 从集群可以访问的 registry 中的容器上传内容。容器磁盘应只用于只读文件系统,如 CD-ROM 或临时虚拟机。 |
| 名称 |
磁盘的名称。名称可包含小写字母 ( |
| Size | GiB 中磁盘的大小。 |
| 类型 | 磁盘类型。示例:磁盘或光盘 |
| Interface | 磁盘设备的类型。支持的接口包括 virtIO、SATA 和 SCSI。 |
| Storage class | 用于创建磁盘的存储类。 |
高级存储设置
以下高级存储设置是可选的,对 Blank, Import via URL, and Clone existing PVC 磁盘可用。
如果没有指定这些参数,系统将使用默认存储配置集值。
| 参数 | 选项 | 参数描述 |
|---|---|---|
| 卷模式 | Filesystem | 在基于文件系统的卷中保存虚拟磁盘。 |
| Block |
直接将虚拟磁盘存储在块卷中。只有底层存储支持时才使用 | |
| 访问模式 | ReadWriteOnce (RWO) | 卷可以被一个节点以读写模式挂载。 |
| ReadWriteMany (RWX) | 卷可以被多个节点以读写模式挂载。 注意 实时迁移需要此模式。 |
7.6.5. 在虚拟机上挂载 Windows 驱动程序磁盘 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform Web 控制台将 Windows 驱动程序磁盘挂载到虚拟机 (VM) 上。
流程
- 进入到 Virtualization → VirtualMachines。
- 选择所需的虚拟机以打开 VirtualMachine 详情页。
- 在 Configuration 选项卡中,点 Storage。
选择 Mount Windows 驱动程序磁盘复选框。
Windows 驱动程序磁盘显示在挂载的磁盘列表中。
7.6.6. 将 secret、配置映射或服务帐户添加到虚拟机 复制链接链接已复制到粘贴板!
使用 OpenShift Container Platform Web 控制台向虚拟机添加 secret、配置映射或服务帐户。
这些资源作为磁盘添加到虚拟机中。您可在挂载任何其他磁盘时挂载 secret、配置映射或服务帐户。
如果虚拟机正在运行,则更改在重启虚拟机之后才会生效。新添加的资源在页面的顶部被标记为待处理更改。
先决条件
- 要添加的 secret、配置映射或服务帐户必须与目标虚拟机位于同一命名空间中。
流程
- 在侧边菜单中点 Virtualization → VirtualMachines。
- 选择虚拟机以打开 VirtualMachine 详情页面。
- 点 Configuration → Environment。
- 点 Add Config Map、Secret 或 Service Account。
- 点 Select a resource,从列表中选择一个资源。为所选资源自动生成带有六个字符的序列号。
- 可选:点 Reload 将环境恢复到其上次保存的状态。
- 点击 Save。
验证
- 在 VirtualMachine 详情页面中,点 Configuration → Disks 并验证资源是否在磁盘列表中显示。
- 点 Actions → Restart 重启虚拟机。
现在,您可以在挂载任何其他磁盘时挂载 secret、配置映射或服务帐户。
配置映射、secret 和服务帐户的其他资源
7.7. 编辑引导顺序 复制链接链接已复制到粘贴板!
您可以使用 Web 控制台或 CLI 更新引导顺序列表的值。
通过 Virtual Machine Overview 页面中的 Boot Order ,您可以:
- 选择磁盘或网络接口控制器 (NIC) 并将其添加到引导顺序列表中。
- 编辑引导顺序列表中磁盘或 NIC 的顺序。
- 从引导顺序列表中移除磁盘或者 NIC,然后将其返回到可引导源清单。
7.7.1. 向 web 控制台的引导顺序列表中添加项目 复制链接链接已复制到粘贴板!
使用 web 控制台将项目添加到引导顺序列表中。
流程
- 在侧边菜单中点 Virtualization → VirtualMachines。
- 选择虚拟机以打开 VirtualMachine 详情页面。
- 点 Details 标签页。
- 点击位于 Boot Order 右侧的铅笔图标。如果 YAML 配置不存在,或者是首次创建引导顺序列表时,会显示以下消息: No resource selected.虚拟机会根据在 YAML 文件中的顺序从磁盘引导。
- 点 Add Source,为虚拟机选择一个可引导磁盘或网络接口控制器 (NIC)。
- 在引导顺序列表中添加附加磁盘或者 NIC。
- 点 Save。
如果虚拟机正在运行,在重启虚拟机后对 Boot Order 的更改不会生效。
您可以点 Boot Order 字段右侧的 View Pending Changes 查看待处理的修改。页面顶部的 Pending Changes 标题显示虚拟机重启时将应用的所有更改列表。
7.7.2. 在 web 控制台中编辑引导顺序列表 复制链接链接已复制到粘贴板!
在 web 控制台中编辑引导顺序列表。
流程
- 在侧边菜单中点 Virtualization → VirtualMachines。
- 选择虚拟机以打开 VirtualMachine 详情页面。
- 点 Details 标签页。
- 点击位于 Boot Order 右侧的铅笔图标。
选择适当的方法来移动引导顺序列表中的项目:
- 如果您没有使用屏幕阅读器,请在您想要移动的项目旁的箭头图标上切换,拖动或下移项目,然后将其放到您选择的位置。
- 如果您使用屏幕阅读器,请按上箭头或者下箭头键移动引导顺序列表中的项目。然后,按 Tab 键将项目放到您选择的位置。
- 点 Save。
如果虚拟机正在运行,对引导顺序列表的更改将在重启虚拟机后才会生效。
您可以点 Boot Order 字段右侧的 View Pending Changes 查看待处理的修改。页面顶部的 Pending Changes 标题显示虚拟机重启时将应用的所有更改列表。
7.7.3. 在 YAML 配置文件中编辑引导顺序列表 复制链接链接已复制到粘贴板!
使用 CLI 编辑 YAML 配置文件中的引导顺序列表。
流程
运行以下命令为虚拟机打开 YAML 配置文件:
oc edit vm <vm_name> -n <namespace>
$ oc edit vm <vm_name> -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑 YAML 文件并修改与磁盘或网络接口控制器 (NIC) 关联的引导顺序值。例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存 YAML 文件。
7.7.4. 从 web 控制台中的引导顺序列表中删除项目 复制链接链接已复制到粘贴板!
使用 Web 控制台从引导顺序列表中移除项目。
流程
- 在侧边菜单中点 Virtualization → VirtualMachines。
- 选择虚拟机以打开 VirtualMachine 详情页面。
- 点 Details 标签页。
- 点击位于 Boot Order 右侧的铅笔图标。
-
点击项
旁边的 Remove 图标。该项目从引导顺序列表中删除,可用引导源列表的内容被保存。如果您从引导顺序列表中删除所有项目,则会显示以下消息: No resource selected.虚拟机会根据在 YAML 文件中的顺序从磁盘引导。
如果虚拟机正在运行,在重启虚拟机后对 Boot Order 的更改不会生效。
您可以点 Boot Order 字段右侧的 View Pending Changes 查看待处理的修改。页面顶部的 Pending Changes 标题显示虚拟机重启时将应用的所有更改列表。
7.8. 删除虚拟机 复制链接链接已复制到粘贴板!
您可从 web 控制台或使用 oc 命令行删除虚拟机。
7.8.1. 使用 web 控制台删除虚拟机 复制链接链接已复制到粘贴板!
删除虚拟机会将其从集群中永久移除。
流程
- 在 OpenShift Container Platform 控制台中,从侧边菜单中点 Virtualization → VirtualMachines。
点虚拟机旁边的 Options 菜单
并选择 Delete。
或者,击虚拟机名称,打开 VirtualMachine 详情页面并点击 Actions → Delete。
- 可选: 选择 With grace period 或清除 Delete disks。
- 点 Delete 以永久删除虚拟机。
7.8.2. 使用 CLI 删除虚拟机 复制链接链接已复制到粘贴板!
您可以使用 oc 命令行接口 (CLI) 删除虚拟机。oc 客户端允许您在多个虚拟机上执行操作。
先决条件
- 找到要删除的虚拟机名称。
流程
运行以下命令以删除虚拟机:
oc delete vm <vm_name>
$ oc delete vm <vm_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意此命令只删除当前项目中的虚拟机。如果您要删除其他项目或命名空间中的虚拟机,请使用
-n <project_name>选项。
7.9. 导出虚拟机 复制链接链接已复制到粘贴板!
您可以导出虚拟机 (VM) 及其关联的磁盘,以将虚拟机导入到另一个集群或分析卷以备备目的。
您可以使用命令行界面创建一个 VirtualMachineExport 自定义资源 (CR)。
另外,您可以使用 virtctl vmexport 命令创建一个 VirtualMachineExport CR 并下载导出的卷。
您可以使用 Migration Toolkit for Virtualization 在 OpenShift Virtualization 集群间迁移虚拟机。
7.9.1. 创建 VirtualMachineExport 自定义资源 复制链接链接已复制到粘贴板!
您可以创建一个 VirtualMachineExport 自定义资源 (CR) 来导出以下对象:
- 虚拟机 (VM):导出指定虚拟机的持久性卷声明 (PVC)。
-
VM 快照:导出
VirtualMachineSnapshotCR 中包含的 PVC。 -
PVC :导出 PVC。如果 PVC 被另一个 pod (如
virt-launcherpod)使用,则导出会一直处于Pending状态,直到 PVC 不再使用为止。
VirtualMachineExport CR 为导出的卷创建内部和外部链接。内部链接在集群中有效。可以使用 Ingress 或 Route 访问外部链接。
导出服务器支持以下文件格式:
-
raw: 原始磁盘镜像文件。 -
gzip:压缩的磁盘镜像文件. -
dir:PVC 目录和文件。 -
tar.gz:压缩的 PVC 文件。
先决条件
- 必须为虚拟机导出关闭虚拟机。
流程
创建一个
VirtualMachineExport清单,根据以下示例从VirtualMachine、VirtualMachineSnapshot或PersistentVolumeClaimCR 导出卷,并将其保存为example-export.yaml:VirtualMachineExport示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
VirtualMachineExportCR:oc create -f example-export.yaml
$ oc create -f example-export.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 获取
VirtualMachineExportCR:oc get vmexport example-export -o yaml
$ oc get vmexport example-export -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 导出的卷的内部和外部链接显示在
status小节中:输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.9.2. 访问导出的虚拟机清单 复制链接链接已复制到粘贴板!
导出虚拟机 (VM) 或快照后,您可以从导出服务器获取 VirtualMachine 清单和相关信息。
先决条件
您可以通过创建一个
VirtualMachineExport自定义资源 (CR) 来导出虚拟机或虚拟机快照。注意具有
spec.source.kind: PersistentVolumeClaim参数的VirtualMachineExport对象不会生成虚拟机清单。
流程
要访问清单,您必须首先将证书从源集群复制到目标集群。
- 登录到源集群。
运行以下命令,将证书保存到
cacert.crt文件中:oc get vmexport <export_name> -o jsonpath={.status.links.external.cert} > cacert.crt$ oc get vmexport <export_name> -o jsonpath={.status.links.external.cert} > cacert.crt1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 使用
VirtualMachineExport对象中的metadata.name值替换<export_name>。
-
将
cacert.crt文件复制到目标集群。
运行以下命令,解码源集群中的令牌并将其保存到
token_decode文件中:oc get secret export-token-<export_name> -o jsonpath={.data.token} | base64 --decode > token_decode$ oc get secret export-token-<export_name> -o jsonpath={.data.token} | base64 --decode > token_decode1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 使用
VirtualMachineExport对象中的metadata.name值替换<export_name>。
-
将
token_decode文件复制到目标集群。 运行以下命令来获取
VirtualMachineExport自定义资源:oc get vmexport <export_name> -o yaml
$ oc get vmexport <export_name> -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 查看
status.links小节,该小节被分为external和internal部分。请注意每个部分中的manifests.url字段:输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 登录到目标集群。
运行以下命令来获取
Secret清单:curl --cacert cacert.crt <secret_manifest_url> -H \ "x-kubevirt-export-token:token_decode" -H \ "Accept:application/yaml"
$ curl --cacert cacert.crt <secret_manifest_url> -H \1 "x-kubevirt-export-token:token_decode" -H \2 "Accept:application/yaml"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
curl --cacert cacert.crt https://vmexport-proxy.test.net/api/export.kubevirt.io/v1beta1/namespaces/example/virtualmachineexports/example-export/external/manifests/secret -H "x-kubevirt-export-token:token_decode" -H "Accept:application/yaml"
$ curl --cacert cacert.crt https://vmexport-proxy.test.net/api/export.kubevirt.io/v1beta1/namespaces/example/virtualmachineexports/example-export/external/manifests/secret -H "x-kubevirt-export-token:token_decode" -H "Accept:application/yaml"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,获取
type: all清单,如ConfigMap和VirtualMachine清单:curl --cacert cacert.crt <all_manifest_url> -H \ "x-kubevirt-export-token:token_decode" -H \ "Accept:application/yaml"
$ curl --cacert cacert.crt <all_manifest_url> -H \1 "x-kubevirt-export-token:token_decode" -H \2 "Accept:application/yaml"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
curl --cacert cacert.crt https://vmexport-proxy.test.net/api/export.kubevirt.io/v1beta1/namespaces/example/virtualmachineexports/example-export/external/manifests/all -H "x-kubevirt-export-token:token_decode" -H "Accept:application/yaml"
$ curl --cacert cacert.crt https://vmexport-proxy.test.net/api/export.kubevirt.io/v1beta1/namespaces/example/virtualmachineexports/example-export/external/manifests/all -H "x-kubevirt-export-token:token_decode" -H "Accept:application/yaml"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
后续步骤
-
现在,您可以使用导出的清单在目标集群中创建
ConfigMap和VirtualMachine对象。
7.10. 管理虚拟机实例 复制链接链接已复制到粘贴板!
如果您在 OpenShift Virtualization 环境之外创建独立虚拟机实例(VMI),您可以使用 web 控制台或使用命令行界面(CLI)使用 oc 或 virtctl 命令管理它们。
virtctl 命令提供比 oc 命令更多的虚拟化选项。例如,您可以使用 virtctl 暂停虚拟机或公开端口。
7.10.1. 关于虚拟机实例 复制链接链接已复制到粘贴板!
虚拟机实例(VMI)代表正在运行的虚拟机(VM)。当某个 VMI 属于某个虚拟机或者其他对象,您可通过 web 控制台中的拥有者或使用 oc 命令行界面(CLI)来管理它。
通过自动化或其他 CLI 的方法使用脚本创建并启动独立 VMI。在您的环境中,您可能会在 OpenShift Virtualization 环境之外开发并启动的独立 VMI。您可以使用 CLI 继续管理这些独立的 VMI。您还可以将 Web 控制台用于与独立 VMI 关联的特定任务:
- 列出独立 VMI 及其详情。
- 编辑独立 VMI 的标签和注解。
- 删除独立 VMI。
当删除虚拟机时,相关的 VMI 会被自动删除。您直接删除一个独立的 VMI,因为它不归 VM 或其他对象所有。
在卸载 OpenShift Virtualization 前,使用 CLI 或 Web 控制台列出并查看独立 VMI。然后,删除所有未完成的 VMI。
当您编辑虚拟机时,一些设置可能会动态地应用到 VMI 中,而无需重启。对无法动态应用到 VMI 的虚拟机对象所做的任何更改都会触发 RestartRequired VM 条件。更改在下次重启时有效,并删除了条件。
7.10.2. 使用 CLI 列出所有虚拟机实例 复制链接链接已复制到粘贴板!
您可以使用 oc 命令行界面(CLI)列出集群中的所有虚拟机实例(VMI),包括独立 VMI 和虚拟机拥有的实例。
流程
运行以下命令列出所有 VMI:
oc get vmis -A
$ oc get vmis -ACopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.10.3. 使用 web 控制台列出独立虚拟机实例 复制链接链接已复制到粘贴板!
使用 web 控制台,您可以列出并查看集群中不属于虚拟机(VM)的独立虚拟机实例(VMI)。
受 VM 或其他对象拥有的 VMI 不会被显示在 web 控制台中。web 控制台仅显示独立 VMI。如果要列出集群中的所有 VMI,则必须使用 CLI。
流程
在侧边菜单中点 Virtualization → VirtualMachines。
您可以在名称旁使用黑色徽标识别独立 VMI。
7.10.4. 使用 web 控制台编辑独立虚拟机实例 复制链接链接已复制到粘贴板!
您可以使用 web 控制台编辑独立虚拟机实例(VMI)的注解和标签。其他字段不可编辑。
流程
- 在 OpenShift Container Platform 控制台中,从侧边菜单中点 Virtualization → VirtualMachines。
- 选择独立 VMI 以打开 VirtualMachineInstance 详情页面。
- 在 Details 标签页中,点 Annotations 或 Labels 旁边的铅笔图标。
- 进行相关的更改并点击 Save。
7.10.5. 使用 CLI 删除独立虚拟机实例 复制链接链接已复制到粘贴板!
您可以使用 oc CLI 删除独立虚拟机实例。
先决条件
- 找出要删除的 VMI 的名称。
流程
运行以下命令来创建 VMI:
oc delete vmi <vmi_name>
$ oc delete vmi <vmi_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.10.6. 使用 web 控制台删除独立虚拟机实例 复制链接链接已复制到粘贴板!
从 web 控制台删除独立虚拟机实例(VMI)。
流程
- 在 OpenShift Container Platform web 控制台中,从侧边菜单中点 Virtualization → VirtualMachines。
- 点 Actions → Delete VirtualMachineInstance。
- 在弹出的确认窗口中点击 Delete 永久删除独立的 VMI。
7.11. 控制虚拟机状态 复制链接链接已复制到粘贴板!
您可从 web 控制台来停止、启动和重启虚拟机。
您可使用 virtctl 管理虚拟机状态并从 CLI 执行其他操作。例如,您可以使用 virtctl 来强制停止虚拟机或公开端口。
7.11.1. 使用 Web 控制台配置用于管理虚拟机状态的 RBAC 权限 复制链接链接已复制到粘贴板!
要允许用户使用 OpenShift Container Platform web 控制台管理虚拟机(VM)状态,您必须创建一个 RBAC 集群角色和集群角色绑定。集群角色使用 subresources.kubevirt.io API 来定义哪些资源可由某些用户或组控制。
先决条件
- 具有集群管理员对安装 OpenShift Virtualization 的 OpenShift Container Platform 集群的访问权限。
-
已安装 OpenShift CLI(
oc)。
流程
创建允许目标用户或组管理虚拟机状态的
ClusterRole对象:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令以应用集群角色:
oc apply -f <filename>.yaml
$ oc apply -f <filename>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令并确认集群角色已创建好,并观察其输出:
oc get clusterrole <name>
$ oc get clusterrole <name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
NAME AGE vm-manager-access 15s
NAME AGE vm-manager-access 15sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查集群角色的详情,并确保存在
subresources.kubevirt.io的预期规则,特别是virtualmachines/start和virtualmachines/stop子资源。运行以下命令并观察输出:
oc describe clusterrole <name>
$ oc describe clusterrole <name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
ClusterRoleBinding对象来将您创建的集群角色绑定到目标用户或组:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令以应用集群角色绑定:
oc apply -f <filename>.yaml
$ oc apply -f <filename>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令并观察输出,确认已创建了集群角色绑定:
oc get clusterrolebinding <name>
$ oc get clusterrolebinding <name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
NAME AGE vm-manager-access-binding 15s
NAME AGE vm-manager-access-binding 15sCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令,检查用户是否可以启动虚拟机:
oc auth can-i update virtualmachines/start --namespace=<namespace> --as=<user_name> --subresource=subresources.kubevirt.io
$ oc auth can-i update virtualmachines/start --namespace=<namespace> --as=<user_name> --subresource=subresources.kubevirt.ioCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
yes
yesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,检查用户是否可以停止虚拟机:
oc auth can-i update virtualmachines/stop --namespace=<namespace> --as=<user_name> --group=subresources.kubevirt.io
$ oc auth can-i update virtualmachines/stop --namespace=<namespace> --as=<user_name> --group=subresources.kubevirt.ioCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
yes
yesCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.11.2. 启动虚拟机 复制链接链接已复制到粘贴板!
您可从 web 控制台启动虚拟机。
流程
- 在侧边菜单中点 Virtualization → VirtualMachines。
- 找到包含要启动的虚拟机的行。
导航到适合您的用例的菜单:
要保留此页面(您可以在其中对多个虚拟机执行操作):
-
点击行右末尾的 Options 菜单
并点 Start VirtualMachine。
-
点击行右末尾的 Options 菜单
在启动虚拟机前,要查看有关所选虚拟机的综合信息:
- 点虚拟机名称访问 VirtualMachine 详情页面。
- 点 Actions → Start。
首次启动从 URL 源置备的虚拟机时,当 OpenShift Virtualization 从 URL 端点导入容器时,虚拟机将处于 Importing 状态。根据镜像大小,该过程可能需要几分钟时间。
7.11.3. 停止虚拟机 复制链接链接已复制到粘贴板!
您可从 web 控制台停止虚拟机。
流程
- 在侧边菜单中点 Virtualization → VirtualMachines。
- 找到包含您要停止的虚拟机的行。
导航到适合您的用例的菜单:
要保留此页面(您可以在其中对多个虚拟机执行操作):
-
点击位于行右边的 Options 菜单
,然后点 Stop VirtualMachine。
-
点击位于行右边的 Options 菜单
在停止之前,查看所选虚拟机的综合信息:
- 点虚拟机名称访问 VirtualMachine 详情页面。
- 点 Actions → Stop。
7.11.4. 重启虚拟机 复制链接链接已复制到粘贴板!
您可从 web 控制台重启正在运行的虚拟机。
为了避免错误,不要重启状态为 Importing 的虚拟机。
流程
- 在侧边菜单中点 Virtualization → VirtualMachines。
- 找到包含要启动的虚拟机的行。
导航到适合您的用例的菜单:
要保留此页面(您可以在其中对多个虚拟机执行操作):
-
点击位于行右边的 Options 菜单
并点 重启。
-
点击位于行右边的 Options 菜单
要在重启前查看有关所选虚拟机的综合信息:
- 点虚拟机名称访问 VirtualMachine 详情页面。
- 点 Actions → Restart。
7.11.5. 暂停虚拟机 复制链接链接已复制到粘贴板!
您可从 web 控制台暂停虚拟机。
流程
- 在侧边菜单中点 Virtualization → VirtualMachines。
- 找到包含您要暂停的虚拟机的行。
导航到适合您的用例的菜单:
要保留此页面(您可以在其中对多个虚拟机执行操作):
-
点击位于行右边的 Options 菜单
,然后点 暂停 VirtualMachine。
-
点击位于行右边的 Options 菜单
在暂停前,要查看有关所选虚拟机的综合信息:
- 点虚拟机名称访问 VirtualMachine 详情页面。
- 点 Actions → Pause。
7.11.6. 取消暂停虚拟机 复制链接链接已复制到粘贴板!
您可从 web 控制台取消暂停一个正暂停的虚拟机。
先决条件
- 至少一个虚拟机的状态是 Paused。
流程
- 在侧边菜单中点 Virtualization → VirtualMachines。
- 找到包含您要取消暂停的虚拟机的行。
导航到适合您的用例的菜单:
要保留此页面(您可以在其中对多个虚拟机执行操作):
-
点击行右末尾的 Options 菜单
,然后点 Unpause VirtualMachine。
-
点击行右末尾的 Options 菜单
要在取消暂停之前查看所选虚拟机的综合信息:
- 点虚拟机名称访问 VirtualMachine 详情页面。
- 点 Actions → Unpause。
7.12. 使用虚拟可信平台模块设备 复制链接链接已复制到粘贴板!
通过编辑 VirtualMachine (VM)或 VirtualMachineInstance (VMI)清单,将虚拟 Trusted Platform 模块(vTPM)设备添加到新的或现有虚拟机中。
不支持使用 vTPM 设备克隆或创建虚拟机快照。OpenShift Virtualization 4.18 添加了对使用 vTPM 设备创建虚拟机的支持。
7.12.1. 关于 vTPM 设备 复制链接链接已复制到粘贴板!
虚拟可信平台模块(vTPM)设备功能,如物理信任平台模块(TPM)硬件芯片。
您可以将 vTPM 设备与任何操作系统一起使用,但 Windows 11 需要存在 TPM 芯片用来安装或引导的 TPM 芯片。vTPM 设备允许从 Windows 11 镜像创建的虚拟机在没有物理 TPM 芯片的情况下正常工作。
如果没有启用 vTPM,则虚拟机无法识别 TPM 设备,即使节点有一个。
vTPM 设备还通过在没有物理硬件的情况下存储 secret 来保护虚拟机。OpenShift Virtualization 支持为虚拟机使用持久性卷声明 (PVC) 来持久保留 vTPM 设备状态。您必须通过在 HyperConverged 自定义资源(CR)中设置 vmStateStorageClass 属性来指定 PVC 要使用的存储类。
在 OpenShift Virtualization 中,如果没有明确定义 vmStateStorageClass 的 storageClass,系统将使用集群的默认存储类来创建 vTPM PVC。PVC 的访问模式由存储类的存储配置集决定。
带有 vTPM 设备的虚拟机使用 ReadWriteOnce (RWO)卷是不可缓解的。要启用实时迁移,vTPM PVC 的底层存储类必须支持 ReadWriteMany (RWX)访问模式。
存储类必须是 Filesystem 类型,并支持 ReadWriteMany (RWX) 访问模式。
7.12.2. 将 vTPM 设备添加到虚拟机 复制链接链接已复制到粘贴板!
将虚拟 Trusted Platform 模块(vTPM)设备添加到虚拟机(VM)可让您从 Windows 11 镜像创建的虚拟机,而无需物理 TPM 设备。vTPM 设备还存储该虚拟机的 secret。
先决条件
-
已安装 OpenShift CLI(
oc)。 -
您已将持久性卷声明 (PVC) 配置为使用支持
ReadWriteMany(RWX) 访问模式的Filesystem类型的存储类。这是 vTPM 设备数据在虚拟机重启后保留所必需的。
流程
运行以下命令以更新虚拟机配置:
oc edit vm <vm_name> -n <namespace>
$ oc edit vm <vm_name> -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑虚拟机规格以添加 vTPM 设备。例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 若要应用您的更改,请保存并退出编辑器。
- 可选:如果编辑了正在运行的虚拟机,您必须重启它才能使更改生效。
7.13. 使用 OpenShift Pipelines 管理虚拟机 复制链接链接已复制到粘贴板!
Red Hat OpenShift Pipelines 是一个 Kubernetes 原生 CI/CD 框架,允许开发人员在其自己的容器中设计和运行 CI/CD 管道的每个步骤。
通过使用 OpenShift Pipelines 任务和示例管道,您可以执行以下操作:
- 创建和管理虚拟机(VM)、持久性卷声明(PVC)、数据卷和数据源。
- 在虚拟机中运行命令。
-
使用
libguestfs工具操作磁盘镜像。
这些任务位于任务目录中(ArtifactHub)。
Windows 管道示例位于管道目录中(ArtifactHub)。
7.13.1. 先决条件 复制链接链接已复制到粘贴板!
-
您可以使用
cluster-admin权限访问 OpenShift Container Platform 集群。 -
已安装 OpenShift CLI(
oc)。 - 已安装 OpenShift Pipelines。
7.13.2. 支持的虚拟机任务 复制链接链接已复制到粘贴板!
下表显示了受支持的任务。
| 任务 | 描述 |
|---|---|
|
|
从提供的清单或使用 |
|
| 从模板创建虚拟机。 |
|
| 复制虚拟机模板。 |
|
| 修改虚拟机模板。 |
|
| 创建和删除数据卷或数据源。 |
|
| 在虚拟机上运行脚本或命令,并在之后停止或删除虚拟机。 |
|
|
使用 |
|
|
使用 |
|
| 等待虚拟机实例的特定状态,并根据状态失败或成功。 |
在管道中创建虚拟机现在使用 ClusterInstanceType 和 ClusterPreference 而不是基于模板的任务,这些任务已弃用。create-vm-from-template、copy-template 和 modify-vm-template 命令仍然可用,但不用于默认管道任务。
7.13.3. Windows EFI 安装程序管道 复制链接链接已复制到粘贴板!
您可以使用 Web 控制台或 CLI 运行 Windows EFI 安装程序管道。
Windows EFI 安装程序管道将 Windows 10、Windows 11 或 Windows Server 2022 安装到来自 Windows 安装镜像 (ISO 文件) 的新数据卷中。自定义应答文件用于运行安装过程。
Windows EFI 安装程序管道使用带有 OpenShift Container Platform 预定义的 sysprep 的配置映射文件,并适合 Microsoft ISO 文件。对于与不同 Windows 版本相关的 ISO 文件,可能需要创建一个新的配置映射文件,并带有特定于系统的 sysprep 定义。
7.13.3.1. 使用 Web 控制台运行示例管道 复制链接链接已复制到粘贴板!
您可以从 web 控制台中的 Pipelines 菜单运行示例管道。
流程
- 在侧边菜单中点 Pipelines → Pipelines。
- 选择一个管道以打开 Pipeline 详情页面。
- 从 Actions 列表中,选择 Start。此时会显示 Start Pipeline 对话框。
- 保留参数的默认值,然后点 Start 运行管道。Details 选项卡跟踪每个任务的进度,并显示管道状态。
7.13.3.2. 使用 CLI 运行示例管道 复制链接链接已复制到粘贴板!
使用 PipelineRun 资源来运行示例管道。PipelineRun 对象是管道的运行实例。它使用集群上的特定输入、输出和执行参数来实例化 Pipeline 执行。它还为管道中的每个任务创建一个 TaskRun 对象。
流程
要运行 Microsoft Windows 11 安装程序管道,请创建以下
PipelineRun清单:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
PipelineRun清单:oc apply -f windows11-customize-run.yaml
$ oc apply -f windows11-customize-run.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.14. 高级虚拟机管理 复制链接链接已复制到粘贴板!
7.14.1. 为虚拟机使用资源配额 复制链接链接已复制到粘贴板!
为虚拟机创建和管理资源配额。
7.14.1.1. 为虚拟机启用自动资源配额限制 复制链接链接已复制到粘贴板!
启用 AutoResourceLimits 功能门时,OpenShift Virtualization 会自动管理虚拟机的 CPU 和内存限值。
默认情况下,OpenShift Virtualization 为虚拟机计算资源请求。当您启用 AutoResourceLimits 功能门时,OpenShift Virtualization 还会计算资源限值来满足命名空间配额要求。
如果命名空间强制实施 CPU 和内存配额,且需要设置限制,则建议启用 AutoResourceLimits 功能门。当启用此功能时,内存限制会自动设置为使基本内存分配加倍,并且 CPU 限制设置为每个 vCPU 一个。
您可以通过添加 alpha.kubevirt.io/auto-memory-limits-ratio 标签来自定义特定命名空间的内存限值比率。
例如,以下命令将 my-virtualization-project 命名空间的比率设置为 1.2 :
oc label ns/my-virtualization-project alpha.kubevirt.io/auto-memory-limits-ratio=1.2
$ oc label ns/my-virtualization-project alpha.kubevirt.io/auto-memory-limits-ratio=1.2
流程
要为虚拟机启用自动资源配额限制,请执行以下步骤:
运行以下命令来编辑
HyperConverged自定义资源(CR):oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
spec.featureGates部分中,添加或将autoResourceLimits参数设置为true:spec: featureGates: autoResourceLimits: truespec: featureGates: autoResourceLimits: trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改并退出编辑器。
7.14.1.1.1. 为虚拟机手动设置资源配额限制 复制链接链接已复制到粘贴板!
只有使用请求自动用于虚拟机 (VM) 的资源配额。如果您的资源配额使用限制,则必须为虚拟机手动设置资源限值。资源限值必须至少大于资源请求的 100 MiB。
不建议手动管理资源配额限制。建议启用自动资源配额限制计算,如上一节中所述。手动限制设置可能会导致配额错误配置或调度问题。
流程
通过编辑
VirtualMachine清单来为虚拟机设置限值。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 这个配置被支持,因为
limits.memory值至少比requests.memory的值大100Mi。
-
保存
VirtualMachine清单。
7.14.2. 配置 Application-Aware Quota (AAQ) Operator 复制链接链接已复制到粘贴板!
您可以使用 Application-Aware Quota (AAQ) Operator 为 OpenShift Container Platform 集群中的单个组件自定义和管理资源配额。
7.14.2.1. 关于 AAQ Operator 复制链接链接已复制到粘贴板!
与 OpenShift Container Platform 平台中的原生 ResourceQuota 对象相比,Application-Aware Quota (AAQ) Operator 提供了更灵活且可扩展的配额管理。
在多租户集群环境中,多个工作负载在共享基础架构和资源上运行,使用 Kubernetes 原生 ResourceQuota 对象来限制聚合 CPU 和内存消耗会导致 OpenShift Virtualization 工作负载的基础架构开销和实时迁移挑战。
OpenShift Virtualization 需要大量计算资源分配来处理虚拟机(VM)实时迁移并管理 VM 基础架构开销。在升级 OpenShift Virtualization 时,您必须迁移虚拟机来升级 virt-launcher pod。但是,在存在资源配额时迁移虚拟机可能会导致迁移,然后升级会失败。
使用 AAQ 时,您可以为虚拟机分配资源,而无需干扰集群级别的活动,如升级和节点维护。AAQ Operator 还支持非计算资源,从而消除了单独管理原生资源配额和 AAQ API 对象的需要。
7.14.2.1.1. AAQ Operator 控制器和自定义资源 复制链接链接已复制到粘贴板!
AAQ Operator 引入了两个新的 API 对象,定义为自定义资源定义 (CRD),用于管理多个命名空间中的替代配额实施:
ApplicationAwareResourceQuota:设置每个命名空间的聚合配额限制。ApplicationAwareResourceQuotaAPI 与原生ResourceQuota对象兼容,并共享相同的规格和状态定义。清单示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ApplicationAwareClusterResourceQuota:在集群范围内镜像ApplicationAwareResourceQuota对象。它与原生ClusterResourceQuotaAPI 对象兼容,并共享相同的规格和状态定义。在创建 AAQ 集群配额时,您可以通过编辑spec.selector.labels或spec.selector.annotations字段来选择多个命名空间。清单示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 只有在
HyperConverged自定义资源 (CR) 中的spec.allowApplicationAwareClusterResourceQuota字段被设置为true时,才能创建一个ApplicationAwareClusterResourceQuota对象。
注意如果设置了
spec.selector.labels和spec.selector.annotations字段,则会只选择与这两个字段匹配的命名空间。
AAQ 控制器使用调度授权机制来评估是否有足够资源可用于运行工作负载。如果是这样,则调度门会从 pod 中删除,并被视为可调度。配额用量状态已更新,以指示使用配额量。
如果工作负载的 CPU 和内存请求和限值超过强制的配额用量限制,则 pod 会保持在 SchedulingGated 状态,直到有足够的配额可用。AAQ 控制器会创建一个类型为 Warning 的事件,其中包含超过配额的原因。您可以使用 oc get events 命令查看事件详情。
将 spec.nodeName 字段设置为特定节点的 Pod 无法使用与 HyperConverged CR 中定义的 spec.namespaceSelector 标签匹配的命名空间。
7.14.2.2. 启用 AAQ Operator 复制链接链接已复制到粘贴板!
要部署 AAQ Operator,请在 HyperConverged 自定义资源 (CR) 中将 enableApplicationAwareQuota 功能门设置为 true。
先决条件
-
您可以使用具有
cluster-admin权限的用户访问集群。 -
已安装 OpenShift CLI(
oc)。
流程
运行以下命令,在
HyperConvergedCR 中将enableApplicationAwareQuota功能门设置为true:oc patch hco kubevirt-hyperconverged -n openshift-cnv \ --type json -p '[{"op": "add", "path": "/spec/featureGates/enableApplicationAwareQuota", "value": true}]'$ oc patch hco kubevirt-hyperconverged -n openshift-cnv \ --type json -p '[{"op": "add", "path": "/spec/featureGates/enableApplicationAwareQuota", "value": true}]'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.14.2.3. 使用 CLI 配置 AAQ Operator 复制链接链接已复制到粘贴板!
您可以通过在 HyperConverged 自定义资源 (CR) 中指定 spec.applicationAwareConfig 对象的字段来配置 AAQ Operator。
先决条件
-
您可以使用具有
cluster-admin权限的用户访问集群。 -
已安装 OpenShift CLI(
oc)。
流程
运行以下命令来更新
HyperConvergedCR:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
vmiCalcConfigName指定如何为运行虚拟机 (VM) 工作负载的 pod 管理资源计数。可能的值有:
-
VmiPodUsage:计算与虚拟机关联的 pod 的计算资源,方式与原生资源配额和排除与迁移相关的资源相同。 -
VirtualResources:根据虚拟机规格计算计算资源,使用 VM RAM 大小处理内存和虚拟 CPU。 -
DedicatedVirtualResources(默认):与VirtualResources类似,但通过将/vmi后缀添加到 CPU 和内存资源名称来分隔与虚拟机关联的 pod 的资源跟踪。例如,requests.cpu/vmi和requests.memory/vmi。
-
namespaceSelector-
决定在创建 AAQ 调度授权时添加到 pod 的命名空间。如果没有定义命名空间选择器,AAQ Operator 将以
application-aware-quota/enable-gating标签作为默认标签来目标命名空间。 allowApplicationAwareClusterResourceQuota-
如果设置为
true,您可以创建和管理ApplicationAwareClusterResourceQuota对象。将此属性设置为true可增加调度时间。
7.14.3. 为虚拟机指定节点 复制链接链接已复制到粘贴板!
您可以使用节点放置规则将虚拟机放置到特定的节点上。
7.14.3.1. 关于虚拟机的节点放置 复制链接链接已复制到粘贴板!
要确保虚拟机在适当的节点上运行,您可以配置节点放置规则。如果出现以下情况,您可能需要进行此操作:
- 您有多台虚拟机。为确保容错,您希望它们在不同节点上运行。
- 您有两个 chatty 虚拟机。为了避免冗余节点间路由,您希望虚拟机在同一节点上运行。
- 您的虚拟机需要所有可用节点上不存在的特定硬件功能。
- 您有一个 pod 可以向节点添加功能,并想将虚拟机放置到该节点上,以便它可以使用这些功能。
虚拟机放置依赖于工作负载的现有节点放置规则。如果组件级别上的特定节点排除工作负载,则虚拟机无法放置在这些节点上。
您可以在 VirtualMachine 清单的 spec 字段中使用以下规则类型:
nodeSelector- 允许将虚拟机调度到使用此字段中指定的键值对标记的节点上。节点必须具有与所有列出的对完全匹配的标签。
affinity-
这可让您使用更具表达力的语法来设置与虚拟机匹配的规则。例如,您可以指定规则是首选项,而非硬要求,因此在规则不满足时仍然可以调度虚拟机。虚拟机放置支持 Pod 关联性、pod 反关联性和节点关联性。Pod 关联性适用于虚拟机,因为
VirtualMachine工作负载类型基于Pod对象。 容限(tolerations)允许将虚拟机调度到具有匹配污点的节点。如果污点应用到某个节点,则该节点只接受容许该污点的虚拟机。
注意关联性规则仅在调度期间应用。如果不再满足限制,OpenShift Container Platform 不会重新调度正在运行的工作负载。
7.14.3.2. 节点放置示例 复制链接链接已复制到粘贴板!
以下示例 YAML 文件片断使用 nodePlacement、affinity 和 tolerations 字段为虚拟机自定义节点放置。
7.14.3.2.1. 示例:使用 nodeSelector 放置虚拟机节点 复制链接链接已复制到粘贴板!
在本例中,虚拟机需要一个包含 example-key-1 = example-value-1 和 example-key-2 = example-value-2 标签的元数据的节点。
如果没有节点适合此描述,则不会调度虚拟机。
VM 清单示例
7.14.3.2.2. 示例:使用 pod 关联性和 pod 反关联性的虚拟机节点放置 复制链接链接已复制到粘贴板!
在本例中,虚拟机必须调度到具有标签 example-key-1 = example-value-1 的正在运行的 pod 的节点上。如果没有在任何节点上运行这样的 pod,则不会调度虚拟机。
如果可能,虚拟机不会调度到具有标签 example-key-2 = example-value-2 的 pod 的节点上。但是,如果所有候选节点都有具有此标签的 pod,调度程序会忽略此约束。
VM 清单示例
7.14.3.2.3. 示例:使用节点关联性进行虚拟机节点放置 复制链接链接已复制到粘贴板!
在本例中,虚拟机必须调度到具有标签 example.io/example-key = example-value-1 或标签 example.io/example-key = example-value-2 的节点上。如果节点上只有一个标签,则会满足约束。如果没有标签,则不会调度虚拟机。
若有可能,调度程序会避免具有标签 example-node-label-key = example-node-label-value 的节点。但是,如果所有候选节点都具有此标签,调度程序会忽略此限制。
VM 清单示例
7.14.3.2.4. 示例:带有容限的虚拟机节点放置 复制链接链接已复制到粘贴板!
在本例中,为虚拟机保留的节点已使用 key=virtualization:NoSchedule 污点标记。由于此虚拟机具有匹配的容限,它可以调度到污点节点上。
容许污点的虚拟机不需要调度到具有该污点的节点。
VM 清单示例
7.14.4. 激活内核相同的页面合并 (KSM) 复制链接链接已复制到粘贴板!
当节点过载时,OpenShift Virtualization 可以激活内核相同的页面合并 (KSM)。KSM 去除在虚拟机 (VM) 的内存页面中找到的相同数据。如果您有类似的虚拟机,则 KSM 可以在单个节点上调度更多虚拟机。
您必须只使用带有可信工作负载的 KSM。
7.14.4.1. 先决条件 复制链接链接已复制到粘贴板!
- 确保管理员已在您希望 OpenShift Virtualization 激活 KSM 的任何节点上配置了 KSM 支持。
7.14.4.2. 关于使用 OpenShift Virtualization 激活 KSM 复制链接链接已复制到粘贴板!
当节点遇到内存过载时,您可以将 OpenShift Virtualization 配置为激活内核相同的页面合并(KSM)。
7.14.4.2.1. 配置方法 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform Web 控制台或编辑 HyperConverged 自定义资源(CR)来启用或禁用所有节点的 KSM 激活功能。HyperConverged CR 支持更精细的配置。
CR 配置
您可以通过编辑 HyperConverged CR 的 spec.configuration.ksmConfiguration 小节来配置 KSM 激活功能。
-
您可以通过编辑
ksmConfiguration小节来启用功能和配置设置。 -
您可以通过删除
ksmConfiguration小节来禁用该功能。 -
您可以通过在
ksmConfiguration.nodeLabelSelector字段中添加节点选择语法来允许 OpenShift Virtualization 只在节点子集上启用 KSM。
即使 OpenShift Virtualization 中禁用了 KSM 激活功能,管理员仍然可以在支持它的节点上启用 KSM。
7.14.4.2.2. KSM 节点标签 复制链接链接已复制到粘贴板!
OpenShift Virtualization 识别配置为支持 KSM 并应用以下节点标签的节点:
kubevirt.io/ksm-handler-managed: "false"-
当 OpenShift Virtualization 在遇到内存过载的节点上激活 KSM 时,该标签被设置为
"true"。如果管理员激活 KSM,则该标签没有设置为"true"。 kubevirt.io/ksm-enabled: "false"-
当节点上激活 KSM 时,此标签被设置为
"true",即使 OpenShift Virtualization 没有激活 KSM。
这些标签不适用于不支持 KSM 的节点。
7.14.4.3. 使用 Web 控制台配置 KSM 激活 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform Web 控制台允许 OpenShift Virtualization 在集群中的所有节点上激活内核相同的页面合并 (KSM)。
流程
- 在侧边菜单中点 Virtualization → Overview。
- 选择 Settings 选项卡。
- 选择 Cluster 选项卡。
- 扩展 资源管理。
为所有节点启用或禁用功能:
- 将 内核同页合并(KSM) 设置为 on。
- 将 内核同页合并(KSM) 设置为 off。
7.14.4.4. 使用 CLI 配置 KSM 激活 复制链接链接已复制到粘贴板!
您可以通过编辑 HyperConverged 自定义资源(CR)来启用或禁用 OpenShift Virtualization 内核相同的页面合并(KSM)激活功能。如果您希望 OpenShift Virtualization 只在某个节点子集上激活 KSM,则使用此方法。
流程
运行以下命令,在默认编辑器中打开
HyperConvergedCR:oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑
ksmConfiguration小节:要为所有节点启用 KSM 激活功能,请将
nodeLabelSelector值设置为{}。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要在节点的子集上启用 KSM 激活功能,请编辑
nodeLabelSelector字段。添加与 OpenShift Virtualization 启用 KSM 的节点匹配的语法。例如,以下配置允许 OpenShift Virtualization 在<first_example_key>和<second_example_key>被设置为"true"的节点上启用 KSM。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要禁用 KSM 激活功能,请删除
ksmConfiguration小节。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 保存该文件。
7.14.5. 配置证书轮转 复制链接链接已复制到粘贴板!
配置证书轮转参数以替换现有证书。
7.14.5.1. 配置证书轮转 复制链接链接已复制到粘贴板!
您可以在 web 控制台中的 OpenShift Virtualization 安装过程中,或者在安装 HyperConverged 自定义资源(CR)后完成此操作。
流程
运行以下命令打开
HyperConvergedCR:oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 按照以下示例所示,编辑
spec.certConfig字段。要避免系统过载,请确保所有值都大于或等于 10 分钟。将所有值显示为符合 golangParseDuration格式的字符串。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 将 YAML 文件应用到集群。
7.14.5.2. 证书轮转参数故障排除 复制链接链接已复制到粘贴板!
删除一个或多个 certConfig 值会导致它们恢复到默认值,除非默认值与以下条件之一冲突:
-
ca.renewBefore的值必须小于或等于ca.duration的值。 -
server.duration的值必须小于或等于ca.duration的值。 -
server.renewBefore的值必须小于或等于server.duration的值。
如果默认值与这些条件冲突,您将收到错误。
如果您删除了以下示例中的 server.duration 值,则默认值 24h0m0s 大于 ca.duration 的值,并与指定条件冲突。
例如
这会生成以下出错信息:
error: hyperconvergeds.hco.kubevirt.io "kubevirt-hyperconverged" could not be patched: admission webhook "validate-hco.kubevirt.io" denied the request: spec.certConfig: ca.duration is smaller than server.duration
error: hyperconvergeds.hco.kubevirt.io "kubevirt-hyperconverged" could not be patched: admission webhook "validate-hco.kubevirt.io" denied the request: spec.certConfig: ca.duration is smaller than server.duration
错误消息仅提及第一个冲突。在继续操作前,查看所有 certConfig 值。
7.14.6. 配置默认 CPU 型号 复制链接链接已复制到粘贴板!
使用 HyperConverged 自定义资源 (CR) 中的 defaultCPUModel 设置来定义集群范围的默认 CPU 模型。
虚拟机 (VM) CPU 模型取决于虚拟机和集群中的 CPU 模型的可用性。
如果虚拟机没有定义的 CPU 模型:
-
defaultCPUModel使用在集群范围级别上定义的 CPU 模型自动设置。
-
如果虚拟机和集群都有定义的 CPU 模型:
- 虚拟机的 CPU 模型具有优先权。
如果虚拟机或集群都没有定义的 CPU 模型:
- host-model 使用主机级别上定义的 CPU 模型自动设置。
7.14.6.1. 配置默认 CPU 型号 复制链接链接已复制到粘贴板!
通过更新 HyperConverged 自定义资源(CR) 来配置 defaultCPUModel。您可以在 OpenShift Virtualization 运行时更改 defaultCPUModel。
defaultCPUModel 是区分大小写的。
先决条件
- 安装 OpenShift CLI(oc)。
流程
运行以下命令打开
HyperConvergedCR:oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
defaultCPUModel字段添加到 CR,并将值设置为集群中存在的 CPU 模型的名称:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 将 YAML 文件应用到集群。
7.14.7. 为虚拟机使用 UEFI 模式 复制链接链接已复制到粘贴板!
您可以使用统一可扩展固件接口(UEFI)模式引导虚拟机(VM)。
7.14.7.1. 关于虚拟机的 UEFI 模式 复制链接链接已复制到粘贴板!
像旧的 BIOS 一样,统一可扩展固件接口(UEFI)在计算机启动时初始化硬件组件和操作系统镜像文件。与 BIOS 相比,UEFI 支持更现代的功能和自定义选项,从而加快启动速度。
它将初始化和启动的所有信息保存在带有 .efi 扩展的文件中,该扩展被保存在名为 EFI 系统分区(ESP)的特殊分区中。ESP 还包含安装在计算机上的操作系统的引导装载程序程序。
7.14.7.2. 在 UEFI 模式中引导虚拟机 复制链接链接已复制到粘贴板!
您可以通过编辑 VirtualMachine 清单,将虚拟机配置为在 UEFI 模式中引导。
先决条件
-
安装 OpenShift CLI (
oc) 。
流程
编辑或创建
VirtualMachine清单文件。使用spec.firmware.bootloader小节来配置 UEFI 模式:使用安全引导活跃在 UEFI 模式中引导
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,将清单应用到集群:
oc create -f <file_name>.yaml
$ oc create -f <file_name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.14.7.3. 启用持久性 EFI 复制链接链接已复制到粘贴板!
您可以通过在集群级别配置 RWX 存储类并调整虚拟机 EFI 部分中的设置来启用 EFI 持久性。
先决条件
- 您必须具有集群管理员特权。
- 您必须有一个支持 RWX 访问模式和 FS 卷模式的存储类。
流程
运行以下命令启用
VMPersistentState功能门:oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv \ --type json -p '[{"op":"replace","path":"/spec/featureGates/VMPersistentState", "value": true}]'$ oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv \ --type json -p '[{"op":"replace","path":"/spec/featureGates/VMPersistentState", "value": true}]'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.14.7.4. 使用持久性 EFI 配置虚拟机 复制链接链接已复制到粘贴板!
您可以通过编辑清单文件,将虚拟机配置为启用 EFI 持久性。
先决条件
-
VMPersistentState功能门启用。
流程
编辑虚拟机清单文件并保存以应用设置。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.14.8. 为虚拟机配置 PXE 启动 复制链接链接已复制到粘贴板!
OpenShift Virtualization 中提供 PXE 启动或网络启动。网络启动支持计算机启动和加载操作系统或其他程序,无需本地连接的存储设备。例如,在部署新主机时,您可使用 PXE 启动从 PXE 服务器中选择所需操作系统镜像。
7.14.8.1. 先决条件 复制链接链接已复制到粘贴板!
- Linux 网桥必须已连接。
- PXE 服务器必须作为网桥连接至相同 VLAN。
7.14.8.2. 使用指定的 MAC 地址的 PXE 引导 复制链接链接已复制到粘贴板!
作为管理员,您可首先为您的 PXE 网络创建 NetworkAttachmentDefinition 对象,以此通过网络引导客户端。然后在启动虚拟机实例前,在您的虚拟机实例配置文件中引用网络附加定义。如果 PXE 服务器需要,您还可在虚拟机实例配置文件中指定 MAC 地址。
先决条件
- 必须已连接 Linux 网桥。
- PXE 服务器必须作为网桥连接至相同 VLAN。
流程
在集群上配置 PXE 网络:
为 PXE 网络
pxe-net-conf创建网络附加定义文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
NetworkAttachmentDefinition对象的名称。- 2
- 配置的名称。建议您将配置名称与网络附加定义的
name值匹配。 - 3
- 为这个网络附加定义的 Container Network Interface(CNI)插件的实际名称。这个示例使用 Linux bridge CNI 插件。您还可以使用 OVN-Kubernetes localnet 或 SR-IOV CNI 插件。
- 4
- 节点上配置的 Linux 网桥名称。
- 5
- 可选:启用 MAC 欺骗检查的标记。当设置为
true时,您无法更改 pod 或客户机接口的 MAC 地址。此属性只允许单个 MAC 地址退出 pod,从而可防止 MAC 欺骗攻击。 - 6
- 可选: VLAN 标签。节点网络配置策略不需要额外的 VLAN 配置。
- 7
- 可选:指示虚拟机是否通过默认 VLAN 连接到网桥。默认值为
true。
使用您在上一步中创建的文件创建网络附加定义:
oc create -f pxe-net-conf.yaml
$ oc create -f pxe-net-conf.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑虚拟机实例配置文件以包括接口和网络的详情。
如果 PXE 服务器需要,请指定网络和 MAC 地址。如果未指定 MAC 地址,则会自动分配一个值。
请确保
bootOrder设置为1,以便该接口先启动。在本例中,该接口连接到了名为<pxe-net>的网络中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意启动顺序对于接口和磁盘全局通用。
为磁盘分配一个启动设备号,以确保置备操作系统后能够正确启动。
将磁盘
bootOrder值设置为2:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 指定网络连接到之前创建的网络附加定义。在这种情况下,
<pxe-net>连接到名为<pxe-net-conf>的网络附加定义:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建虚拟机实例:
oc create -f vmi-pxe-boot.yaml
$ oc create -f vmi-pxe-boot.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
virtualmachineinstance.kubevirt.io "vmi-pxe-boot" created
virtualmachineinstance.kubevirt.io "vmi-pxe-boot" createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 等待虚拟机实例运行:
oc get vmi vmi-pxe-boot -o yaml | grep -i phase phase: Running
$ oc get vmi vmi-pxe-boot -o yaml | grep -i phase phase: RunningCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 VNC 查看虚拟机实例:
virtctl vnc vmi-pxe-boot
$ virtctl vnc vmi-pxe-bootCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 查看启动屏幕,验证 PXE 启动是否成功。
登录虚拟机实例:
virtctl console vmi-pxe-boot
$ virtctl console vmi-pxe-bootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证虚拟机上的接口和 MAC 地址,并验证连接到网桥的接口是否具有指定的 MAC 地址。在本例中,我们使用了
eth1进行 PXE 启动,无需 IP 地址。另一接口eth0从 OpenShift Container Platform 获取 IP 地址。ip addr
$ ip addrCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
... 3. eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether de:00:00:00:00:de brd ff:ff:ff:ff:ff:ff
... 3. eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether de:00:00:00:00:de brd ff:ff:ff:ff:ff:ffCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.14.8.3. OpenShift Virtualization 术语表 复制链接链接已复制到粘贴板!
以下是整个 OpenShift Virtualization 文档中使用的术语:
- Container Network Interface (CNI)
- 一个 Cloud Native Computing Foundation 项目,侧重容器网络连接。OpenShift Virtualization 使用 CNI 插件基于基本 Kubernetes 网络功能进行构建。
- Multus
- 一个“meta”CNI 插件,支持多个 CNI 共存,以便 pod 或虚拟机可使用其所需的接口。
- 自定义资源定义(CRD)
- 一个 Kubernetes API 资源,用于定义自定义资源,或使用 CRD API 资源定义的对象。
- 网络附加定义(NAD)
- 由 Multus 项目引入的 CRD,允许您将 Pod、虚拟机和虚拟机实例附加到一个或多个网络。
- 节点网络配置策略(NNCP)
-
nmstate 项目引入的 CRD,描述节点上请求的网络配置。您可以通过将
NodeNetworkConfigurationPolicy清单应用到集群来更新节点网络配置,包括添加和删除网络接口 。
7.14.9. 在虚拟机中使用巨页 复制链接链接已复制到粘贴板!
您可以使用巨页作为集群中虚拟机的后备内存。
7.14.9.1. 先决条件 复制链接链接已复制到粘贴板!
- 节点必须配置预分配的巨页。
7.14.9.2. 巨页的作用 复制链接链接已复制到粘贴板!
内存在块(称为页)中进行管理。在大多数系统中,页的大小为 4Ki。1Mi 内存相当于 256 个页,1Gi 内存相当于 256,000 个页。CPU 有内置的内存管理单元,可在硬件中管理这些页的列表。Translation Lookaside Buffer (TLB) 是虚拟页到物理页映射的小型硬件缓存。如果在硬件指令中包括的虚拟地址可以在 TLB 中找到,则其映射信息可以被快速获得。如果没有包括在 TLN 中,则称为 TLB miss。系统将会使用基于软件的,速度较慢的地址转换机制,从而出现性能降低的问题。因为 TLB 的大小是固定的,因此降低 TLB miss 的唯一方法是增加页的大小。
巨页指一个大于 4Ki 的内存页。在 x86_64 构架中,有两个常见的巨页大小: 2Mi 和 1Gi。在其它构架上的大小会有所不同。要使用巨页,必须写相应的代码以便应用程序了解它们。Transparent Huge Pages(THP)试图在应用程序不需要了解的情况下自动管理巨页,但这个技术有一定的限制。特别是,它的页大小会被限为 2Mi。当有较高的内存使用率时,THP 可能会导致节点性能下降,或出现大量内存碎片(因为 THP 的碎片处理)导致内存页被锁定。因此,有些应用程序可能更适用于(或推荐)使用预先分配的巨页,而不是 THP。
在 OpenShift Virtualization 中,可将虚拟机配置为消耗预先分配的巨页。
7.14.9.3. 为虚拟机配置巨页 复制链接链接已复制到粘贴板!
您可以在虚拟机配置中包括 memory.hugepages.pageSize 和 resources.requests.memory 参数来配置虚拟机来使用预分配的巨页。
内存请求必须按页大小分离。例如,您不能对大小为 1Gi 的页请求 500Mi 内存。
主机的内存布局和客户端操作系统不相关。虚拟机清单中请求的巨页适用于 QEMU。客户端中的巨页只能根据虚拟机实例的可用内存量来配置。
如果您编辑了正在运行的虚拟机,则必须重启虚拟机才能使更改生效。
先决条件
- 节点必须配置预先分配的巨页。具体步骤请参阅在引导时配置巨页。
流程
在虚拟机配置中,把
resources.requests.memory和memory.hugepages.pageSize参数添加到spec.domain。以下配置片段适用于请求总计4Gi内存的虚拟机,页面大小为1Gi:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用虚拟机配置:
oc apply -f <virtual_machine>.yaml
$ oc apply -f <virtual_machine>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.14.10. 为虚拟机启用专用资源 复制链接链接已复制到粘贴板!
要提高性能,您可以将节点的资源(如 CPU)专用于特定的一个虚拟机。
7.14.10.1. 关于专用资源 复制链接链接已复制到粘贴板!
当为您的虚拟机启用专用资源时,您的工作负载将会在不会被其他进程使用的 CPU 上调度。通过使用专用资源,您可以提高虚拟机性能以及延迟预测的准确性。
7.14.10.2. 先决条件 复制链接链接已复制到粘贴板!
-
节点上必须配置 CPU Manager。在调度虚拟机工作负载前,请确认节点具有
cpumanager = true标签。 - 虚拟机必须关机。
7.14.10.3. 为虚拟机启用专用资源 复制链接链接已复制到粘贴板!
您可以在 Details 选项卡中为虚拟机启用专用资源。从红帽模板创建的虚拟机可以使用专用资源进行配置。
流程
- 在 OpenShift Container Platform 控制台中,从侧边菜单中点 Virtualization → VirtualMachines。
- 选择虚拟机以打开 VirtualMachine 详情页面。
- 在 Configuration → Scheduling 选项卡中,点 Dedicated Resources 旁边的编辑图标。
- 选择 Schedule this workload with dedicated resources (guaranteed policy)。
- 点 Save。
7.14.11. 调度虚拟机 复制链接链接已复制到粘贴板!
在确保虚拟机的 CPU 模型和策略属性与节点支持的 CPU 模型和策略属性兼容的情况下,可在节点上调度虚拟机(VM)。
7.14.11.1. 策略属性 复制链接链接已复制到粘贴板!
您可以指定策略属性和在虚拟机调度到节点上时匹配的 CPU 功能来调度虚拟机(VM)。为虚拟机指定的策略属性决定了如何在节点上调度该虚拟机。
| 策略属性 | 描述 |
|---|---|
| force | VM 被强制调度到某个节点上。即使主机 CPU 不支持虚拟机的 CPU,也是如此。 |
| require | 在虚拟机没有使用特定 CPU 模型和功能规格配置时,应用于虚拟机的默认策略。如果节点没有配置为支持使用此默认策略属性或其他策略属性的 CPU 节点发现,则虚拟机不会调度到该节点上。主机 CPU 必须支持虚拟机的 CPU,或者虚拟机监控程序必须可以模拟支持的 CPU 模型。 |
| optional | 如果主机物理机器 CPU 支持该虚拟机,则虚拟机会被添加到节点。 |
| disable | 无法通过 CPU 节点发现调度虚拟机。 |
| forbid | 即使主机 CPU 支持该功能,且启用了 CPU 节点发现,也不会调度虚拟机。 |
7.14.11.2. 设置策略属性和 CPU 功能 复制链接链接已复制到粘贴板!
您可以为每个虚拟机(VM)设置策略属性和 CPU 功能,以确保根据策略和功能在节点上调度该功能。验证您设置的 CPU 功能以确保主机 CPU 支持或者虚拟机监控程序模拟该功能。
7.14.11.3. 使用支持的 CPU 型号调度虚拟机 复制链接链接已复制到粘贴板!
您可以为虚拟机 (VM) 配置 CPU 模型,将其调度到支持其 CPU 模型的节点。
流程
编辑虚拟机配置文件的
domainspec。以下示例显示了为虚拟机定义的特定 CPU 模型:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 虚拟机的 CPU 模型.
7.14.11.4. 使用主机模型调度虚拟机 复制链接链接已复制到粘贴板!
当将虚拟机(VM)的 CPU 模型设置为 host-model 时,虚拟机会继承调度节点的 CPU 模型。
流程
编辑虚拟机配置文件的
domainspec。以下示例演示了为虚拟机指定host-model:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 继承调度节点的 CPU 模型的虚拟机。
7.14.11.5. 使用自定义调度程序调度虚拟机 复制链接链接已复制到粘贴板!
您可以使用自定义调度程序在节点上调度虚拟机 (VM)。
先决条件
- 为集群配置二级调度程序。
流程
通过编辑
VirtualMachine清单,将自定义调度程序添加到虚拟机配置中。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 自定义调度程序的名称。如果
schedulerName值与现有调度程序不匹配,virt-launcherpod 会一直处于Pending状态,直到找到指定的调度程序为止。
验证
通过检查
virt-launcherpod 事件来验证虚拟机是否使用VirtualMachine清单中指定的自定义调度程序:输入以下命令来查看集群中的 pod 列表:
oc get pods
$ oc get podsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE virt-launcher-vm-fedora-dpc87 2/2 Running 0 24m
NAME READY STATUS RESTARTS AGE virt-launcher-vm-fedora-dpc87 2/2 Running 0 24mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令以显示 pod 事件:
oc describe pod virt-launcher-vm-fedora-dpc87
$ oc describe pod virt-launcher-vm-fedora-dpc87Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出中的
From字段的值验证调度程序名称与VirtualMachine清单中指定的自定义调度程序匹配:输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.14.12. 配置 PCI 透传 复制链接链接已复制到粘贴板!
通过 Peripheral Component Interconnect (PCI) 透传功能,您可以从虚拟机 (VM) 访问和管理硬件设备。配置 PCI 透传后,PCI 设备的功能就如同它们实际上附加到客户机操作系统上一样。
集群管理员可以使用 oc CLI 来公开和管理集群中允许在集群中使用的主机设备。
7.14.12.1. 为 GPU 透传准备节点 复制链接链接已复制到粘贴板!
您可以防止 GPU 操作对象部署到您为 GPU 透传指定的 worker 节点上。
7.14.12.1.1. 防止在节点上部署 NVIDIA GPU 操作对象 复制链接链接已复制到粘贴板!
如果在集群中使用 NVIDIA GPU Operator,您可以将 nvidia.com/gpu.deploy.operands=false 标签应用到您不想为 GPU 或 vGPU 操作对象配置的节点。该标签可防止创建配置 GPU 或 vGPU 操作对象的 pod,并在 pod 已存在时终止 pod。
先决条件
-
已安装 OpenShift CLI (
oc)。
流程
运行以下命令标记节点:
oc label node <node_name> nvidia.com/gpu.deploy.operands=false
$ oc label node <node_name> nvidia.com/gpu.deploy.operands=false1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<node_name>替换为您要安装 NVIDIA GPU 操作对象的节点名称。
验证
运行以下命令,验证标签是否已添加到节点:
oc describe node <node_name>
$ oc describe node <node_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 如果之前在节点上部署了 GPU 操作对象,请验证其删除。
运行以下命令,检查
nvidia-gpu-operator命名空间中的 pod 状态:oc get pods -n nvidia-gpu-operator
$ oc get pods -n nvidia-gpu-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 监控 pod 状态,直到具有
Terminating状态的 pod 被删除:oc get pods -n nvidia-gpu-operator
$ oc get pods -n nvidia-gpu-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.14.12.2. 为 PCI 透传准备主机设备 复制链接链接已复制到粘贴板!
7.14.12.2.1. 关于为 PCI 透传准备主机设备 复制链接链接已复制到粘贴板!
要使用 CLI 为 PCI 透传准备主机设备,请创建一个 MachineConfig 对象并添加内核参数,以启用输入输出内存管理单元(IOMMU)。将 PCI 设备绑定到虚拟功能 I/O(VFIO)驱动程序,然后通过编辑 HyperConverged 自定义资源(CR)的 allowedHostDevices 字段在集群中公开它。首次安装 OpenShift Virtualization Operator 时,allowedHostDevices 列表为空。
要使用 CLI 从集群中删除 PCI 主机设备,可从 HyperConverged CR 中删除 PCI 设备信息。
7.14.12.2.2. 添加内核参数以启用 IOMMU 驱动程序 复制链接链接已复制到粘贴板!
要在内核中启用 IOMMU 驱动程序,请创建 MachineConfig 对象并添加内核参数。
先决条件
- 有集群管理员权限。
- 您的 CPU 硬件是 Intel 或 AMD。
- 您在 BIOS 中为直接 I/O 扩展或 AMD IOMMU 启用 Intel 虚拟化技术。
流程
创建用于标识内核参数的
MachineConfig对象。以下示例显示了 Intel CPU 的内核参数。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建新的
MachineConfig对象:oc create -f 100-worker-kernel-arg-iommu.yaml
$ oc create -f 100-worker-kernel-arg-iommu.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证是否添加了新的
MachineConfig对象。oc get MachineConfig
$ oc get MachineConfigCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.14.12.2.3. 将 PCI 设备绑定到 VFIO 驱动程序 复制链接链接已复制到粘贴板!
要将 PCI 设备绑定到 VFIO(虚拟功能 I/O)驱动程序,请从每个设备获取 vendor-ID 和 device-ID 的值,并创建值的列表。将这个列表添加到 MachineConfig 对象。MachineConfig Operator 在带有 PCI 设备的节点上生成 /etc/modprobe.d/vfio.conf,并将 PCI 设备绑定到 VFIO 驱动程序。
先决条件
- 您添加了内核参数来为 CPU 启用 IOMMU。
流程
运行
lspci命令,以获取 PCI 设备的vendor-ID和device-ID。lspci -nnv | grep -i nvidia
$ lspci -nnv | grep -i nvidiaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
02:01.0 3D controller [0302]: NVIDIA Corporation GV100GL [Tesla V100 PCIe 32GB] [10de:1eb8] (rev a1)
02:01.0 3D controller [0302]: NVIDIA Corporation GV100GL [Tesla V100 PCIe 32GB] [10de:1eb8] (rev a1)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 Butane 配置文件
100-worker-vfiopci.bu,将 PCI 设备绑定到 VFIO 驱动程序。注意您在配置文件中指定的 Butane 版本应与 OpenShift Container Platform 版本匹配,并且始终以
0结尾。例如,4.17.0。有关 Butane 的信息,请参阅"使用 Butane 创建机器配置"。例如
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Butane 生成
MachineConfig对象文件100-worker-vfiopci.yaml,包含要发送到 worker 节点的配置:butane 100-worker-vfiopci.bu -o 100-worker-vfiopci.yaml
$ butane 100-worker-vfiopci.bu -o 100-worker-vfiopci.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
MachineConfig对象应用到 worker 节点:oc apply -f 100-worker-vfiopci.yaml
$ oc apply -f 100-worker-vfiopci.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证
MachineConfig对象是否已添加。oc get MachineConfig
$ oc get MachineConfigCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证是否已加载 VFIO 驱动程序。
lspci -nnk -d 10de:
$ lspci -nnk -d 10de:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出确认使用了 VFIO 驱动程序。
输出示例
04:00.0 3D controller [0302]: NVIDIA Corporation GP102GL [Tesla P40] [10de:1eb8] (rev a1) Subsystem: NVIDIA Corporation Device [10de:1eb8] Kernel driver in use: vfio-pci Kernel modules: nouveau04:00.0 3D controller [0302]: NVIDIA Corporation GP102GL [Tesla P40] [10de:1eb8] (rev a1) Subsystem: NVIDIA Corporation Device [10de:1eb8] Kernel driver in use: vfio-pci Kernel modules: nouveauCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.14.12.2.4. 使用 CLI 在集群中公开 PCI 主机设备 复制链接链接已复制到粘贴板!
要在集群中公开 PCI 主机设备,将 PCI 设备的详细信息添加到 HyperConverged 自定义资源(CR)的 spec.permittedHostDevices.pciHostDevices 数组中。
流程
运行以下命令,在默认编辑器中编辑
HyperConvergedCR:oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 PCI 设备信息添加到
spec.percommitHostDevices.pciHostDevices数组。例如:配置文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意上例代码片段显示有两个 PCI 主机设备,名为
nvidia.com/GV100GL_Tesla_V100和nvidia.com/TU104GL_Tesla_Tesla_T4。它们被添加到HyperConvergedCR 中的允许主机设备列表中。这些设备已经过测试和验证以用于 OpenShift Virtualization。- 保存更改并退出编辑器。
验证
运行以下命令,验证 PCI 主机设备是否已添加到节点。示例输出显示,每个设备都与
nvidia.com/GV100GL_Tesla_V100、nvidia.com/TU104GL_Tesla_T4和intel.com/qat资源名称关联。oc describe node <node_name>
$ oc describe node <node_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.14.12.2.5. 使用 CLI 从集群中删除 PCI 主机设备 复制链接链接已复制到粘贴板!
要从集群中删除 PCI 主机设备,请从 HyperConverged 自定义资源(CR)中删除该设备的信息。
流程
运行以下命令,在默认编辑器中编辑
HyperConvergedCR:oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 通过删除相应设备的
pciDeviceSelector、resourceName和externalResourceProvider(如果适用)字段来从spec.permittedHostDevices.pciHostDevices阵列中删除 PCI 设备信息。在本例中,intel.com/qat资源已被删除。配置文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改并退出编辑器。
验证
运行以下命令,验证 PCI 主机设备已从节点移除。示例输出显示,与
intel.com/qat资源名称关联的设备为零。oc describe node <node_name>
$ oc describe node <node_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.14.12.3. 为 PCI 透传配置虚拟机 复制链接链接已复制到粘贴板!
将 PCI 设备添加到集群中后,您可以将它们分配到虚拟机。PCI 设备现在可用。就像它们被物理地连接到虚拟机一样。
7.14.12.3.1. 为虚拟机分配 PCI 设备 复制链接链接已复制到粘贴板!
当集群中有 PCI 设备时,您可以将其分配到虚拟机并启用 PCI 透传。
流程
将 PCI 设备分配到虚拟机作为主机设备。
例如
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 集群中作为主机设备允许的 PCI 设备的名称。虚拟机可以访问此主机设备。
验证
使用以下命令,验证主机设备可从虚拟机使用。
lspci -nnk | grep NVIDIA
$ lspci -nnk | grep NVIDIACopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
02:01.0 3D controller [0302]: NVIDIA Corporation GV100GL [Tesla V100 PCIe 32GB] [10de:1eb8] (rev a1)
$ 02:01.0 3D controller [0302]: NVIDIA Corporation GV100GL [Tesla V100 PCIe 32GB] [10de:1eb8] (rev a1)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.14.13. 配置虚拟 GPU 复制链接链接已复制到粘贴板!
如果您有图形处理单元(GPU)卡,OpenShift Virtualization 可以自动创建您可以分配给虚拟机(VM)的虚拟 GPU (vGPU)。
7.14.13.1. 关于在 OpenShift Virtualization 中使用虚拟 GPU 复制链接链接已复制到粘贴板!
有些图形处理单元(GPU)卡支持创建虚拟 GPU(vGPU)。如果管理员在 HyperConverged 自定义资源(CR)中提供配置详情,则 OpenShift Virtualization 可以自动创建 vGPU 和其他介质设备。这个自动化对大型集群特别有用。
有关功能和支持详情,请参考您的硬件供应商文档。
- 介质设备
- 划分为一个或多个虚拟设备的物理设备。vGPU 是一个介质设备(mdev)类型,物理 GPU 的性能会被划分到各个虚拟设备中。您可以将介质设备分配给一个或多个虚拟机(VM),但客户机数量必须与您的 GPU 兼容。有些 GPU 不支持多个虚拟机。
7.14.13.2. 为介质设备准备主机 复制链接链接已复制到粘贴板!
在配置介质设备前,您必须启用输入输出内存管理单元 (IOMMU) 驱动程序。
7.14.13.2.1. 添加内核参数以启用 IOMMU 驱动程序 复制链接链接已复制到粘贴板!
要在内核中启用 IOMMU 驱动程序,请创建 MachineConfig 对象并添加内核参数。
先决条件
- 有集群管理员权限。
- 您的 CPU 硬件是 Intel 或 AMD。
- 您在 BIOS 中为直接 I/O 扩展或 AMD IOMMU 启用 Intel 虚拟化技术。
流程
创建用于标识内核参数的
MachineConfig对象。以下示例显示了 Intel CPU 的内核参数。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建新的
MachineConfig对象:oc create -f 100-worker-kernel-arg-iommu.yaml
$ oc create -f 100-worker-kernel-arg-iommu.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证是否添加了新的
MachineConfig对象。oc get MachineConfig
$ oc get MachineConfigCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.14.13.3. 配置 NVIDIA GPU Operator 复制链接链接已复制到粘贴板!
您可以使用 NVIDIA GPU Operator 置备 worker 节点,以便在 OpenShift Virtualization 中运行 GPU 加速虚拟机(VM)。
NVIDIA GPU Operator 仅支持 NVIDIA。如需更多信息,请参阅红帽知识库中的从 NVIDIA 获得支持。
7.14.13.3.1. 关于使用 NVIDIA GPU Operator 复制链接链接已复制到粘贴板!
您可以将 NVIDIA GPU Operator 与 OpenShift Virtualization 搭配使用来快速置备 worker 节点来运行启用了 GPU 的虚拟机 (VM)。NVIDIA GPU Operator 在 OpenShift Container Platform 集群中管理 NVIDIA GPU 资源,并自动执行为 GPU 工作负载准备节点时所需的任务。
在将应用程序工作负载部署到 GPU 资源前,您必须安装如 NVIDIA 驱动程序,如启用计算统一设备架构 (CUDA)、Kubernetes 设备插件、容器运行时和其他功能,如自动节点标签和监控。通过自动化这些任务,您可以快速扩展基础架构的 GPU 容量。NVIDIA GPU Operator 有助于置备复杂智能和机器学习(AI/ML) 工作负载。
7.14.13.3.2. 配置介质设备的选项 复制链接链接已复制到粘贴板!
使用 NVIDIA GPU Operator 时有两种可用的配置介质设备的方法。红帽测试的方法使用 OpenShift Virtualization 功能来调度介质设备,而 NVIDIA 方法只使用 GPU Operator。
- 使用 NVIDIA GPU Operator 配置介质设备
- 这个方法只使用 NVIDIA GPU Operator 来配置介质设备。要使用这个方法,请参阅 NVIDIA 文档中的带有 OpenShift Virtualization 的 NVIDIA GPU Operator。
- 使用 OpenShift Virtualization 配置介质设备
这个方法由红帽测试,使用 OpenShift Virtualization 的功能来配置介质设备。在这种情况下,NVIDIA GPU Operator 仅用于使用 NVIDIA vGPU Manager 安装驱动程序。GPU Operator 不配置介质设备。
使用 OpenShift Virtualization 方法时,您仍遵循 NVIDIA 文档 配置 GPU Operator。但是,此方法与 NVIDIA 文档的以下方法不同:
您不能覆盖
HyperConverged自定义资源(CR) 中的默认disableMDEVConfiguration: false设置。重要按照 NVIDIA 文档所述 设置此功能门可防止 OpenShift Virtualization 配置介质设备。
您必须配置
ClusterPolicy清单,使其与以下示例匹配:清单示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
spec.drive.enabled设置为false。虚拟机不需要这样做。 -
spec.vgpuManager.enabled设置为true。如果要将 vGPU 与虚拟机搭配使用,则需要此项。 -
spec.vgpuManager.repository设置为 registry 值。 -
spec.vgpuManager.version设置为您从 NVIDIA 网站下载的 vGPU 驱动程序的版本,并用于构建镜像。 -
spec.vgpuDeviceManager.enabled设置为false,以允许 OpenShift Virtualization 配置介质设备而不是 NVIDIA GPU Operator。 -
spec.sandboxDevicePlugin.enabled设置为false,以防止发现并广告 vGPU 设备到 kubelet。 -
spec.vfioManager.enabled被设置为false,以防止加载vfio-pci驱动程序。相反,请按照 OpenShift Virtualization 文档来配置 PCI 透传。
-
7.14.13.4. vGPU 如何分配给节点 复制链接链接已复制到粘贴板!
对于每个物理设备,OpenShift Virtualization 配置以下值:
- 单个 mdev 类型。
-
所选
mdev类型的最大实例数量。
集群架构会影响创建设备并分配到节点的方式。
- 每个节点具有多个卡的大型集群
在支持多个 vGPU 类型的节点上,以轮循方式创建相关设备类型。例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在这种情况下,每个节点有两个卡,它们支持以下 vGPU 类型:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在每个节点上,OpenShift Virtualization 会创建以下 vGPU:
- 在第一个卡上,16 个类型为 nvidia-105 的 vGPU。
- 第二卡上的 2 个类型为 nvidia-108 的 vGPU。
- 一个节点有一个卡,它支持多个请求的 vGPU 类型
OpenShift Virtualization 使用最先在
mediatedDeviceTypes列表中提供的支持的类型。例如,节点卡中的卡支持
nvidia-223和nvidia-224。配置了以下mediatedDeviceTypes列表:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在本例中,OpenShift Virtualization 使用
nvidia-223类型。
7.14.13.5. 管理介质设备 复制链接链接已复制到粘贴板!
在向虚拟机分配介质设备前,您必须创建设备并将其公开给集群。您还可以重新配置和删除介质设备。
7.14.13.5.1. 创建并公开介质设备 复制链接链接已复制到粘贴板!
作为管理员,您可以通过编辑 HyperConverged 自定义资源(CR)来创建介质设备并将其公开给集群。
先决条件
- 启用了输入输出内存管理单元(IOMMU)驱动程序。
如果您的硬件厂商提供驱动程序,您可以在要创建介质设备的节点上安装它们。
- 如果您使用 NVIDIA 卡,则 安装了 NVIDIA GRID 驱动程序。
流程
运行以下命令,在默认编辑器中打开
HyperConvergedCR:oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例 7.1. 配置了介质设备的配置文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过在
spec.mediatedDevicesConfiguration小节中添加来创建介质设备:YAML 片断示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要在 OpenShift Virtualization 4.14 之前,
mediatedDeviceTypes字段被命名为mediatedDevicesTypes。确定在配置介质设备时使用正确的字段名称。识别您要公开给集群的设备的 name selector 和 resource name 值。您将在下一步中将这些值添加到
HyperConvergedCR 中。运行以下命令来查找
resourceName值:oc get $NODE -o json \ | jq '.status.allocatable \ | with_entries(select(.key | startswith("nvidia.com/"))) \ | with_entries(select(.value != "0"))'$ oc get $NODE -o json \ | jq '.status.allocatable \ | with_entries(select(.key | startswith("nvidia.com/"))) \ | with_entries(select(.value != "0"))'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过查看
/sys/bus/pci/devices/<slot>:<bus>:<domain>.<function>/mdev_supported_types/<type>/name的内容来查找mdevNameSelector值,替换您的系统的正确值。例如,
nvidia-231类型的名称文件包含选择器字符串GRID T4-2Q。使用GRID T4-2Q作为mdevNameSelector值,允许节点使用nvidia-231类型。
通过将
mdevNameSelector和resourceName值添加到HyperConvergedCR 的spec.permittedHostDevices.mediatedDevices小节来向集群公开介质设备:YAML 片断示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改并退出编辑器。
验证
可选:通过运行以下命令确认将设备添加到特定节点:
oc describe node <node_name>
$ oc describe node <node_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.14.13.5.2. 关于更改和删除介质设备 复制链接链接已复制到粘贴板!
您可以通过几种方式重新配置或删除介质设备:
-
编辑
HyperConvergedCR 并更改mediatedDeviceTypes小节的内容。 -
更改与
nodeMediatedDeviceTypes节点选择器匹配的节点标签。 从
HyperConvergedCR 的spec.mediatedDevicesConfiguration和spec.permittedHostDevices小节中删除设备信息。注意如果您在
spec.permittedHostDevices小节中删除设备信息,且没有将其从spec.mediatedDevicesConfiguration小节中移除,则无法在同一节点上创建新的介质设备类型。要正确删除介质设备,请从两个段中删除设备信息。
7.14.13.5.3. 从集群中删除介质设备 复制链接链接已复制到粘贴板!
要从集群中删除介质设备,请从 HyperConverged 自定义资源(CR)中删除该设备的信息。
流程
运行以下命令,在默认编辑器中编辑
HyperConvergedCR:oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 从
HyperConvergedCR 的spec.mediatedDevicesConfiguration和spec.permittedHostDevices小节中删除设备信息。删除这两个条目可确保您稍后在同一节点上创建新的介质设备类型。例如:配置文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改并退出编辑器。
7.14.13.6. 使用介质设备 复制链接链接已复制到粘贴板!
您可以将介质设备分配给一个或多个虚拟机。
7.14.13.6.1. 使用 CLI 将 vGPU 分配给虚拟机 复制链接链接已复制到粘贴板!
为虚拟机(VM)分配介质设备,如虚拟 GPU (vGPU)。
先决条件
-
介质设备在
HyperConverged自定义资源中配置。 - 虚拟机已停止。
流程
通过编辑
VirtualMachine清单的spec.domain.devices.gpus小节,将介质设备分配给虚拟机(VM):虚拟机清单示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要验证该设备在虚拟机中可用,运行以下命令,将
<device_name>替换为VirtualMachine清单中的deviceName值:lspci -nnk | grep <device_name>
$ lspci -nnk | grep <device_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.14.13.6.2. 使用 Web 控制台为虚拟机分配 vGPU 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform web 控制台为虚拟机分配虚拟 GPU。
您可以将硬件设备添加到从自定义模板或 YAML 文件创建的虚拟机中。您不能将设备添加到特定操作系统的预先提供的引导源模板中。
先决条件
vGPU 配置为集群中的介质设备。
- 要查看连接到集群的设备,请从侧边菜单中点 Compute → Hardware Devices。
- 虚拟机已停止。
流程
- 在 OpenShift Container Platform web 控制台中,从侧边菜单中点 Virtualization → VirtualMachines。
- 选择您要为其分配该设备的虚拟机。
- 在 Details 标签页中,点 GPU 设备。
- 点 Add GPU 设备。
- 在 Name 字段中输入识别值。
- 在 Device name 列表中选择您要添加到虚拟机的设备。
- 点击 Save。
验证
-
要确认设备已添加到虚拟机,请点 YAML 选项卡并查看
VirtualMachine配置。介质设备添加到spec.domain.devices小节中。
7.14.14. 配置 USB 主机透传 复制链接链接已复制到粘贴板!
作为集群管理员,您可以在集群中公开 USB 设备,这使得设备可用于虚拟机(VM)所有者。启用此 USB 设备的透传允许虚拟机连接到附加到 OpenShift Container Platform 节点的 USB 硬件,就像硬件和虚拟机物理连接一样。
要公开 USB 设备,首先启用主机透传,然后将虚拟机配置为使用 USB 设备。
7.14.14.1. 启用 USB 主机透传 复制链接链接已复制到粘贴板!
要将 USB 设备附加到虚拟机(VM),您必须首先在集群级别上启用 USB 主机透传。
要做到这一点,请为您要首先添加的每个设备指定一个资源名称和 USB 设备名称,然后分配给虚拟机。您可以为单个资源名称分配多个设备,每个设备都被称为 HyperConverged 自定义资源(CR)中的 选择器。如果您在集群中有多个相同的 USB 设备,您可以选择将虚拟机分配给特定设备。
先决条件
-
您可以使用具有
cluster-admin角色的用户访问 OpenShift Container Platform 集群。
流程
确保启用了
HostDevices功能门:oc get featuregate cluster -o yaml
$ oc get featuregate cluster -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 成功输出
featureGates: # ... enabled: - name: HostDevicesfeatureGates: # ... enabled: - name: HostDevicesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 识别 USB 设备厂商和产品:
lsusb
$ lsusbCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Bus 003 Device 007: ID 1b1c:0a60 example_manufacturer example_product_name
Bus 003 Device 007: ID 1b1c:0a60 example_manufacturer example_product_nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您无法使用
lsusb命令,请检查主机的/sys/bus/usb/devices/目录中的 USB 设备配置:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Device: 3-7 Manufacturer : example_manufacturer Product: example_product_name Vendor ID : 1b1c Product ID: 0a60
Device: 3-7 Manufacturer : example_manufacturer Product: example_product_name Vendor ID : 1b1c Product ID: 0a60Copy to Clipboard Copied! Toggle word wrap Toggle overflow
将所需的 USB 设备添加到
HyperConveredCR 的permittedHostDevices小节中。以下示例添加了一个厂商 ID045e和产品 ID07a5的设备:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
确保
HyperConvergedCR 包含所需的 USB 设备:oc get hyperconverged kubevirt-hyperconverged -n openshift-cnv
$ oc get hyperconverged kubevirt-hyperconverged -n openshift-cnvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.14.14.2. 将 USB 设备连接到虚拟机 复制链接链接已复制到粘贴板!
您可以配置对 USB 设备的虚拟机 (VM) 访问。此配置可让虚拟机连接到附加到 OpenShift Container Platform 节点的 USB 硬件,就像硬件和虚拟机物理连接一样。
先决条件
-
已安装 OpenShift CLI(
oc)。 - 您已在集群级别将所需的 USB 设备作为资源附加。
流程
在
HyperConverged自定义资源(CR)中,查找 USB 设备分配的资源名称:oc get hyperconverged kubevirt-hyperconverged -n openshift-cnv
$ oc get hyperconverged kubevirt-hyperconverged -n openshift-cnvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 打开虚拟机实例 CR:
oc edit vmi <vmi_usb>
$ oc edit vmi <vmi_usb>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
- <vmi_usb>
-
指定
VirtualMachineInstanceCR 的名称。
通过添加 USB 设备来编辑 CR,如下例所示:
配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- USB 设备的名称。
将修改应用到虚拟机配置:
oc apply -f <filename>.yaml
$ oc apply -f <filename>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
- <filename>
-
指定
VirtualMachineInstance清单 YAML 文件的名称。
7.14.15. 在虚拟机上启用 descheduler 驱除 复制链接链接已复制到粘贴板!
您可以使用 descheduler 来驱除 pod,以便可将 pod 重新调度到更合适的节点上。如果 pod 是虚拟机,pod 驱除会导致虚拟机实时迁移到另一节点。
7.14.15.1. Descheduler 配置集 复制链接链接已复制到粘贴板!
使用 LongLifecycle 配置集在虚拟机上启用 descheduler。这是当前可用于 OpenShift Virtualization 的 descheduler 配置集。为确保正确调度,请创建带有 CPU 和内存请求的虚拟机用于预期的负载。
LongLifecycle此配置集在节点间平衡资源使用量并启用以下策略:
-
RemovePodsHavingTooManyRestarts:删除其容器重启次数太多的 pod,以及其中所有容器(包括 Init 容器)重启的总数超过 100 的 pod。重启虚拟机客户端操作系统不会增加这个计数。 LowNodeUtilization:在存在没有被充分利用的节点时,将 pod 从过度使用的节点上驱除。被驱除的 pod 的目标节点将由调度程序决定。- 如果节点的用量低于 20%(CPU、内存和 pod 的数量),则该节点将被视为使用率不足。
- 如果节点的用量超过 50%(CPU、内存和 pod 的数量),则该节点将被视为过量使用。
-
7.14.15.2. 安装 descheduler 复制链接链接已复制到粘贴板!
在默认情况下,不提供 descheduler。要启用 descheduler,您必须从 OperatorHub 安装 Kube Descheduler Operator,并启用一个或多个 descheduler 配置集。
默认情况下,descheduler 以预测模式运行,这意味着它只模拟 pod 驱除。您必须将 descheduler 的模式更改为自动进行 pod 驱除。
如果您在集群中启用了托管的 control plane,设置自定义优先级阈值,以降低托管 control plane 命名空间中的 pod 被驱除。将优先级阈值类名称设置为 hypershift-control-plane,因为它有托管的 control plane 优先级类的最低优先级值(100000000)。
先决条件
-
以具有
cluster-admin角色的用户身份登录到 OpenShift Container Platform。 - 访问 OpenShift Container Platform Web 控制台。
流程
- 登陆到 OpenShift Container Platform Web 控制台。
为 Kube Descheduler Operator 创建所需的命名空间。
- 进行 Administration → Namespaces,点 Create Namespace。
-
在 Name 字段中输入
openshift-kube-descheduler-operator,在 Labels 字段中输入openshift.io/cluster-monitoring=true来启用 descheduler 指标,然后点击 Create。
安装 Kube Descheduler Operator。
- 进入 Operators → OperatorHub。
- 在过滤框中输入 Kube Descheduler Operator。
- 选择 Kube Descheduler Operator 并点 Install。
- 在 Install Operator 页面中,选择 A specific namespace on the cluster。从下拉菜单中选择 openshift-kube-descheduler-operator 。
- 将 Update Channel 和 Approval Strategy 的值调整为所需的值。
- 点击 Install。
创建 descheduler 实例。
- 在 Operators → Installed Operators 页面中,点 Kube Descheduler Operator。
- 选择 Kube Descheduler 标签页并点 Create KubeDescheduler。
根据需要编辑设置。
- 要驱除 pod 而不是模拟驱除,请将 Mode 字段更改为 Automatic。
展开 Profiles 部分,再选择
LongLifecycle。AffinityAndTaints配置集默认为启用。重要当前唯一可用于 OpenShift Virtualization 的配置集是
LongLifecycle。
您还可以稍后使用 OpenShift CLI(oc)为 descheduler 配置配置集和设置。
7.14.15.3. 在虚拟机(VM)上启用 descheduler 驱除 复制链接链接已复制到粘贴板!
安装 descheduler 后,您可以通过在 VirtualMachine 自定义资源(CR)中添加注解来在虚拟机上启用 descheduler 驱除。
先决条件
-
在 OpenShift Container Platform Web 控制台或 OpenShift CLI(
oc)中安装 descheduler。
流程
- 停止虚拟机。
将
descheduler.alpha.kubernetes.io/evict注解添加到VirtualMachineCR。注意如果在虚拟机运行时添加注解,则在重启虚拟机前不会应用到
virt-launcherpod。对于当前的 descheduler 行为,只检查存在注解。该值不会被评估,因此
"true"和"false"具有相同的效果。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
LongLifecycle配置集配置KubeDescheduler对象,并启用后台驱除,以便在实时迁移过程中改进虚拟机驱除稳定性:注意在虚拟机上设置驱除注解时,
LongLifecycle配置集足以满足虚拟机驱除。不要启用EvictPodsWithLocalStorage或EvictPodsWithPVC。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 启动虚拟机。
现在在虚拟机上启用了 descheduler。
7.14.16. 关于虚拟机的高可用性 复制链接链接已复制到粘贴板!
您可以通过手动删除故障节点来触发虚拟机故障切换或配置补救节点,为虚拟机 (VM) 启用高可用性。
手动删除出现故障的节点
如果节点失败,且集群中没有部署机器健康检查,则带有 runStrategy: Always 配置的虚拟机不会自动重新定位到健康的节点。要触发虚拟机故障切换,您必须手动删除 Node 对象。
配置补救节点
您可以通过从 OperatorHub 安装 Self Node Remediation Operator 或 Fence Agents Remediation Operator 来配置补救节点,并启用机器健康检查或节点补救检查。
如需有关补救、隔离和维护节点的更多信息,请参阅 Red Hat OpenShift 文档中的工作负载可用性。
7.14.17. 虚拟机 control plane 调整 复制链接链接已复制到粘贴板!
OpenShift Virtualization 在 control-plane 级别提供以下调整选项:
-
highBurst配置集(使用固定QPS和burst率)在一个批处理中创建数百个虚拟机 (VM) - 基于工作负载类型的迁移设置调整
7.14.17.1. 配置 highBurst 配置集 复制链接链接已复制到粘贴板!
使用 highBurst 配置集在一个集群中创建和维护大量虚拟机(VM)。
流程
应用以下补丁以启用
highBurst调优配置文件:oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv \ --type=json -p='[{"op": "add", "path": "/spec/tuningPolicy", \ "value": "highBurst"}]'$ oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv \ --type=json -p='[{"op": "add", "path": "/spec/tuningPolicy", \ "value": "highBurst"}]'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令,以验证启用了
highBurst调优配置文件:oc get kubevirt.kubevirt.io/kubevirt-kubevirt-hyperconverged \ -n openshift-cnv -o go-template --template='{{range $config, \ $value := .spec.configuration}} {{if eq $config "apiConfiguration" \ "webhookConfiguration" "controllerConfiguration" "handlerConfiguration"}} \ {{"\n"}} {{$config}} = {{$value}} {{end}} {{end}} {{"\n"}}$ oc get kubevirt.kubevirt.io/kubevirt-kubevirt-hyperconverged \ -n openshift-cnv -o go-template --template='{{range $config, \ $value := .spec.configuration}} {{if eq $config "apiConfiguration" \ "webhookConfiguration" "controllerConfiguration" "handlerConfiguration"}} \ {{"\n"}} {{$config}} = {{$value}} {{end}} {{end}} {{"\n"}}Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.14.18. 分配计算资源 复制链接链接已复制到粘贴板!
在 OpenShift Virtualization 中,分配给虚拟机的计算资源由保证 CPU 或时间分片 CPU 共享提供支持。
保证的 CPU (也称为 CPU 保留)将 CPU 内核或线程专用于特定工作负载,从而使它们对任何其他工作负载都不可用。为虚拟机分配有保证的 CPU 可确保虚拟机只能访问保留的物理 CPU。为虚拟机启用专用资源以使用保证 CPU。
时间分片 CPU 将一个时间分片用于每个工作负载共享物理 CPU。您可以指定虚拟机创建过程中或虚拟机离线期间的分片大小。默认情况下,每个 vCPU 收到 100 毫秒,或一个物理 CPU 时间的 1/10 秒。
CPU 保留类型取决于实例类型或虚拟机配置。
7.14.18.1. 过度分配 CPU 资源 复制链接链接已复制到粘贴板!
时间分片允许多个虚拟 CPU (vCPU) 共享单个物理 CPU。这称为 CPU 过量分配(CPU overcommitment)。保证虚拟机不会被过度分配。
配置 CPU 过量分配,以便在为虚拟机分配 CPU 时优先选择虚拟机密度。对于 vCPU 的 CPU 过量分配,更多虚拟机适合给定节点。
7.14.18.2. 设置 CPU 分配比率 复制链接链接已复制到粘贴板!
CPU 分配率通过将 vCPU 映射到物理 CPU 时间分片来指定过量分配程度。
例如,一个映射或 10:1 的比例通过使用时间片段将 10 个虚拟 CPU 映射到 1 个物理 CPU。
要更改映射到每个物理 CPU 的默认 vCPU 数量,请在 HyperConverged CR 中设置 vmiCPUAllocationRatio 值。pod CPU 请求是通过 CPU 分配比率重新处理的 vCPU 数量来计算的。例如,如果 vmiCPUAllocationRatio 设置为 10,OpenShift Virtualization 会在该虚拟机的 pod 上请求 10 倍的 CPU。
流程
在 HyperConverged CR 中设置 vmiCPUAllocationRatio 值来定义节点 CPU 分配比率。
运行以下命令,在默认编辑器中打开
HyperConvergedCR:oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 设置
vmiCPUAllocationRatio:... spec: resourceRequirements: vmiCPUAllocationRatio: 1 # ...... spec: resourceRequirements: vmiCPUAllocationRatio: 11 # ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 当
vmiCPUAllocationRatio设置为1时,容器集请求的最大 vCPU 数量。
7.14.19. 关于多队列功能 复制链接链接已复制到粘贴板!
使用多队列功能在具有多个 vCPU 的虚拟机 (VM) 上扩展网络吞吐量和性能。
默认情况下,从域 XML 派生的 queueCount 值由分配给虚拟机的 vCPU 数量决定。随着 vCPU 数量增加,网络性能无法扩展。另外,因为 virtio-net 只有一个 Tx 和 Rx 队列,所以客户机无法并行传输或检索软件包。
当客户机实例中的 vNIC 数量与 vCPU 数量成比例时,启用 virtio-net 多队列并不会显著改进。
7.14.19.1. 已知限制 复制链接链接已复制到粘贴板!
- 如果在主机中启用了 virtio-net multiqueue,但管理员未在客户机操作系统中启用它,则 MSI vectors 仍然会被使用。
- 每个 virtio-net 队列为 vhost 驱动程序使用 64 KiB 内核内存。
-
如果
networkInterfaceMultiqueue设置为 'true',启动带有超过 16 个 CPU 的虚拟机会导致没有连接(CNV-16107)。
7.14.19.2. 启用多队列功能 复制链接链接已复制到粘贴板!
为使用 VirtIO 模型配置的接口启用多队列功能。
流程
在虚拟机的
VirtualMachine清单文件中将networkInterfaceMultiqueue值设置为true来启用多队列功能:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
保存
VirtualMachine清单文件以应用更改。
7.14.20. 使用 OpenShift GitOps 管理虚拟机 复制链接链接已复制到粘贴板!
要在 OpenShift Virtualization 中自动化和优化虚拟机(VM)管理,您可以使用 OpenShift GitOps。
使用 GitOps,您可以根据存储在 Git 仓库中的配置文件来设置虚拟机部署。这也便于自动化、更新或复制这些配置,以及使用版本控制来跟踪其更改。
先决条件
- 您有一个 GitHub 帐户。有关设置帐户的说明,请参阅在 GitHub 上创建帐户。
- OpenShift Virtualuzation 已安装在 OpenShift 集群中。具体步骤请参阅 OpenShift Virtualization 安装。
- OpenShift GitOps Operator 已安装在 OpenShift 集群中。具体步骤请参阅 安装 GitOps。
流程
按照使用 GitOps 管理 OpenShift 虚拟机的学习路径 执行这些操作 :
- 将外部 Git 仓库连接到 Argo CD 实例。
- 在 Git 仓库中创建所需的虚拟机配置。
- 使用虚拟机配置在集群中创建虚拟机。
7.15. VM 磁盘 复制链接链接已复制到粘贴板!
7.15.1. 热插虚拟机磁盘 复制链接链接已复制到粘贴板!
您可以在不停止虚拟机(VM)或虚拟机实例(VMI)的情况下添加或删除虚拟磁盘。
只有数据卷和持久性卷声明 (PVC) 才能热插和热拔。您无法热插或热拔容器磁盘。
热插磁盘在重新引导后仍会附加到虚拟机。您必须分离磁盘才能从虚拟机中删除它。
您可以使热插磁盘持久保留,使其永久挂载在虚拟机上。
每个虚拟机都有一个 virtio-scsi 控制器,以便热插磁盘可以使用 scsi 总线。virtio-scsi 控制器克服了 virtio 的限制,同时保持其性能优势。它高度可扩展,支持超过 400 万个磁盘的热插拔。
常规 virtio 不适用于热插磁盘,因为它不可扩展。每个 virtio 磁盘都使用虚拟机中的一个有限的 PCI Express (PCIe) 插槽。PCIe 插槽也被其他设备使用,必须提前保留。因此,插槽可能按需提供。
7.15.1.1. 使用 Web 控制台热插和热拔磁盘 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform web 控制台在虚拟机运行时将其附加到虚拟机 (VM) 来热插磁盘。
热插磁盘会附加到虚拟机,直到您拔出为止。
您可以使热插磁盘持久保留,使其永久挂载在虚拟机上。
先决条件
- 您必须至少有一个数据卷或持久性卷声明(PVC)可用于热插。
流程
- 在 web 控制台中进入到 Virtualization → VirtualMachines。
- 选择一个正在运行的虚拟机来查看其详情。
- 在 VirtualMachine 详情页面中,点 Configuration → Disks。
添加热插磁盘:
- 点 Add disk。
- 在 Add disk (hot plugged) 窗口中,从 Source 列表中选择磁盘,然后点 Save。
可选: 热插磁盘:
-
点磁盘旁边的选项菜单
,然后选择 Detach。
- 单击 Detach。
-
点磁盘旁边的选项菜单
可选:使热插磁盘持久:
-
点磁盘旁的选项菜单
并选择 Make persistent。
- 重启虚拟机以应用更改。
-
点磁盘旁的选项菜单
7.15.1.2. 使用命令行热插和热拔磁盘 复制链接链接已复制到粘贴板!
您可以使用命令行在虚拟机 (VM) 运行时热插和热拔磁盘。
您可以使热插磁盘持久保留,使其永久挂载在虚拟机上。
先决条件
- 您必须至少有一个数据卷或持久性卷声明(PVC)可用于热插。
流程
运行以下命令来热插磁盘:
virtctl addvolume <virtual-machine|virtual-machine-instance> \ --volume-name=<datavolume|PVC> \ [--persist] [--serial=<label-name>]
$ virtctl addvolume <virtual-machine|virtual-machine-instance> \ --volume-name=<datavolume|PVC> \ [--persist] [--serial=<label-name>]Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
使用可选
--persist标志,将热插磁盘作为永久挂载的虚拟磁盘添加到虚拟机规格中。停止、重新启动或重新启动虚拟机以永久挂载虚拟磁盘。指定--persist标志后,您无法再热插或热拔虚拟磁盘。Persist标志适用于虚拟机,不适用于虚拟机实例。 -
可选
--serial标志允许您添加您选择的字母数字字符串标签。这有助于您识别客户机虚拟机中的热插磁盘。如果没有指定这个选项,则标签默认为热插数据卷或 PVC 的名称。
-
使用可选
运行以下命令来热拔磁盘:
virtctl removevolume <virtual-machine|virtual-machine-instance> \ --volume-name=<datavolume|PVC>
$ virtctl removevolume <virtual-machine|virtual-machine-instance> \ --volume-name=<datavolume|PVC>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.15.2. 扩展虚拟机磁盘 复制链接链接已复制到粘贴板!
您可以通过扩展磁盘的持久性卷声明(PVC)来增加虚拟机(VM)磁盘的大小。
如果您的存储供应商不支持卷扩展,您可以通过添加空白数据卷来扩展虚拟机的可用虚拟存储。
您不能缩小虚拟机磁盘的大小。
7.15.2.1. 扩展虚拟机磁盘 PVC 复制链接链接已复制到粘贴板!
您可以通过扩展磁盘的持久性卷声明(PVC)来增加虚拟机(VM)磁盘的大小。
如果 PVC 使用文件系统卷模式,磁盘镜像文件会扩展到可用大小,同时为文件系统开销保留一些空间。
流程
编辑您要扩展的虚拟机磁盘的
PersistentVolumeClaim清单:oc edit pvc <pvc_name>
$ oc edit pvc <pvc_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新磁盘大小:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定新磁盘大小。
7.15.2.2. 通过添加空白数据卷来扩展可用虚拟存储 复制链接链接已复制到粘贴板!
您可以通过添加空白数据卷来扩展虚拟机的可用存储。
先决条件
- 您必须至少有一个持久性卷。
流程
如以下示例所示创建
DataVolume清单:DataVolume清单示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建数据卷:
oc create -f <blank-image-datavolume>.yaml
$ oc create -f <blank-image-datavolume>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 8 章 网络 复制链接链接已复制到粘贴板!
8.1. 网络概述 复制链接链接已复制到粘贴板!
OpenShift Virtualization 使用自定义资源和插件提供高级联网功能。虚拟机(VM)与 OpenShift Container Platform 网络及其生态系统集成。
您无法在单堆栈 IPv6 集群上运行 OpenShift Virtualization。
下图演示了 OpenShift Virtualization 的典型网络设置。也可以进行其他配置。
图 8.1. OpenShift Virtualization 网络概述
Pod 和虚拟机在同一网络基础架构上运行,允许您轻松连接容器化和虚拟化的工作负载。
您可以将虚拟机连接到默认 pod 网络和任意数量的二级网络。
默认 pod 网络提供其所有成员、服务抽象、IP 管理、微分段和其他功能之间的连接。
Multus 是一个 "meta" CNI 插件,它允许 pod 或虚拟机使用其他兼容 CNI 插件连接到其他网络接口。
默认 pod 网络是基于覆盖的,通过底层机器网络进行隧道连接。
机器网络可以在一组选定的网络接口控制器(NIC)上定义。
辅助虚拟机网络通常直接桥接到物理网络,且没有 VLAN 封装。也可以为二级网络创建虚拟覆盖网络。
Red Hat OpenShift Service on AWS 不支持将虚拟机直接连接到 underlay 网络。
二级虚拟机网络可以在专用的 NIC 集合上定义,如图 1 所示,也可以使用机器网络。
8.1.1. OpenShift Virtualization 术语表 复制链接链接已复制到粘贴板!
以下是整个 OpenShift Virtualization 文档中使用的术语:
- Container Network Interface (CNI)
- 一个 Cloud Native Computing Foundation 项目,侧重容器网络连接。OpenShift Virtualization 使用 CNI 插件基于基本 Kubernetes 网络功能进行构建。
- Multus
- 一个“meta”CNI 插件,支持多个 CNI 共存,以便 pod 或虚拟机可使用其所需的接口。
- 自定义资源定义(CRD)
- 一个 Kubernetes API 资源,用于定义自定义资源,或使用 CRD API 资源定义的对象。
- 网络附加定义(NAD)
- 由 Multus 项目引入的 CRD,允许您将 Pod、虚拟机和虚拟机实例附加到一个或多个网络。
- 节点网络配置策略(NNCP)
-
nmstate 项目引入的 CRD,描述节点上请求的网络配置。您可以通过将
NodeNetworkConfigurationPolicy清单应用到集群来更新节点网络配置,包括添加和删除网络接口 。
8.1.2. 使用默认 pod 网络 复制链接链接已复制到粘贴板!
- 将虚拟机连接到默认 pod 网络
- 每个虚拟机默认连接到默认的内部 pod 网络。您可以通过编辑虚拟机规格来添加或删除网络接口。
- 将虚拟机作为服务公开
-
您可以通过创建
Service对象在集群内或集群外公开虚拟机。对于内部集群,您可以使用 MetalLB Operator 配置负载均衡服务。您可以使用 OpenShift Container Platform Web 控制台或 CLI 安装 MetalLB Operator。
8.1.3. 配置虚拟机二级网络接口 复制链接链接已复制到粘贴板!
您可以使用 Linux 网桥、SR-IOV 和 OVN-Kubernetes CNI 插件将虚拟机连接到二级网络。您可以在虚拟机规格中列出多个二级网络和接口。连接到二级网络接口时,不需要在虚拟机规格中指定主 pod 网络。
- 将虚拟机连接到 OVN-Kubernetes 二级网络
您可以将虚拟机连接到 OVN-Kubernetes 二级网络。OpenShift Virtualization 支持 OVN-Kubernetes 的
layer2和localnet拓扑。localnet拓扑是在使用或不使用 VLAN 封装的情况下将虚拟机公开给底层物理网络的建议方法。-
layer2拓扑通过集群范围的逻辑交换机连接工作负载。OVN-Kubernetes CNI 插件使用 Geneve (通用网络虚拟化封装)协议在节点间创建覆盖网络。您可以使用此覆盖网络在不同的节点上连接虚拟机,而无需配置任何其他物理网络基础架构。 -
localnet拓扑将二级网络连接到 下的物理网络。这可让 east-west 集群流量并访问在集群外运行的服务,但它需要在集群节点上配置底层 Open vSwitch (OVS) 系统。
-
要配置 OVN-Kubernetes 二级网络并将虚拟机附加到该网络,请执行以下步骤:
通过创建网络附加定义(NAD)来配置 OVN-Kubernetes 二级网络。
注意对于
localnet拓扑,您必须在创建 NAD 前创建一个NodeNetworkConfigurationPolicy对象来配置 OVS 网桥。- 通过在虚拟机规格中添加网络详情,将虚拟机连接到 OVN-Kubernetes 二级网络。
- 将虚拟机连接到 SR-IOV 网络
对于需要高带宽或低延迟的应用程序,您可以使用单根 I/O 虚拟化 (SR-IOV) 网络设备,并在裸机或 Red Hat OpenStack Platform (RHOSP) 基础架构上安装额外网络。
您必须 在集群中安装 SR-IOV Network Operator,以管理 SR-IOV 网络设备和网络附加。
您可以通过执行以下步骤将虚拟机连接到 SR-IOV 网络:
-
通过创建一个
SriovNetworkNodePolicyCRD 配置一个 SR-IOV 网络设备。 -
通过创建一个
SriovNetwork对象来配置 SR-IOV 网络。 - 通过在虚拟机配置中包含网络详情,将虚拟机连接到 SR-IOV 网络。
-
通过创建一个
- 将虚拟机连接到 Linux 网桥网络
安装 Kubernetes NMState Operator,为您的二级网络配置 Linux 网桥、VLAN 和绑定。OVN-Kubernetes
localnet拓扑是将虚拟机连接到底层物理网络的建议方法,但 OpenShift Virtualization 还支持 Linux 网桥网络。注意使用 Linux 网桥网络时,您无法直接附加到默认机器网络。
您可以通过执行以下步骤来创建 Linux 网桥网络并将虚拟机附加到网络:
-
通过创建
NodeNetworkConfigurationPolicy自定义资源定义(CRD) 来配置 Linux 网桥网络设备。 -
通过创建
NetworkAttachmentDefinitionCRD 来配置 Linux 网桥网络。 - 通过在虚拟机配置中包含网络详情,将虚拟机连接到 Linux 网桥网络。
-
通过创建
- 热插二级网络接口
- 您可以在不停止虚拟机的情况下添加或删除二级网络接口。OpenShift Virtualization 支持热插和热拔使用桥接绑定和 VirtIO 设备驱动程序的二级接口。OpenShift Virtualization 还支持热插使用 SR-IOV 绑定的二级接口。
- 在 SR-IOV 中使用 DPDK
- Data Plane Development Kit (DPDK) 提供了一组库和驱动程序,用于快速数据包处理。您可以配置集群和虚拟机,以通过 SR-IOV 网络运行 DPDK 工作负载。
- 为实时迁移配置专用网络
- 您可以为实时迁移配置专用 Multus 网络。专用的网络可最小化实时迁移期间对租户工作负载的网络饱和影响。
- 使用集群 FQDN 访问虚拟机
- 您可以使用其完全限定域名 (FQDN) 访问从集群外部附加到二级网络接口的虚拟机。
- 配置和查看 IP 地址
- 您可以在创建虚拟机时配置二级网络接口的 IP 地址。IP 地址使用 cloud-init 置备。您可以使用 OpenShift Container Platform Web 控制台或命令行查看虚拟机的 IP 地址。QEMU 客户机代理收集网络信息。
8.1.3.1. 比较 Linux 网桥 CNI 和 OVN-Kubernetes localnet 拓扑 复制链接链接已复制到粘贴板!
下表提供了在使用 Linux bridge CNI 与 OVN-Kubernetes 插件的 localnet 拓扑相比可用功能的比较:
| 功能 | 在 Linux 网桥 CNI 上提供 | OVN-Kubernetes localnet 上提供 |
|---|---|---|
| 第 2 层访问 underlay 原生网络 | 仅在二级网络接口控制器(NIC)上。 | 是 |
| Layer 2 访问底层 VLAN | 是 | 是 |
| 第 2 层中继访问 | 是 | 否 |
| 网络策略 | 否 | 是 |
| MAC spoof 过滤 | 是 | 是(Always on) |
8.1.4. 与 OpenShift Service Mesh 集成 复制链接链接已复制到粘贴板!
- 将虚拟机连接到服务网格
- OpenShift Virtualization 与 OpenShift Service Mesh 集成。您可以监控、视觉化和控制 pod 和虚拟机之间的流量。
8.1.5. 管理 MAC 地址池 复制链接链接已复制到粘贴板!
- 为网络接口管理 MAC 地址池
- KubeMacPool 组件从共享 MAC 地址池为虚拟机网络接口分配 MAC 地址。这样可确保为每个网络接口分配唯一的 MAC 地址。从该虚拟机创建的虚拟机实例在重启后保留分配的 MAC 地址。
8.1.6. 配置 SSH 访问 复制链接链接已复制到粘贴板!
- 配置对虚拟机的 SSH 访问
您可以使用以下方法配置到虚拟机的 SSH 访问:
您可以创建一个 SSH 密钥对,将公钥添加到虚拟机,并使用私钥运行
virtctl ssh命令连接到虚拟机。您可以在运行时将公共 SSH 密钥添加到 Red Hat Enterprise Linux (RHEL) 9 虚拟机,或第一次引导到使用 cloud-init 数据源配置的客户机操作系统的虚拟机。
您可以将
virtctl port-foward命令添加到.ssh/config文件中,并使用 OpenSSH 连接到虚拟机。您可以创建一个服务,将服务与虚拟机关联,并连接到该服务公开的 IP 地址和端口。
您可以配置二级网络,将虚拟机附加到二级网络接口,并连接到其分配的 IP 地址。
8.2. 将虚拟机连接到默认 pod 网络 复制链接链接已复制到粘贴板!
您可以通过将其网络接口配置为使用 masquerade 绑定模式,将虚拟机连接到默认的内部 pod 网络。
在实时迁移过程中,通过网络接口到默认 pod 网络的流量会中断。
8.2.1. 从命令行配置伪装模式 复制链接链接已复制到粘贴板!
您可以使用伪装模式将虚拟机的外发流量隐藏在 pod IP 地址后。伪装模式使用网络地址转换 (NAT) 来通过 Linux 网桥将虚拟机连接至 pod 网络后端。
启用伪装模式,并通过编辑虚拟机配置文件让流量进入虚拟机。
先决条件
- 虚拟机必须配置为使用 DHCP 来获取 IPv4 地址。
流程
编辑虚拟机配置文件的
interfaces规格:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意端口 49152 和 49153 保留供 libvirt 平台使用,这些端口的所有其他传入流量将被丢弃。
创建虚拟机:
oc create -f <vm-name>.yaml
$ oc create -f <vm-name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
8.2.2. 使用双栈(IPv4 和 IPv6)配置伪装模式 复制链接链接已复制到粘贴板!
您可以使用 cloud-init 将新虚拟机配置为在默认 pod 网络上同时使用 IPv6 和 IPv4。
虚拟机实例配置中的 Network.pod.vmIPv6NetworkCIDR 字段决定虚拟机的静态 IPv6 地址和网关 IP 地址。virt-launcher Pod 使用它们将 IPv6 流量路由到虚拟机,而不在外部使用。Network.pod.vmIPv6NetworkCIDR 字段在无类别域间路由(CIDR)标记中指定一个 IPv6 地址块。默认值为 fd10:0:2::2/120。您可以根据网络要求编辑这个值。
当虚拟机运行时,虚拟机的传入和传出流量将路由到 IPv4 地址和 virt-launcher Pod 的唯一 IPv6 地址。virt-launcher pod 随后将 IPv4 流量路由到虚拟机的 DHCP 地址,并将 IPv6 流量路由到虚拟机的静态设置 IPv6 地址。
先决条件
- OpenShift Container Platform 集群必须使用为双栈配置的 OVN-Kubernetes Container Network Interface (CNI) 网络插件。
流程
在新的虚拟机配置中,包含具有
masquerade的接口,并使用 cloud-init 配置 IPv6 地址和默认网关。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在命名空间中创建虚拟机:
oc create -f example-vm-ipv6.yaml
$ oc create -f example-vm-ipv6.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
- 要验证 IPv6 是否已配置,启动虚拟机并查看虚拟机实例的接口状态,以确保它具有 IPv6 地址:
oc get vmi <vmi-name> -o jsonpath="{.status.interfaces[*].ipAddresses}"
$ oc get vmi <vmi-name> -o jsonpath="{.status.interfaces[*].ipAddresses}"
8.2.3. 关于巨型帧支持 复制链接链接已复制到粘贴板!
使用 OVN-Kubernetes CNI 插件时,您可以在默认 pod 网络上连接的两个虚拟机 (VM) 之间发送未分片的巨型帧数据包。巨型帧有一个大于 1500 字节的最大传输单元 (MTU) 值。
虚拟机自动获得集群网络的 MTU 值,由集群管理员设置,如下所示:
-
libvirt:如果客户机操作系统具有 VirtIO 驱动程序的最新版本,该驱动程序可通过模拟设备中的 Peripheral Component Interconnect (PCI) 配置寄存器来解释传入的数据。 - DHCP :如果客户机 DHCP 客户端可以从 DHCP 服务器响应中读取 MTU 值。
对于没有 VirtIO 驱动程序的 Windows 虚拟机,您必须使用 netsh 或类似的工具手动设置 MTU。这是因为 Windows DHCP 客户端没有读取 MTU 值。
8.3. 使用服务公开虚拟机 复制链接链接已复制到粘贴板!
您可以通过创建 Service 对象在集群内或集群外公开虚拟机。
8.3.1. 关于服务 复制链接链接已复制到粘贴板!
Kubernetes 服务将客户端的网络访问权限公开给一组容器集上运行的应用。服务在 NodePort 和 LoadBalancer 类型方面提供抽象、负载均衡以及暴露于外部世界。
- ClusterIP
-
在内部 IP 地址上公开服务,并将 DNS 名称公开给集群中的其他应用程序。单个服务可映射到多个虚拟机。当客户端尝试连接到服务时,客户端请求会在可用后端之间平衡负载。
ClusterIP是默认的服务类型。 - NodePort
-
在集群中每个所选节点的同一端口上公开该服务。
NodePort使端口可从集群外部访问,只要节点本身可以被客户端外部访问。 - LoadBalancer
- 在当前云中创建外部负载均衡器(如果支持),并为该服务分配固定的外部 IP 地址。
对于内部集群,您可以通过部署 MetalLB Operator 来配置负载均衡服务。
8.3.2. 双栈支持 复制链接链接已复制到粘贴板!
如果为集群启用了 IPv4 和 IPv6 双栈网络,您可以通过定义 Service 对象中的 spec.ipFamilyPolicy 和 spec.ipFamilies 字段来创建使用 IPv4、IPv6 或两者的服务。
spec.ipFamilyPolicy 字段可以设置为以下值之一:
- SingleStack
- control plane 根据配置的第一个服务集群 IP 范围为该服务分配集群 IP 地址。
- PreferDualStack
- control plane 为配置了双栈的集群中的服务分配 IPv4 和 IPv6 集群 IP 地址。
- RequireDualStack
-
对于没有启用双栈网络的集群,这个选项会失败。对于配置了双栈的集群,其行为与将值设置为
PreferDualStack时相同。control plane 从 IPv4 和 IPv6 地址范围分配集群 IP 地址。
您可以通过将 spec.ipFamilies 字段设置为以下数组值之一来定义用于单堆栈的 IP 系列,或者定义双栈 IP 系列的顺序:
-
[IPv4] -
[IPv6] -
[IPv4, IPv6] -
[IPv6, IPv4]
8.3.3. 使用命令行创建服务 复制链接链接已复制到粘贴板!
您可以使用命令行创建服务并将其与虚拟机 (VM) 关联。
先决条件
- 您已将集群网络配置为支持该服务。
流程
编辑
VirtualMachine清单,为创建服务添加标签:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 在
spec.template.metadata.labels小节中添加special: key。
注意虚拟机上的标签会传递到 pod。
special: key标签必须与Service清单的spec.selector属性中的标签匹配。-
保存
VirtualMachine清单文件以应用更改。 创建
Service清单以公开虚拟机:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
保存
Service清单文件。 运行以下命令来创建服务:
oc create -f example-service.yaml
$ oc create -f example-service.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 重启虚拟机以应用更改。
验证
查询
Service对象以验证它是否可用:oc get service -n example-namespace
$ oc get service -n example-namespaceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
8.4. 使用其内部 FQDN 访问虚拟机 复制链接链接已复制到粘贴板!
现在,您可以使用无头服务,访问连接到一个具有稳定 FQDN 的默认内部 pod 网络的虚拟机。
Kubernetes 无头服务 是一种形式的服务,它不会分配集群 IP 地址来代表一组 pod。对于无头服务,它不是为服务提供一个虚拟 IP 地址,而是为与服务关联的每个 pod 创建一个 DNS 记录。您可以通过 FQDN 来公开虚拟机,而无需公开特定的 TCP 或 UDP 端口。
如果使用 OpenShift Container Platform Web 控制台创建虚拟机,您可以在 VirtualMachine 详情页的 Overview 标签页中找到它在 Network 标题中列出的内部 FQDN。有关连接到虚拟机的更多信息,请参阅使用其内部 FQDN 连接到虚拟机。
8.4.1. 使用 CLI 在项目中创建无头服务 复制链接链接已复制到粘贴板!
要在命名空间中创建无头服务,请将 clusterIP: None 参数添加到服务 YAML 定义中。
先决条件
-
已安装 OpenShift CLI(
oc)。
流程
创建
Service清单以公开虚拟机,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
保存
Service清单文件。 运行以下命令来创建服务:
oc create -f headless_service.yaml
$ oc create -f headless_service.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
8.4.2. 使用 CLI 将虚拟机映射到无头服务 复制链接链接已复制到粘贴板!
要使用其内部完全限定域名 (FQDN) 从集群中连接到虚拟机 (VM),您必须首先将虚拟机映射到无头服务。在虚拟机配置文件中设置 spec.hostname 和 spec.subdomain 参数。
如果一个无头服务的名称与子域匹配,则会为虚拟机创建一个唯一的 DNS 记录,格式为 <vm.spec.hostname>.<vm.spec.subdomain>.<vm.metadata.namespace>.svc.cluster.local。
流程
运行以下命令,编辑
VirtualMachine清单以添加服务选择器标签和子域:oc edit vm <vm_name>
$ oc edit vm <vm_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow VirtualMachine清单文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改并退出编辑器。
- 重启虚拟机以应用更改。
8.4.3. 使用其内部 FQDN 连接到虚拟机 复制链接链接已复制到粘贴板!
您可以使用其内部完全限定域名 (FQDN) 连接到虚拟机 (VM)。
先决条件
-
已安装
virtctl工具。 -
您已从 web 控制台或将虚拟机映射到无头服务来识别虚拟机的内部 FQDN。内部 FQDN 的格式是
<vm.spec.hostname>.<vm.spec.subdomain>.<vm.metadata.namespace>.svc.cluster.local。
流程
输入以下命令连接到虚拟机控制台:
virtctl console vm-fedora
$ virtctl console vm-fedoraCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要使用请求的 FQDN 连接到虚拟机,请运行以下命令:
ping myvm.mysubdomain.<namespace>.svc.cluster.local
$ ping myvm.mysubdomain.<namespace>.svc.cluster.localCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
PING myvm.mysubdomain.default.svc.cluster.local (10.244.0.57) 56(84) bytes of data. 64 bytes from myvm.mysubdomain.default.svc.cluster.local (10.244.0.57): icmp_seq=1 ttl=64 time=0.029 ms
PING myvm.mysubdomain.default.svc.cluster.local (10.244.0.57) 56(84) bytes of data. 64 bytes from myvm.mysubdomain.default.svc.cluster.local (10.244.0.57): icmp_seq=1 ttl=64 time=0.029 msCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在前面的示例中,
myvm.mysubdomain.default.svc.cluster.local的 DNS 记录指向10.244.0.57,这是目前分配给虚拟机的集群 IP 地址。
8.5. 将虚拟机连接到 Linux 网桥网络 复制链接链接已复制到粘贴板!
默认情况下,OpenShift Virtualization 安装了一个内部 pod 网络。
您可以通过执行以下步骤来创建 Linux 网桥网络,并将虚拟机 (VM) 附加到网络:
- 创建 Linux 网桥节点网络配置策略 (NNCP)。
- 使用 Web 控制台或命令行创建 Linux 网桥网络附加定义(NAD)。
- 使用 Web 控制台或命令行配置虚拟机,以识别 NAD。
OpenShift Virtualization 不支持 Linux 网桥绑定模式 0、5 和 6。如需更多信息,请参阅哪个绑定模式在与虚拟机客户机或容器连接的网桥一起使用时可以正常工作?
8.5.1. 创建 Linux 网桥 NNCP 复制链接链接已复制到粘贴板!
您可以为 Linux 网桥网络创建一个 NodeNetworkConfigurationPolicy (NNCP) 清单。
先决条件
- 已安装 Kubernetes NMState Operator。
8.5.2. 创建 Linux 网桥 NAD 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform Web 控制台或命令行创建 Linux 网桥网络附加定义 (NAD)。