虚拟化
OpenShift Virtualization 安装、使用和发行注记
摘要
第 1 章 关于 OpenShift virtualization
OpenShift Virtualization 的功能与支持范围。
1.1. OpenShift Virtualization 的作用
OpenShift 虚拟化(OpenShift virtualization)是 OpenShift Container Platform 的一个附加组件,可用于运行和管理虚拟机工作负载以及容器工作负载。
OpenShift Virtualization 通过 Kubernetes 自定义资源添加新对象至 OpenShift Container Platform 集群中,以启用虚拟化任务。这些任务包括:
- 创建和管理 Linux 和 Windows 虚拟机
- 通过各种控制台和 CLI 工具连接至虚拟机
- 导入和克隆现有虚拟机
- 管理虚拟机上附加的网络接口控制器和存储磁盘
- 在节点间实时迁移虚拟机
增强版 web 控制台提供了一个图形化的门户界面 来管理虚拟化资源以及 OpenShift Container Platform 集群容器和基础架构。
OpenShift Virtualization 的设计和测试,可与 Red Hat OpenShift Data Foundation 功能配合工作。
您可以将 OpenShift Virtualization 与 OVN-Kubernetes、OpenShift SDN 或 认证的 OpenShift CNI 插件 中列出的其他认证网络插件一起使用。
您可以通过安装 Compliance Operator 并使用 ocp4-moderate
和 ocp4-moderate-node
配置集 运行扫描来检查 OpenShift Virtualization 集群的合规性问题。Compliance Operator 使用 NIST 认证工具 OpenSCAP 扫描并执行安全策略。
OpenShift Virtualization 与 Compliance Operator 集成只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
1.1.1. OpenShift Virtualization 支持的集群版本
OpenShift Virtualization 4.12 支持在 OpenShift Container Platform 4.12 集群中使用。要使用 OpenShift Virtualization 的最新 z-stream 版本,您必须首先升级到 OpenShift Container Platform 的最新版本。
1.2. 单节点 Openshift 的不同
您可以在单节点集群中安装 OpenShift Virtualization。
使用辅助安装程序置备单节点 OpenShift 集群时,会自动部署预配置的持久性存储。
- 在 OpenShift Virtualization 4.10 和 4.11 中,会自动安装 HostPath Provisioner (HPP)。
- 在 OpenShift Virtualization 4.12 中,OpenShift Data Foundation Logical Volume Manager Operator 是提供的开箱即用的存储解决方案。您还可以使用 HPP 手动部署。
单节点 OpenShift 不支持高可用性。请注意多节点集群的功能区别:
- 不支持 Pod 中断预算。
- 不支持实时迁移。
- 由于存储行为的区别,一些虚拟机模板与单节点 OpenShift 不兼容。为确保兼容性,使用数据卷或存储配置集的模板或虚拟机不能设置驱除策略。
1.3. 其他资源
第 2 章 OpenShift Virtualization 架构
了解 OpenShift Virtualization 架构。
2.1. OpenShift Virtualization 架构如何工作
安装 OpenShift Virtualization 后,Operator Lifecycle Manager(OLM)会为 OpenShift Virtualization 的每个组件部署 operator pod:
-
Compute:
virt-operator
-
Storage:
cdi-operator
-
Network:
cluster-network-addons-operator
-
Scaling:
ssp-operator
-
Templating:
tekton-tasks-operator
OLM 还会部署 hyperconverged-cluster-operator
pod,它负责其他组件的部署、配置和生命周期,以及几个 helper pod: hco-webhook
和 hyperconverged-cluster-cli-download
。
成功部署所有 Operator pod 后,您应该创建 HyperConverged
自定义资源 (CR)。HyperConverged
CR 中的配置充当 OpenShift Virtualization 的单个来源,并指导 CR 的行为。
HyperConverged
CR 为其协调循环中的所有其他组件的 operator 创建对应的 CR。然后,每个 Operator 会为 OpenShift Virtualization control plane 创建资源,如守护进程集、配置映射和其他组件。例如,当 hco-operator
创建 KubeVirt
CR 时,virt-operator
会协调它并创建其他资源,如 virt-controller
、virt-handler
和 virt-api
。
OLM 部署 hostpath-provisioner-operator
,但在创建 hostpath provisioner
(HPP)CR 之前,它无法正常工作。

2.2. 关于 hco-operator
hco-operator
(HCO)提供了一个单一入口点,用于部署和管理 OpenShift Virtualization 以及一些带有建议的默认值的 helper operator。它还会为这些操作器创建自定义资源(CR)。

表 2.1. hco-operator 组件
组件 | 描述 |
---|---|
|
验证 |
|
提供 |
| 包含 OpenShift Virtualization 需要的所有 operator、CR 和对象。 |
| SSP CR。这由 HCO 自动创建。 |
| CDI CR。这由 HCO 自动创建。 |
|
指示并由 |
2.3. 关于 cdi-operator
cdi-operator
管理 Containerized Data Importer(CDI)及其相关资源,它使用数据卷将虚拟机(VM)镜像导入到持久性卷声明(PVC)。

表 2.2. cdi-operator 组件
组件 | 描述 |
---|---|
| 通过提供安全上传令牌来管理将虚拟机磁盘上传到 PVC 的授权过程。 |
| 将外部磁盘上传流量定向到适当的上传服务器 pod,以便将其写入正确的 PVC。需要有效的上传令牌。 |
| helper(帮助程序)Pod,在创建数据卷时将虚拟机镜像导入到 PVC 中。 |
2.4. 关于 cluster-network-addons-operator
cluster-network-addons-operator
在集群中部署网络组件,并管理相关资源以了解扩展网络功能。

表 2.3. cluster-network-addons-operator 组件
组件 | 描述 |
---|---|
| 管理 Kubemacpool 的 webhook 的 TLS 证书。 |
| 为虚拟机(VM)网络接口卡(NIC)提供 MAC 地址池服务。 |
| 将节点上可用的网络桥接标记为节点资源。 |
| 在集群节点上安装 CNI 插件,通过网络附加定义将虚拟机附加到 Linux 网桥。 |
2.5. 关于 hostpath-provisioner-operator
hostpath-provisioner-operator
部署并管理多节点 hostpath 置备程序(HPP)和相关资源。

表 2.4. hostpath-provisioner-operator 组件
组件 | 描述 |
---|---|
| 为指定 hostpath 置备程序(HPP)的每个节点提供一个 worker。pod 在节点上挂载指定的后备存储。 |
| 实现 HPP 的容器存储接口(CSI)驱动程序接口。 |
| 实现 HPP 的传统驱动程序接口。 |
2.6. 关于 ssp-operator
ssp-operator
部署通用模板、相关默认引导源和模板验证器。

表 2.5. ssp-operator 组件
组件 | 描述 |
---|---|
|
检查从模板创建的虚拟机上 |
2.7. 关于 tekton-tasks-operator
tekton-tasks-operator
部署示例管道,显示 OpenShift Pipelines 用于虚拟机的情况。它还部署额外的 OpenShift Pipeline 任务,允许用户从模板创建虚拟机、复制和修改模板,以及创建数据卷。

表 2.6. tekton-tasks-operator components
组件 | 描述 |
---|---|
| 从模板创建虚拟机。 |
| 复制虚拟机模板。 |
| 创建和删除虚拟机模板。 |
| 创建和删除数据卷或数据源。 |
| 在虚拟机上运行脚本或命令,然后在之后停止或删除虚拟机。 |
|
使用 |
|
使用 |
| 等待特定 VMI 状态,然后根据该状态失败或成功。 |
2.8. 关于 virt-operator
virt-operator
在不影响当前虚拟机(VM)工作负载的情况下部署、升级和管理 OpenShift Virtualization。

表 2.7. virt-operator 组件
组件 | 描述 |
---|---|
| 用作所有与虚拟化相关的流的入口点的 HTTP API 服务器。 |
|
观察创建新虚拟机实例对象并创建对应的 pod。当 pod 调度到某个节点上时, |
|
监控对虚拟机的任何更改并指示 |
|
包含由 |
第 3 章 OpenShift Virtualization 入门
您可以通过安装和配置基本环境来探索 OpenShift Virtualization 的功能和功能。
集群配置过程需要 cluster-admin
权限。
3.1. 规划和安装 OpenShift Virtualization
在 OpenShift Container Platform 集群中计划并安装 OpenShift Virtualization:
规划和安装资源
3.2. 创建和管理虚拟机
使用 web 控制台创建虚拟机 (VM):
连接到虚拟机:
- 使用 web 控制台连接至虚拟机的串行控制台或 VNC控制台。
- 使用 SSH 连接到虚拟机。
- 使用 RDP 连接到 Windows 虚拟机。
管理虚拟机:
3.3. 后续步骤
将虚拟机连接到二级网络:
- 将虚拟机连接到 Linux 网桥网络。
- 注意
默认情况下,虚拟机连接到 pod 网络。您必须配置二级网络,如 Linux 网桥或 SR-IOV,然后将网络添加到虚拟机配置中。
- 使用 Web 控制台 监控资源、详情、状态和顶级用户。
- 使用 Web 控制台查看有关虚拟机工作负载的高级别信息。
- 使用 CLI 查看 OpenShift Virtualization 日志。
-
使用
sysprep
自动执行 Windows 虚拟机部署。 - 实时迁移虚拟机.
- 备份和恢复虚拟机。
第 4 章 Web 控制台概述
OpenShift Container Platform Web 控制台的 Virtualization 部分包含以下页面来管理和监控 OpenShift Virtualization 环境。
表 4.1. 虚拟化页面
页面 | 描述 |
---|---|
管理和监控 OpenShift Virtualization 环境。 | |
从模板目录创建 VirtualMachines。 | |
配置和监控 VirtualMachines。 | |
创建和管理模板。 | |
为 VirtualMachine 引导源创建和管理数据源。 | |
为工作负载创建和管理 MigrationPolicies。 |
表 4.2. 键
图标 | 描述 |
---|---|
| 编辑图标 |
| 链接图标 |
4.1. 概述页面
Overview 页面显示资源、指标、迁移进度和集群级别设置。
例 4.1. 概述页面
4.1.1. 概述标签
Overview 选项卡显示资源、使用情况、警报和状态。
例 4.2. 概述标签页
元素 | 描述 |
---|---|
"Getting started resources" 卡 |
|
"VirtualMachines" 标题 | VirtualMachines 数量,带有图表,显示最后 7 天的趋势。 |
"vCPU 使用"标题 | vCPU 使用量,图表显示最后 7 天的趋势。 |
"Memory" 标题 | 内存用量,图表显示最后 7 天的趋势。 |
"Storage" 标题 | 存储使用,图表显示最后 7 天的趋势。 |
"Alerts" 标题 | OpenShift Virtualization 警报,按严重性分组。 |
"VirtualMachine statuses" 标题 | VirtualMachines 的数量,按状态分组。 |
"VirtualMachines per template" 图 | 从模板创建的 VirtualMachines 数量,按模板名称分组。 |
4.1.2. 顶级消费者选项卡
Top consumers 选项卡显示 CPU、内存和存储的主要使用者。
例 4.3. 顶级消费者选项卡
元素 | 描述 |
---|---|
查看虚拟化仪表板 | 指向 Observe → Dashboards,显示 OpenShift Virtualization 的顶部用户。 |
时间周期列表 | 选择过滤结果的时间周期。 |
顶级消费者列表 | 选择顶级消费者的数量来过滤结果。 |
"CPU" 图 | CPU 使用率最高的 VirtualMachines。 |
"Memory" 图 | 带有最高内存用量的 VirtualMachines。 |
"内存交换流量"图 | 带有最高内存交换流量的 VirtualMachines。 |
"vCPU wait" 图 | 带有最高 vCPU 等待期间的 VirtualMachines。 |
"存储吞吐量"图 | 带有最高存储吞吐量使用量的 VirtualMachines。 |
"存储 IOPS"图 | 带有最高存储输入/输出操作的 VirtualMachines 每秒使用。 |
4.1.3. Migration 标签页
Migrations 选项卡显示 VirtualMachineInstance 迁移的状态。
例 4.4. Migration 标签页
元素 | 描述 |
---|---|
时间周期列表 | 选择一个时间段来过滤 VirtualMachineInstanceMigrations。 |
VirtualMachineInstanceMigrations 表 | VirtualMachineInstance 迁移列表。 |
4.1.4. 设置标签页
Settings 选项卡在以下标签页中显示集群范围的设置:
表 4.3. Settings 选项卡上的标签页
标签页 | 描述 |
---|---|
OpenShift Virtualization 版本和更新状态。 | |
实时迁移限制和网络设置。 | |
红帽模板项目。 | |
集群范围的用户权限。 |
4.1.4.1. 常规标签页
General 选项卡显示 OpenShift Virtualization 版本和更新状态。
例 4.5. 常规 标签页
标签 | 描述 |
---|---|
服务名称 | OpenShift Virtualization |
供应商 | Red Hat |
已安装的版本 | 4.12.1 |
更新状态 |
例如: |
Channel | 为更新选择的频道。 |
4.1.4.2. 实时迁移标签页
您可以在实时迁移选项卡中配置实时迁移。
例 4.6. 实时迁移标签页
元素 | 描述 |
---|---|
Max. migration per cluster 字段 | 选择每个集群的最大实时迁移数量。 |
Max. migrations per node 字段 | 选择每个节点的最大实时迁移数量。 |
实时迁移网络列表 | 为实时迁移选择专用的二级网络。 |
4.1.4.3. templates project 标签页
您可以在 Templates project 选项卡中为模板选择一个项目。
例 4.7. templates project 标签页
元素 | 描述 |
---|---|
项目列表 |
选择要在其中存储红帽模板的项目。默认模板项目为 如果要定义多个模板项目,您必须在每个项目的 Templates 页面中克隆模板。 |
4.1.4.4. 用户权限标签页
User permissions 选项卡显示集群范围的用户权限。
例 4.8. 用户权限标签页
元素 | 描述 |
---|---|
用户权限 表 | 任务列表,如共享模板 和权限。 |
4.2. 目录页面
您可以通过在 Catalog 页面中选择一个模板来创建 VirtualMachine。
例 4.9. 目录页面
元素 | 描述 |
---|---|
模板项目列表 | 选择模板所在的项目。
默认情况下,红帽模板存储在 |
All items|Default templates | 点 Default templates 以仅显示默认模板。 |
Boot source available 复选框 | 选中复选框以显示带有可用引导源的模板。 |
操作系统 复选框 | 选中复选框以显示带有所选操作系统的模板。 |
工作负载 复选框 | 选中复选框以显示带有所选工作负载的模板。 |
搜索字段 | 按关键字搜索模板。 |
模板标题 | 点模板标题查看模板详情并创建 VirtualMachine。 |
4.3. VirtualMachines 页面
您可以在 VirtualMachines 页面中创建和管理 VirtualMachines。
例 4.10. VirtualMachines 页面
元素 | 描述 |
---|---|
create → From catalog | 在 Catalog 页面中创建一个 VirtualMachine。 |
Create → With YAML | 通过编辑 YAML 配置文件来创建 VirtualMachine。 |
Filter 字段 | 根据状态、模板、操作系统或节点过滤 VirtualMachines。 |
搜索字段 | 根据名称或标签搜索 VirtualMachines。 |
VirtualMachines 表 | VirtualMachines 列表。
点 VirtualMachine 旁边的 Options 菜单
点 VirtualMachine 进入 VirtualMachine 详情页面。 |
4.3.1. VirtualMachine 详情页面
您可以在 VirtualMachine 详情页面中配置 VirtualMachine。
例 4.11. VirtualMachine 详情页面
元素 | 描述 |
---|---|
操作菜单 | 点 Actions 菜单,选择 Stop, Restart, Pause, Clone, Migrate, Copy SSH command, Edit labels, Edit annotations, 或 Delete。 |
资源使用情况、警报、磁盘和设备。 | |
VirtualMachine 配置。 | |
内存、CPU、存储、网络和迁移指标。 | |
VirtualMachine YAML 配置文件。 | |
调度配置。 | |
配置映射、secret 和服务帐户管理。 | |
VirtualMachine 事件流。 | |
控制台会话管理。 | |
网络接口管理。 | |
磁盘管理。 | |
cloud-init 和 SSH 密钥管理。 | |
快照管理。 |
4.3.1.1. 概述标签
Overview 选项卡显示资源使用情况、警报和配置信息。
例 4.12. 概述标签
元素 | 描述 |
---|---|
"Details" 标题 | 常规 VirtualMachine 信息。 |
"Utilization" 标题 | CPU, Memory, Storage, 和 Network transfer 图。 |
"硬件设备"标题 | GPU 和主机设备。 |
"Alerts" 标题 | OpenShift Virtualization 警报,按严重性分组。 |
"snapshots" 标题 |
进行快照 |
"网络接口"标题 | 网络接口表。 |
"Disks" 标题 | 磁盘表。 |
4.3.1.2. 详情标签页
您可以在 Details 标签页中配置 VirtualMachine。
例 4.13. 详情标签页
元素 | 描述 |
---|---|
YAML 开关 | 设置为 ON,以在 YAML 配置文件中查看您的实时更改。 |
名称 | VirtualMachine 名称。 |
命名空间 | VirtualMachine 命名空间。 |
标签 | 点编辑图标编辑标签。 |
注解 | 点编辑图标编辑注解。 |
描述 | 点编辑图标,以输入描述。 |
操作系统 | 操作系统名称。 |
CPU|内存 | 点编辑图标编辑 CPU|Memory 请求。
CPU 数量通过以下公式来计算: |
机器类型 | VirtualMachine 机器类型。 |
引导模式 | 点编辑图标编辑引导模式。 |
以 pause 模式启动 | 点编辑图标启用此设置。 |
模板 | 用于创建 VirtualMachine 的模板的名称。 |
创建于 | VirtualMachine 创建日期。 |
所有者 | VirtualMachine 所有者。 |
Status | VirtualMachine 状态。 |
Pod |
|
VirtualMachineInstance | VirtualMachineInstance 名称。 |
引导顺序 | 点编辑图标选择引导源。 |
IP 地址 | VirtualMachine 的 IP 地址。 |
主机名 | VirtualMachine 的主机名。 |
时区 | VirtualMachine 的时区。 |
节点 | 运行 VirtualMachine 的节点。 |
Workload 配置集 | 点编辑图标编辑工作负载配置集。 |
使用 virtctl 进行 SSH |
点复制图标将 |
SSH over NodePort |
选择 Create a Service to expose your VirtualMachine for SSH access 生成一个 |
GPU 设备 | 点编辑图标添加 GPU 设备。 |
主机设备 | 点编辑图标添加主机设备。 |
Services 部分 | 查看服务。 |
活跃用户部分 | 查看活跃的用户。 |
4.3.1.3. Metrics 标签页
Metrics 选项卡显示内存、CPU、存储、网络和迁移使用图表。
例 4.14. Metrics 标签页
元素 | 描述 |
---|---|
时间范围列表 | 选择一个时间范围来过滤结果。 |
虚拟化仪表板 | 链接到当前项目的 Workloads 选项卡。 |
使用率部分 | 内存、CPU 和 网络接口图表。 |
存储部分 | Storage total read/write 和 Storage iops total read/write 图。 |
网络部分 | Network in, Network out, 和 Network bandwidth 图。 |
迁移部分 | Migration 和 KV data transfer rate 图。 |
4.3.1.4. YAML 标签页
您可以通过编辑 YAML 选项卡上的 YAML 文件来配置 VirtualMachine。
例 4.15. YAML 标签页
元素 | 描述 |
---|---|
YAML 开关 | 设置为 ON,以在 YAML 配置文件中查看您的实时更改。 |
保存按钮 | 保存对 YAML 文件的更改。 |
重新加载按钮 | 丢弃您的更改并重新载入 YAML 文件。 |
取消 按钮 | 退出 YAML 选项卡。 |
下载 按钮 | 将 YAML 文件下载到您的本地计算机。 |
4.3.1.5. 调度标签
您可以在 Scheduling 选项卡中配置调度。
例 4.16. 调度标签
设置 | 描述 |
---|---|
YAML 开关 | 设置为 ON,以在 YAML 配置文件中查看您的实时更改。 |
节点选择器 | 点编辑图标添加标签来指定合格节点。 |
容限(Tolerations) | 点编辑图标,以添加容限来指定合格节点。 |
关联性规则 | 点编辑图标来添加关联性规则。 |
Descheduler 交换机 | 启用或禁用 descheduler。descheduler 驱除正在运行的 pod,以便可将 pod 重新调度到更合适的节点上。 |
专用资源 | 点编辑图标,选择 Schedule this workload with dedicated resources (guaranteed policy)。 |
驱除策略 | 点编辑图标选择 LiveMigrate 作为 VirtualMachineInstance 驱除策略。 |
4.3.1.6. Environment 标签页
您可以在 Environment 标签页中管理配置映射、secret 和服务帐户。
例 4.17. Environment 标签页
元素 | 描述 |
---|---|
YAML 开关 | 设置为 ON,以在 YAML 配置文件中查看您的实时更改。 |
添加配置映射、Secret 或服务帐户 | 点链接,然后从资源列表中选择配置映射、secret 或服务帐户。 |
4.3.1.7. Events 标签页
Events 选项卡显示 VirtualMachine 事件列表。
4.3.1.8. 控制台标签页
您可以在 Console 选项卡中打开到 VirtualMachine 的控制台会话。
例 4.18. 控制台标签页
元素 | 描述 |
---|---|
客户机登录凭证部分 |
展开 Guest login credentials 以查看使用 |
控制台列表 | 选择 VNC console 或 Serial console。 您可以选择 Desktop viewer 来使用 Remote Desktop Protocol (RDP) 连接到 Windows VirtualMachines。您必须在同一网络的机器上安装 RDP 客户端。 |
send key 列表 | 选择要发送到控制台的键组合。 |
Disconnect 按钮 | 断开控制台连接。 如果您打开新的控制台会话,则必须手动断开控制台连接。否则,第一个控制台会话会在后台继续运行。 |
4.3.1.9. 网络接口选项卡
您可以在 Network interfaces 选项卡上管理网络接口。
例 4.19. 网络接口选项卡
设置 | 描述 |
---|---|
YAML 开关 | 设置为 ON,以在 YAML 配置文件中查看您的实时更改。 |
添加网络接口按钮 | 在 VirtualMachine 中添加网络接口。 |
Filter 字段 | 按接口类型过滤。 |
搜索字段 | 根据名称或标签搜索网络接口。 |
网络接口表 | 网络接口列表。
点网络接口
|
4.3.1.10. Disk 标签页
您可以在 Disks 选项卡上管理磁盘。
例 4.20. Disk 标签页
设置 | 描述 |
---|---|
YAML 开关 | 设置为 ON,以在 YAML 配置文件中查看您的实时更改。 |
添加磁盘按钮 | 在 VirtualMachine 中添加磁盘。 |
Filter 字段 | 按磁盘类型过滤。 |
搜索字段 | 按名称搜索磁盘。 |
磁盘表 | VirtualMachine 磁盘列表。
点磁盘旁边的 Options 菜单
|
文件系统表 | VirtualMachine 文件系统列表。 |
4.3.1.11. Script 标签页
您可以在 Scripts 选项卡中管理 VirtualMachine 的 cloud-init 和 SSH 密钥。
例 4.21. Script 标签页
元素 | 描述 |
---|---|
YAML 开关 | 设置为 ON,以在 YAML 配置文件中查看您的实时更改。 |
Cloud-init | 点编辑图标来编辑 cloud-init 设置。 |
授权 SSH 密钥 | 点 edit 图标创建新 secret 或附加现有 secret。 |
4.3.1.12. 快照选项卡
您可以从 Snapshots 选项卡上的快照中创建快照并恢复 VirtualMachines。
例 4.22. 快照选项卡
元素 | 描述 |
---|---|
创建快照按钮 | 创建快照。 |
Filter 字段 | 根据状态过滤快照。 |
搜索字段 | 根据名称或标签搜索快照。 |
快照表 | 快照列表。
点快照旁的 Options 菜单
|
4.4. 模板页
您可以在 Templates 页中创建、编辑和克隆 VirtualMachine 模板。
您不能编辑红帽模板。您可以克隆红帽模板并编辑它来创建自定义模板。
例 4.23. 模板页
元素 | 描述 |
---|---|
创建模板按钮 | 通过编辑 YAML 配置文件创建模板。 |
Filter 字段 | 根据类型、引导源、模板供应商或操作系统过滤模板。 |
搜索字段 | 根据名称或标签搜索模板。 |
模板表 | 模板列表。
点模板旁边的 Options 菜单
|
4.4.1. 模板详情页面
您可以查看模板设置并在 Template 详情页面中编辑自定义模板。
例 4.24. 模板详情页面
4.4.1.1. 详情标签页
您可以在 Details 标签页中配置自定义模板。
例 4.25. 详情标签页
元素 | 描述 |
---|---|
YAML 开关 | 设置为 ON,以在 YAML 配置文件中查看您的实时更改。 |
名称 | 模板名称。 |
命名空间 | 模板命名空间。 |
标签 | 点编辑图标编辑标签。 |
注解 | 点编辑图标编辑注解。 |
显示名称 | 点编辑图标编辑显示名称。 |
描述 | 点编辑图标,以输入描述。 |
操作系统 | 操作系统名称。 |
CPU|内存 | 点编辑图标编辑 CPU|Memory 请求。
CPU 数量通过以下公式来计算: |
机器类型 | 模板机器类型。 |
引导模式 | 点编辑图标编辑引导模式。 |
基本模板 | 用于创建此模板的基本模板的名称。 |
创建于 | 模板创建日期。 |
所有者 | 模板所有者。 |
引导顺序 | 模板引导顺序。 |
引导源 | 引导源可用性。 |
供应商 | 模板提供程序。 |
支持 | 模板支持级别。 |
GPU 设备 | 点编辑图标添加 GPU 设备。 |
主机设备 | 点编辑图标添加主机设备。 |
4.4.1.2. YAML 标签页
您可以通过编辑 YAML 选项卡上的 YAML 文件来配置 自定义模板。
例 4.26. YAML 标签页
元素 | 描述 |
---|---|
YAML 开关 | 设置为 ON,以在 YAML 配置文件中查看您的实时更改。 |
保存按钮 | 保存对 YAML 文件的更改。 |
重新加载按钮 | 丢弃您的更改并重新载入 YAML 文件。 |
取消 按钮 | 退出 YAML 选项卡。 |
下载 按钮 | 将 YAML 文件下载到您的本地计算机。 |
4.4.1.3. 调度标签
您可以在 Scheduling 选项卡中配置调度。
例 4.27. 调度标签
设置 | 描述 |
---|---|
YAML 开关 | 设置为 ON,以在 YAML 配置文件中查看您的实时更改。 |
节点选择器 | 点编辑图标添加标签来指定合格节点。 |
容限(Tolerations) | 点编辑图标,以添加容限来指定合格节点。 |
关联性规则 | 点编辑图标来添加关联性规则。 |
Descheduler 交换机 | 启用或禁用 descheduler。descheduler 驱除正在运行的 pod,以便可将 pod 重新调度到更合适的节点上。 |
专用资源 | 点编辑图标,选择 Schedule this workload with dedicated resources (guaranteed policy)。 |
驱除策略 | 点编辑图标选择 LiveMigrate 作为 VirtualMachineInstance 驱除策略。 |
4.4.1.4. 网络接口选项卡
您可以在 Network interfaces 选项卡上管理网络接口。
例 4.28. 网络接口选项卡
设置 | 描述 |
---|---|
YAML 开关 | 设置为 ON,以在 YAML 配置文件中查看您的实时更改。 |
添加网络接口按钮 | 向模板添加网络接口。 |
Filter 字段 | 按接口类型过滤。 |
搜索字段 | 根据名称或标签搜索网络接口。 |
网络接口表 | 网络接口列表。
点网络接口
|
4.4.1.5. Disk 标签页
您可以在 Disks 选项卡上管理磁盘。
例 4.29. Disk 标签页
设置 | 描述 |
---|---|
YAML 开关 | 设置为 ON,以在 YAML 配置文件中查看您的实时更改。 |
添加磁盘按钮 | 向模板添加磁盘。 |
Filter 字段 | 按磁盘类型过滤。 |
搜索字段 | 按名称搜索磁盘。 |
磁盘表 | 模板磁盘列表。
点磁盘旁边的 Options 菜单
|
4.4.1.6. Script 标签页
您可以在 Scripts 选项卡上管理 cloud-init 设置、SSH 密钥和 Sysprep 回答文件。
例 4.30. Script 标签页
元素 | 描述 |
---|---|
YAML 开关 | 设置为 ON,以在 YAML 配置文件中查看您的实时更改。 |
Cloud-init | 点编辑图标来编辑 cloud-init 设置。 |
授权 SSH 密钥 | 点 edit 图标创建新 secret 或附加现有 secret。 |
Sysprep |
点编辑图标上传 |
4.4.1.7. 参数标签页
您可以在 Parameters 选项卡中编辑所选模板设置。
例 4.31. 参数标签页
元素 | 描述 |
---|---|
虚拟机名称 | 为生成的值选择 Generated (expression),Value 设置一个默认值,或从 Default value type 列表中选择 None。 |
数据源命名空间 | 为生成的值选择 Generated (expression),Value 设置一个默认值,或从 Default value type 列表中选择 None。 |
云用户密码 | 为生成的值选择 Generated (expression),Value 设置一个默认值,或从 Default value type 列表中选择 None。 |
4.5. 数据源页
您可以在 DataSources 页面中为 VirtualMachine 引导源创建和配置 DataSources。
当您创建 DataSource 时,DataImportCron
资源定义了一个 cron 作业来轮询和导入磁盘镜像,除非您禁用自动引导源更新。
例 4.32. 数据源页
元素 | 描述 |
---|---|
Create DataSource → With form | 通过输入 registry URL、磁盘大小、修订版本数和 cron 表达式来创建 DataSource。 |
Create DataSources → With YAML | 通过编辑 YAML 配置文件创建数据源。 |
Filter 字段 | 根据可用属性(例如 DataImportCron 等)过滤 DataSources。 |
搜索字段 | 根据名称或标签搜索 DataSource。 |
DataSources 表 | 数据源列表。
点 DataSource 旁边的 Options 菜单
|
点 DataSource 查看 DataSource 详情页面。
4.5.1. 数据源详情页面
您可以在 DataSource 详情页面中配置数据源。
例 4.33. 数据源详情页面
元素 | 描述 |
---|---|
详情标签页 | 通过编辑表单来配置数据源。 |
YAML 标签页 | 通过编辑 YAML 配置文件来配置数据源。 |
操作菜单 | 选择 Edit labels、Edit annotations 或 Delete。 |
名称 | 数据源名称. |
命名空间 | 数据源命名空间。 |
标签 | 点编辑图标编辑标签。 |
注解 | 点编辑图标编辑注解。 |
Conditions | 显示 DataSource 的状态条件。 |
4.6. MigrationPolicies 页面
您可以在 MigrationPolicies 页面中为您的工作负载管理 MigrationPolicies。
例 4.34. MigrationPolicies 页面
元素 | 描述 |
---|---|
Create MigrationPolicy → With form | 通过以表单输入配置和标签来创建 MigrationPolicy。 |
Create MigrationPolicy → With YAML | 通过编辑 YAML 配置文件创建 MigrationPolicy。 |
Name | Label 搜索字段 | 根据名称或标签搜索 MigrationPolicy。 |
MigrationPolicies 表 | MigrationPolicies 列表。
点 MigrationPolicy 旁边的 Options 菜单
|
点 MigrationPolicy 查看 MigrationPolicy 详情页面。
4.6.1. MigrationPolicy 详情页面
您可以在 MigrationPolicy 详情页面中配置 MigrationPolicy。
例 4.35. MigrationPolicy 详情页面
元素 | 描述 |
---|---|
详情标签页 | 通过编辑表单来配置 MigrationPolicy。 |
YAML 标签页 | 通过编辑 YAML 配置文件来配置 MigrationPolicy。 |
操作菜单 | 选择 Edit 或 Delete。 |
名称 | MigrationPolicy 名称。 |
描述 | MigrationPolicy 描述。 |
配置 | 点编辑图标更新 MigrationPolicy 配置。 |
每个迁移的带宽 |
每个迁移的带宽请求。对于无限带宽,请将值设为 |
自动聚合 | 自动聚合策略。 |
Post-copy | 后复制策略。 |
完成超时 | 完成超时值(以秒为单位)。 |
项目标签 | 点 Edit 以编辑项目标签。 |
VirtualMachine 标签 | 点 Edit 以编辑 VirtualMachine 标签。 |
第 5 章 OpenShift Virtualization 发行注记
5.1. 使开源包含更多
红帽承诺替换我们的代码、文档和网页属性中存在问题的语言。我们从这四个术语开始: master、slave、blacklist 和 whitelist。这些更改将在即将发行的几个发行本中逐渐实施。有关更多详情,请参阅我们的首席技术官 Chris Wright 提供的消息。
5.2. 关于 Red Hat OpenShift Virtualization
Red Hat OpenShift Virtualization 可让您将传统虚拟机(VM)放入 OpenShift Container Platform 中,与容器一同运行,并作为原生 Kubernetes 对象进行管理。
OpenShift Virtualization 由
图标表示。
OpenShift Virtualization 可以与 OVN-Kubernetes 或 OpenShiftSDN 默认 Container Network Interface(CNI)网络供应商一起使用。
了解更多有关 OpenShift Virtualization 的作用。
了解更多有关 OpenShift Virtualization 架构和部署 的信息。
为 OpenShift Virtualization 准备集群。
5.2.1. OpenShift Virtualization 支持的集群版本
OpenShift Virtualization 4.12 支持在 OpenShift Container Platform 4.12 集群中使用。要使用 OpenShift Virtualization 的最新 z-stream 版本,您必须首先升级到 OpenShift Container Platform 的最新版本。
5.2.2. 支持的客户端操作系统
要查看 OpenShift Virtualization 支持的客户机操作系统,请参阅 Red Hat OpenStack Platform、Red Hat Virtualization 和 OpenShift Virtualization 中认证的客户机操作系统。
5.3. 新增和改变的功能
OpenShift Virtualization 已在 Microsoft 的 Windows Server Virtualization Validation Program (SVVP) 中认证来运行 Windows Server 的工作负载。
SVVP 认证适用于:
- Red Hat Enterprise Linux CoreOS worker。在 Microsoft SVVP Catalog 中,它们名为 Red Hat OpenShift Container Platform 4 on RHEL CoreOS 8。
- Intel 和 AMD CPU。
-
OpenShift Virtualization 不再使用
徽标。OpenShift Virtualization 现在由版本 4.9 及之后的版本的
徽标表示。
-
您可以使用
virtctl memory-dump
命令为诊断分析创建虚拟机内存转储。
-
您可以从一个虚拟机(VM)、VM 快照或持久性卷声明(PVC)中导入并下载一个卷,已在一个不同的集群中或同一集群的不同命名空间中重新创建它,使用
virtctl vmexport
命令或通过创建一个VirtualMachineExport
自定义资源。您还可以导出 memory-dump 以进行诊断分析。
- 您可以参考 Web 控制台概述文档来了解 OpenShift Virtualization Web 控制台的功能和机构。
-
您可以使用
virtctl ssh
命令将 SSH 流量转发到一个虚拟集群。方法是使用您的本地 SSH 客户端或复制 SSH 命令(来自 OpenShift Container Platform web 控制台)。
-
使用
dataVolumeTemplate
为虚拟机准备磁盘时创建的独立数据卷不再存储在系统中。现在,在 PVC 创建后,数据卷会自动收集和删除。
- OpenShift Virtualization 现在提供 实时迁移指标,您可以使用 OpenShift Container Platform 监控仪表板访问。
-
OpenShift Virtualization Operator 现在从
APIServer
自定义资源读取集群范围的 TLS 安全配置集,并将其传播到 OpenShift Virtualization 组件,包括虚拟化、存储、网络和基础架构。
- OpenShift Virtualization 的 runbooks 可帮助您排除触发警报的问题。该警报显示在 web 控制台的 Virtualization → Overview 页面中。每个 runbook 都定义了警报,并提供诊断和解决问题的步骤。此功能以前作为技术预览引进,现已正式发布。
5.3.1. 快速启动
-
有几个 OpenShift Virtualization 功能提供快速入门导览。要查看导览,请点击 OpenShift Virtualization 控制台标题菜单栏中的 Help 图标 ?,然后选择 Quick Starts。您可以通过在 Filter 字段中输入
virtualization
关键字来过滤可用的导览。
5.3.2. 网络
- 现在,您可以在第 2 层模式中使用 MetalLB Operator 配置负载均衡服务。
5.3.3. Web 控制台
Virtualization → Overview 页面有以下可用性增强:
- 提供了 Download virtctl 链接。
- 资源信息是为管理和非管理员用户自定义的资源。例如,非管理员用户只能看到自己的虚拟机。
- Overview 选项卡显示虚拟机数量,以及 vCPU、内存和存储使用量,其中图表显示最后 7 天的趋势。
- Overview 选项卡中的 Alerts 卡显示按严重性分组的警报。
- Top Consumers 选项卡显示 CPU、内存和存储使用量在可配置的时间段内的主要消费者。
- Migrations 选项卡显示虚拟机迁移的进度。
- Settings 选项卡显示集群范围的设置,包括实时迁移限制、实时迁移网络和模板项目。
- 您可以在 Virtualization → MigrationPolicies 页面的一个位置创建和管理实时迁移策略。
- VirtualMachine 详情页中的 Metrics 标签页会在可配置的时间段内显示虚拟机的内存、CPU、存储、网络和迁移指标。
- 当您自定义模板以创建虚拟机时,您可以在每个虚拟机配置选项卡上将 YAML 开关设置为 ON,以查看 YAML 配置文件中的实时更改以及表单。
- Virtualization → Overview 页面中的 Migrations 选项卡在可配置的时间段内显示虚拟机实例迁移的进度。
- 现在,您可以为实时迁移定义专用网络,以最大程度降低租户工作负载的中断。要选择网络,进入到 Virtualization → Overview → Settings → Live migration。
5.3.4. 已弃用的功能
弃用的功能包括在当前发行版本中并被支持。但是,它们将在以后的发行版本中删除,且不建议用于新部署。
- 在以后的发行版本中,对旧的 HPP 自定义资源的支持以及关联的存储类将被弃用。从 OpenShift Virtualization 4.12 开始,HPP Operator 使用 Kubernetes Container Storage Interface(CSI)驱动程序来配置本地存储。Operator 继续支持 HPP 自定义资源及关联的存储类的现有(传统)格式。如果使用 HPP Operator,请计划作为迁移策略的一部分为 CSI 驱动程序创建存储类。
5.3.5. 删除的功能
当前版本不支持删除的功能。
OpenShift Virtualization 4.11 删除了对 nmstate 的支持,包括以下对象:
-
NodeNetworkState
-
NodeNetworkConfigurationPolicy
-
NodeNetworkConfigurationEnactment
要保留并支持您现有的 nmstate 配置,请在升级到 OpenShift Virtualization 4.11 前安装 Kubernetes NMState Operator。对于 延长更新支持(EUS) 版本的 4.12,请在升级到 4.12 后安装 Kubernetes NMState Operator。您可以从 OpenShift Container Platform Web 控制台中的 OperatorHub 或 OpenShift CLI (
oc
) 安装 Operator。-
OpenShift Virtualization 不再提供 Node Maintenance Operator (NMO)。您可以从 OpenShift Container Platform Web 控制台中的 OperatorHub 或 OpenShift CLI (
oc
) 安装 NMO。在从 OpenShift Virtualization 4.10.2 及更新的 4.10 版本升级到 OpenShift Virtualization 4.11 前,您必须执行以下任务之一:对于 延长更新支持(EUS) 版本,在从 4.10.2 及更新的 4.10 版本升级到 OpenShift Virtualization 4.12 前需要执行以下任务:
- 将所有节点从维护模式移出。
-
安装独立 NMO,将
nodemaintenances.nodemaintenance.kubevirt.io
自定义资源 (CR) 替换为nodemaintenances.nodemaintenance.medik8s.io
CR。
5.4. 技术预览功能
这个版本中的一些功能当前还处于技术预览状态。它们并不适用于在生产环境中使用。请参阅红帽门户网站中关于对技术预览功能支持范围的信息:
- 现在,您可以运行 OpenShift Container Platform 集群检查 来测量虚拟机之间的网络延迟。
Tekton Tasks Operator (TTO) 现在将 OpenShift Virtualization 与 Red Hat OpenShift Pipelines 集成。TTO 包含集群任务和示例管道,允许您:
- 创建和管理虚拟机 (VM)、持久性卷声明 (PVC) 和数据卷。
- 在虚拟机中运行命令。
-
使用
libguestfs
工具操作磁盘镜像。 - 从 Windows 安装镜像 (ISO 文件) 将 Windows 10 安装到新数据卷中。
- 自定义基本的 Windows 10 安装,然后创建新的镜像和模板。
- 现在,您可以使用客户机代理 ping 探测来确定 QEMU 客户机代理是否在虚拟机上运行。
- 现在,您可以使用 Microsoft Windows 11 作为客户机操作系统。但是,OpenShift Virtualization 4.12 不支持 USB 磁盘,它们是 BitLocker 恢复的关键功能所必需的。要保护恢复密钥,请使用 BitLocker 恢复指南中的其他方法。
- 您可以使用特定参数创建实时迁移策略,如带宽使用量、并行迁移数和超时,并使用虚拟机和命名空间标签将策略应用到一组虚拟机。
5.5. 程序错误修复
-
现在,您可以将
HyperConverged
CR 配置为在安装驱动程序前启用介质设备,而不会在安装后丢失新设备配置。(BZ#2046298) -
如果您创建大量
NodePort
服务,OVN-Kubernetes 集群网络供应商不再从峰值 RAM 和 CPU 使用量崩溃。(OCPBUGS-1940) - 如果您使用 Red Hat Ceph Storage 或 Red Hat OpenShift Data Foundation Storage,则一次克隆超过 100 个虚拟机不再间歇性失败。(BZ#1989527)
5.6. 已知问题
- 在具有不同计算节点的异构集群中,启用了 HyperV Reenlightenment 的虚拟机无法调度到不支持时间戳扩展 (TSC) 或具有适当 TSC 频率的节点。(BZ#2151169)
当您使用具有不同 SELinux 上下文的两个 pod 时,带有
ocs-storagecluster-cephfs
存储类的虚拟机无法迁移,虚拟机状态变为Paused
。这是因为两个 pod 会尝试同时访问共享ReadWriteMany
CephFS 卷。(BZ#2092271)-
作为临时解决方案,使用
ocs-storagecluster-ceph-rbd
存储类在使用 Red Hat Ceph Storage 的集群上实时迁移虚拟机。
-
作为临时解决方案,使用
OpenShift Virtualization 4.12 中更改了
TopoLVM
置备程序名称字符串。因此,自动导入操作系统镜像可能会失败,并显示以下错误消息(BZ39) 2158521):DataVolume.storage spec is missing accessMode and volumeMode, cannot get access mode from StorageProfile.
作为临时解决方案:
更新存储配置文件的
claimPropertySets
数组:$ oc patch storageprofile <storage_profile> --type=merge -p '{"spec": {"claimPropertySets": [{"accessModes": ["ReadWriteOnce"], "volumeMode": "Block"}, \ {"accessModes": ["ReadWriteOnce"], "volumeMode": "Filesystem"}]}}'
-
删除
openshift-virtualization-os-images
命名空间中的受影响的数据卷。它们通过更新的存储配置集的访问模式和卷模式重新创建。
当为绑定模式为
WaitForFirstConsumer
的存储恢复虚拟机快照时,恢复的 PVC 会处于Pending
状态,恢复操作不会进行。-
作为临时解决方案,启动恢复的虚拟机,停止它,然后再次启动它。将调度虚拟机,PVC 将处于
Bound
状态,恢复操作将完成。(BZ#2149654)
-
作为临时解决方案,启动恢复的虚拟机,停止它,然后再次启动它。将调度虚拟机,PVC 将处于
-
从单一节点 OpenShift (SNO) 集群上的通用模板创建的虚拟机会显示一个
VMCannotBeEvicted
警报,因为模板的默认驱除策略是LiveMigrate
。您可以通过更新虚拟机的驱除策略来忽略此警报或删除警报。(BZ#2092412) -
卸载 OpenShift Virtualization 不会删除 OpenShift Virtualization 创建的
feature.node.kubevirt.io
节点标签。您必须手动删除标签。(CNV-22036) Containerized Data Importer (CDI) 创建的一些持久性卷声明 (PVC) 注解可能会导致虚拟机快照恢复操作无限期挂起。(BZ#2070366)
作为临时解决方案,您可以手动删除注解:
-
从
VirtualMachineSnapshot
CR 中的status.virtualMachineSnapshotContentName
值获取 VirtualMachineSnapshotContent 自定义资源 (CR) 名称。 -
编辑
VirtualMachineSnapshotContent
CR,并删除包含k8s.io/cloneRequest
的所有行。 如果您没有在
VirtualMachine
对象中为spec.dataVolumeTemplates
指定值,请删除此命名空间中的所有DataVolume
和PersistentVolumeClaim
对象,其中这两个对象都满足以下条件:-
对象的名称以
restore-
开头。 不被虚拟机引用的对象。
如果为
spec.dataVolumeTemplates
指定了值,则此步骤是可选的。
-
对象的名称以
-
使用更新的
VirtualMachineSnapshot
CR 重复恢复操作。
-
从
-
Windows 11 虚拟机不会在以 FIPS 模式运行的集群上引导。Windows 11 默认需要一个 TPM (可信平台模块)设备。但是,
swtpm
(软件 TPM 模拟器)软件包与 FIPS 不兼容。(BZ#2089301)
如果您的 OpenShift Container Platform 集群使用 OVN-Kubernetes 作为默认 Container Network Interface(CNI)供应商,则无法将 Linux 网桥或绑定设备附加到主机的默认接口,因为 OVN-Kubernetes 的主机网络拓扑发生了变化。(BZ#1885605)
- 作为临时解决方案,您可以使用连接到主机的二级网络接口,或切换到 OpenShift SDN 默认 CNI 供应商。
在某些情况下,多个虚拟机可以以读写模式挂载相同的 PVC,这可能会导致数据崩溃。(BZ#1992753)
- 作为临时解决方案,请避免在使用多个虚拟机的读写模式中使用单个 PVC。
Pod Disruption Budget(PDB)可防止 pod 意外中断。如果 PDB 检测到 pod 中断,则
openshift-monitoring
会每 60 分钟发送PodDisruptionBudgetAtLimit
警报,以使用LiveMigrate
驱除策略。(BZ#2026733)- 作为临时解决方案,静默警报。
OpenShift Virtualization 将 pod 使用的服务帐户令牌链接到该特定 pod。OpenShift Virtualization 通过创建包含令牌的磁盘镜像来实施服务帐户卷。如果您迁移虚拟机,则服务帐户卷无效。(BZ#2037611)
- 作为临时解决方案,使用用户帐户而不是服务帐户,因为用户帐户令牌没有绑定到特定 pod。
如果您使用
csi-clone
克隆策略克隆超过 100 个虚拟机,则 Ceph CSI 可能无法清除克隆。手动删除克隆也会失败。(BZ#2055595)-
作为临时解决方案,您可以重启
ceph-mgr
来清除虚拟机克隆。
-
作为临时解决方案,您可以重启
第 6 章 安装
6.1. 为 OpenShift Virtualization 准备集群
在安装 OpenShift Virtualization 前,参阅这个部分以确保集群满足要求。
您可以使用任何安装方法(包括用户置备的、安装程序置备或辅助安装程序)来部署 OpenShift Container Platform。但是,安装方法和集群拓扑可能会影响 OpenShift Virtualization 功能,如快照或实时迁移。
FIPS 模式
如果使用 FIPS 模式安装集群,则 OpenShift Virtualization 不需要额外的设置。
6.1.1. 硬件和操作系统要求
查看 OpenShift Virtualization 的以下硬件和操作系统要求。
支持的平台
- 内部裸机服务器
- Amazon Web Services 裸机实例。详情请参阅在 AWS 裸机节点上部署 OpenShift Virtualization。
- IBM Cloud 裸机服务器。详情请参阅在 IBM Cloud Bare Metal 节点上部署 OpenShift Virtualization。
在 AWS 裸机实例或 IBM Cloud Bare Metal 服务器上安装 OpenShift Virtualization 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
- 不支持由其他云供应商提供的裸机实例或服务器。
CPU 要求
- Red Hat Enterprise Linux(RHEL)8 支持
- 支持 Intel 64 或 AMD64 CPU 扩展
- 启用 Intel VT 或 AMD-V 硬件虚拟化扩展
- 启用 NX(无执行)标记
存储要求
- OpenShift Container Platform 支持
操作系统要求
在 worker 节点上安装的 Red Hat Enterprise Linux CoreOS(RHCOS)
注意不支持 RHEL worker 节点。
- 如果您的集群使用具有不同 CPU 的 worker 节点,则可能会出现实时迁移失败,因为不同的 CPU 具有不同的容量。为了避免这种故障,请为每个节点使用适当的容量,并在虚拟机上设置节点关联性以确保迁移成功。如需更多信息,请参阅配置所需的节点关联性规则。
6.1.2. 物理资源开销要求
OpenShift Virtualization 是 OpenShift Container Platform 的一个附加组件,它会带来额外的开销。除了 OpenShift Container Platform 要求外,每个集群机器都必须满足以下开销要求。覆盖集群中的物理资源可能会影响性能。
本文档中给出的数字基于红帽的测试方法和设置。这些数字会根据您自己的设置和环境而有所不同。
6.1.2.1. 内存开销
使用以下因素计算 OpenShift Virtualization 的内存开销值。
集群内存开销
Memory overhead per infrastructure node ≈ 150 MiB
Memory overhead per worker node ≈ 360 MiB
另外,OpenShift Virtualization 环境资源需要总计 2179 MiB 的内存,分布到所有基础架构节点。
虚拟机内存开销
Memory overhead per virtual machine ≈ (1.002 * requested memory) + 146 MiB \ + 8 MiB * (number of vCPUs) \ 1 + 16 MiB * (number of graphics devices) 2
如果您的环境包含单一根 I/O 虚拟化(SR-IOV)网络设备或图形处理单元(GPU),请为每个设备分配 1 GiB 额外的内存开销。
6.1.2.2. CPU 开销
使用以下内容计算 OpenShift Virtualization 的集群处理器开销要求。每个虚拟机的 CPU 开销取决于您的单独设置。
集群 CPU 开销
CPU overhead for infrastructure nodes ≈ 4 cores
OpenShift Virtualization 增加集群级别服务的整体使用,如日志记录、路由和监控。要考虑这个工作负载,请确保托管基础架构组件的节点分配了用于不同节点的 4 个额外内核(4000 毫秒)的容量。
CPU overhead for worker nodes ≈ 2 cores + CPU overhead per virtual machine
除了虚拟机工作负载所需的 CPU 外,每个托管虚拟机的 worker 节点都必须有 2 个额外内核(2000 毫秒)用于 OpenShift Virtualization 管理工作负载。
虚拟机 CPU 开销
如果请求专用 CPU,则会对集群 CPU 开销要求有 1:1 影响。否则,没有有关虚拟机所需 CPU 数量的具体规则。
6.1.2.3. 存储开销
使用以下指南来估算 OpenShift Virtualization 环境的存储开销要求。
集群存储开销
Aggregated storage overhead per node ≈ 10 GiB
10 GiB 在安装 OpenShift Virtualization 时,集群中每个节点的磁盘存储影响估计值。
虚拟机存储开销
每个虚拟机的存储开销取决于虚拟机内的具体资源分配请求。该请求可能用于集群中其他位置托管的节点或存储资源的临时存储。OpenShift Virtualization 目前不会为正在运行的容器本身分配任何额外的临时存储。
6.1.2.4. 示例
作为集群管理员,如果您计划托管集群中的 10 个虚拟机,每个虚拟机都有 1 GiB RAM 和 2 个 vCPU,集群中的内存影响为 11.68 GiB。集群中每个节点的磁盘存储影响估算为 10 GiB,托管虚拟机工作负载的 worker 节点的 CPU 影响最小 2 个内核。
6.1.3. 对象最大值
在规划集群时,您必须考虑以下测试的对象最大值:
6.1.4. 受限网络环境
如果在没有互联网连接的受限环境中安装 OpenShift Virtualization,您必须为受限网络配置 Operator Lifecycle Manager。
如果您拥有有限的互联网连接,您可以在 Operator Lifecycle Manager 中配置代理支持 以访问红帽提供的 OperatorHub。
6.1.5. 实时迁移
实时迁移有以下要求:
-
使用
ReadWriteMany
(RWX)访问模式的共享存储. - 足够的 RAM 和网络带宽。
- 如果虚拟机使用主机型号 CPU,则节点必须支持虚拟机的主机型号 CPU。
6.1.6. 快照和克隆
有关快照和克隆要求,请参阅 OpenShift Virtualization 存储功能。
6.1.7. 集群高可用性选项
您可以为集群配置以下高可用性(HA)选项之一:
通过部署机器健康检查,可以使用安装程序置备的基础架构 (IPI)自动高可用性。
注意在使用安装程序置备的基础架构安装并正确配置 MachineHealthCheck 的 OpenShift Container Platform 集群中,如果节点上的 MachineHealthCheck 失败且对集群不可用,则该节点可以被回收使用。在故障节点上运行的虚拟机之后会发生什么,这取决于一系列条件。如需了解更多有关潜在结果以及 RunStrategies 如何影响这些结果的信息,请参阅虚拟机的 RunStrategies。
通过在 OpenShift Container Platform 集群上使用 Node Health Check Operator 来部署
NodeHealthCheck
控制器,可以使用 IPI 和非 IPI 自动高可用性。控制器标识不健康的节点,并使用 Self Node Remediation Operator 来修复不健康的节点。重要Node Health Check Operator 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
任何平台的高可用性可通过使用监控系统或合格的人类监控节点可用性来实现。当节点丢失时,关闭并运行
oc delete node <lost_node>
。注意如果没有外部监控系统或合格的人类监控节点运行状况,虚拟机就失去高可用性。
6.2. 为 OpenShift Virtualization 组件指定节点
通过配置节点放置规则来指定要部署 OpenShift Virtualization Operator、工作负载和控制器的节点。
您可以在安装 OpenShift Virtualization 后为一些组件配置节点放置,但如果要为工作负载配置节点放置,则一定不能存在虚拟机。
6.2.1. 关于虚拟化组件的节点放置
您可能想要自定义 OpenShift Virtualization 在什么位置部署其组件,以确保:
- 虚拟机仅部署到设计为用于虚拟化工作负载的节点上。
- Operator 仅在基础架构节点上部署。
- 某些节点不会受到 OpenShift Virtualization 的影响。例如,您有与集群中运行的虚拟化不相关的工作负载,希望这些工作负载与 OpenShift Virtualization 分离。
6.2.1.1. 如何将节点放置规则应用到虚拟化组件
您可以通过直接编辑对应对象或使用 Web 控制台为组件指定节点放置规则。
-
对于 Operator Lifecycle Manager(OLM)部署的 OpenShift Virtualization Operator,直接编辑 OLM
Subscription
对象。目前,您无法使用 Web 控制台为Subscription
对象配置节点放置规则。 -
对于 OpenShift Virtualization Operator 部署的组件,直接编辑
HyperConverged
对象,或在 OpenShift Virtualization 安装过程中使用 Web 控制台进行配置。 对于 hostpath 置备程序,直接编辑
HostPathProvisioner
对象,或使用 web 控制台进行配置。警告您必须将 hostpath 置备程序和虚拟化组件调度到同一节点上。否则,使用 hostpath 置备程序的虚拟化 pod 无法运行。
根据对象,您可以使用以下一个或多个规则类型:
nodeSelector
- 允许将 Pod 调度到使用您在此字段中指定的键值对标记的节点上。节点必须具有与所有列出的对完全匹配的标签。
关联性
- 可让您使用更宽松的语法来设置与 pod 匹配的规则。关联性也允许在规则应用方面更加精细。例如,您可以指定规则是首选项,而不是硬要求,因此如果不满足该规则,仍可以调度 pod。
容限(tolerations)
- 允许将 pod 调度到具有匹配污点的节点。如果某个节点有污点(taint),则该节点只接受容许该污点的 pod。
6.2.1.2. 放置在 OLM 订阅对象中的节点
要指定 OLM 部署 OpenShift Virtualization Operator 的节点,在 OpenShift Virtualization 安装过程中编辑 Subscription
对象。您可以在 spec.config
字段中包含节点放置规则,如下例所示:
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: hco-operatorhub
namespace: openshift-cnv
spec:
source: redhat-operators
sourceNamespace: openshift-marketplace
name: kubevirt-hyperconverged
startingCSV: kubevirt-hyperconverged-operator.v4.12.1
channel: "stable"
config: 1
- 1
config
字段支持nodeSelector
和tolerations
,但它不支持关联性
。
6.2.1.3. HyperConverged 对象中的节点放置
要指定 OpenShift Virtualization 部署其组件的节点,您可以在 OpenShift Virtualization 安装过程中创建的 HyperConverged Cluster 自定义资源(CR)文件中包含 nodePlacement
对象。您可以在 spec.infra
和 spec.workloads
字段中包含 nodePlacement
,如下例所示:
apiVersion: hco.kubevirt.io/v1beta1
kind: HyperConverged
metadata:
name: kubevirt-hyperconverged
namespace: openshift-cnv
spec:
infra:
nodePlacement: 1
...
workloads:
nodePlacement:
...
- 1
nodePlacement
字段支持nodeSelector
、affinity
和tolerations
字段。
6.2.1.4. HostPathProvisioner 对象中的节点放置
您可以在安装 hostpath 置备程序时创建的 HostPathProvisioner
对象的 spec.workload
字段中配置节点放置规则。
apiVersion: hostpathprovisioner.kubevirt.io/v1beta1
kind: HostPathProvisioner
metadata:
name: hostpath-provisioner
spec:
imagePullPolicy: IfNotPresent
pathConfig:
path: "</path/to/backing/directory>"
useNamingPrefix: false
workload: 1
- 1
workload
字段支持nodeSelector
、affinity
和tolerations
字段。
6.2.1.5. 其他资源
6.2.2. 清单示例
以下示例 YAML 文件使用 nodePlacement
、affinity(关联性)
和 tolerations(容限)
对象为 OpenShift Virtualization 组件自定义节点放置。
6.2.2.1. Operator Lifecycle Manager Subscription 对象
6.2.2.1.1. 示例:在 OLM 订阅对象中使用 nodeSelector 的节点放置
在本例中,配置了 nodeSelector
,OLM 将 OpenShift Virtualization Operator 放置到标记为 example.io/example-infra-key = example-infra-value
的节点上。
apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: hco-operatorhub namespace: openshift-cnv spec: source: redhat-operators sourceNamespace: openshift-marketplace name: kubevirt-hyperconverged startingCSV: kubevirt-hyperconverged-operator.v4.12.1 channel: "stable" config: nodeSelector: example.io/example-infra-key: example-infra-value
6.2.2.1.2. 示例:将容限放置在 OLM 订阅对象中
在本例中,为 OLM 部署 OpenShift Virtualization Operator 保留的节点使用 key=virtualization:NoSchedule
污点标记。只有具有与容限匹配的 pod 才会调度到这些节点。
apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: hco-operatorhub namespace: openshift-cnv spec: source: redhat-operators sourceNamespace: openshift-marketplace name: kubevirt-hyperconverged startingCSV: kubevirt-hyperconverged-operator.v4.12.1 channel: "stable" config: tolerations: - key: "key" operator: "Equal" value: "virtualization" effect: "NoSchedule"
6.2.2.2. HyperConverged 对象
6.2.2.2.1. 示例: 在 HyperConverged Cluster CR 中使用 nodeSelector 进行节点放置
在本例中,配置了 nodeSelector
,将基础架构资源放置在带有 example.io/example-infra-key = example-infra-value = example-infra-value
的节点上,把工作负载放置在带有 example.io/example-workloads-key = example-workloads-value
的节点上。
apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: infra: nodePlacement: nodeSelector: example.io/example-infra-key: example-infra-value workloads: nodePlacement: nodeSelector: example.io/example-workloads-key: example-workloads-value
6.2.2.2.2. 示例:在 HyperConverged Cluster CR 中使用关联性进行节点放置
在本例中,配置了 affinity
,将基础架构资源放置在带有 example.io/example-infra-key = example-value
的节点上,把工作负载放置在带有 example.io/example-workloads-key = example-workloads-value
的节点上。对于工作负载,最好使用八个以上 CPU 的节点,但如果它们不可用,仍可调度 pod。
apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: infra: nodePlacement: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: example.io/example-infra-key operator: In values: - example-infra-value workloads: nodePlacement: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: example.io/example-workloads-key operator: In values: - example-workloads-value preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 preference: matchExpressions: - key: example.io/num-cpus operator: Gt values: - 8
6.2.2.2.3. 示例:在 HyperConverged Cluster CR 中使用容限进行节点放置
在本例中,为 OpenShift Virtualization 组件保留的节点使用 key=virtualization:NoSchedule
污点标记。只有具有与容限匹配的 pod 才会调度到这些节点。
apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: workloads: nodePlacement: tolerations: - key: "key" operator: "Equal" value: "virtualization" effect: "NoSchedule"
6.2.2.3. HostPathProvisioner 对象
6.2.2.3.1. 示例: HostPathProvisioner 对象中的 nodeSelector 的节点放置
在本例中,配置了 nodeSelector
,以便将工作负载放置到带有 example.io/example-workloads-key = example-workloads-value
的节点上。
apiVersion: hostpathprovisioner.kubevirt.io/v1beta1 kind: HostPathProvisioner metadata: name: hostpath-provisioner spec: imagePullPolicy: IfNotPresent pathConfig: path: "</path/to/backing/directory>" useNamingPrefix: false workload: nodeSelector: example.io/example-workloads-key: example-workloads-value
6.3. 使用 Web 控制台卸载 OpenShift Virtualization
安装 OpenShift Virtualization 以便在 OpenShift Container Platform 集群中添加虚拟化功能。
您可以使用 OpenShift Container Platform 4.12 web 控制台来订阅和部署 OpenShift Virtualization Operator。
6.3.1. 安装 OpenShift Virtualization Operator
您可以从 OpenShift Container Platform Web 控制台安装 OpenShift Virtualization Operator。
先决条件
- 在集群上安装 OpenShift Container Platform 4.12。
-
以具有
cluster-admin
权限的用户身份登录到 OpenShift Container Platform web 控制台。
流程
- 从 Administrator 视角中,点 Operators → OperatorHub。
- 在 Filter by keyword 字段中输入 OpenShift Virtualization。
- 选择 OpenShift Virtualization 标题。
- 阅读 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。
6.3.2. 后续步骤
您可能还需要额外配置以下组件:
- hostpath 置备程序是设计用于 OpenShift Virtualization 的本地存储置备程序。如果要为虚拟机配置本地存储,您必须首先启用 hostpath 置备程序。
6.4. 使用 CLI 安装 OpenShift Virtualization
安装 OpenShift Virtualization 以便在 OpenShift Container Platform 集群中添加虚拟化功能。您可以使用命令行将清单应用到集群,以订阅和部署 OpenShift Virtualization Operator。
要指定 OpenShift Virtualization 安装其组件的节点,请配置节点放置规则。
6.4.1. 先决条件
- 在集群上安装 OpenShift Container Platform 4.12。
-
安装 OpenShift CLI (
oc
) 。 -
以具有
cluster-admin
特权的用户身份登录。
6.4.2. 使用 CLI 订阅 OpenShift virtualization 目录
在安装 OpenShift Virtualization 前,需要订阅到 OpenShift Virtualization catalog。订阅会授予 OpenShift virtualization Operator 对 openshift-cnv
命名空间的访问权限。
为了订阅,在您的集群中应用一个单独的清单(manifest)来配置 Namespace
、OperatorGroup
和 Subscription
对象。
流程
创建一个包含以下清单的 YAML 文件:
apiVersion: v1 kind: Namespace metadata: name: openshift-cnv --- apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: kubevirt-hyperconverged-group namespace: openshift-cnv spec: targetNamespaces: - openshift-cnv --- apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: hco-operatorhub namespace: openshift-cnv spec: source: redhat-operators sourceNamespace: openshift-marketplace name: kubevirt-hyperconverged startingCSV: kubevirt-hyperconverged-operator.v4.12.1 channel: "stable" 1
- 1
- 使用
stable
频道可确保您安装与 OpenShift Container Platform 版本兼容的 OpenShift Virtualization 版本。
运行以下命令,为 OpenShift Virtualization 创建所需的
Namespace
、OperatorGroup
和Subscription
对象:$ oc apply -f <file name>.yaml
您可以在 YAML 文件中配置证书轮转参数。
6.4.3. 使用 CLI 部署 OpenShift Virtualization Operator
您可以使用 oc
CLI 部署 OpenShift Virtualization Operator。
先决条件
-
在
openshift-cnv
命名空间中的一个有效的 OpenShift virtualization 目录订阅。
流程
创建一个包含以下清单的 YAML 文件:
apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec:
运行以下命令来部署 OpenShift Virtualization Operator:
$ oc apply -f <file_name>.yaml
验证
通过观察
openshift-cnv
命名空间中集群服务版本(CSV)的PHASE
来确保 OpenShift Virtualization 已被成功部署。运行以下命令:$ watch oc get csv -n openshift-cnv
如果部署成功,则会显示以下输出:
输出示例
NAME DISPLAY VERSION REPLACES PHASE kubevirt-hyperconverged-operator.v4.12.1 OpenShift Virtualization 4.12.1 Succeeded
6.4.4. 后续步骤
您可能还需要额外配置以下组件:
- hostpath 置备程序是设计用于 OpenShift Virtualization 的本地存储置备程序。如果要为虚拟机配置本地存储,您必须首先启用 hostpath 置备程序。
6.5. 安装 virtctl 客户端
virtctl
客户端是用于管理 OpenShift Virtualization 资源的命令行实用程序。它可用于 Linux、Windows 和 macOS。
6.5.1. 在 Linux、Windows 和 macOS 上安装 virtctl 客户端
为您的操作系统下载并安装 virtctl
客户端。
流程
- 在 OpenShift Container Platform web 控制台中进入到 Virtualization > Overview。
-
点页面右上角的 Download virtctl 链接,并为您的操作系统下载
virtctl
客户端。 安装
virtctl
:Linux:
解压缩存档文件:
$ tar -xvf <virtctl-version-distribution.arch>.tar.gz
运行以下命令使
virtctl
二进制可执行文件:$ chmod +x <path/virtctl-file-name>
将
virtctl
二进制文件移到PATH
环境变量中的目录中。您可以运行以下命令来检查您的路径:
$ echo $PATH
设置
KUBECONFIG
环境变量:$ export KUBECONFIG=/home/<user>/clusters/current/auth/kubeconfig
对于 Windows:
- 解压缩存档文件。
-
进入解压的目录中,双击
virtctl
可执行文件来安装客户端。 将
virtctl
二进制文件移到PATH
环境变量中的目录中。您可以运行以下命令来检查您的路径:
C:\> path
macOS:
- 解压缩存档文件。
将
virtctl
二进制文件移到PATH
环境变量中的目录中。您可以运行以下命令来检查您的路径:
echo $PATH
6.5.2. 将 virtctl 安装为 RPM
在启用 OpenShift Virtualization 仓库后,您可以在 Red Hat Enterprise Linux (RHEL) 上作为 RPM 安装 virtctl
客户端。
6.5.2.1. 启用 OpenShift Virtualization 仓库
为您的 Red Hat Enterprise Linux(RHEL)版本启用 OpenShift Virtualization 仓库。
先决条件
- 您的系统注册到具有有效订阅的"Red Hat Container Native Virtualization"权利。
流程
使用
subscription-manager
CLI 工具为您的操作系统启用适当的 OpenShift Virtualization 仓库。要为 RHEL 8 启用存储库,请运行:
# subscription-manager repos --enable cnv-4.12-for-rhel-8-x86_64-rpms
要为 RHEL 7 启用存储库,请运行:
# subscription-manager repos --enable rhel-7-server-cnv-4.12-rpms
6.5.2.2. 使用 yum 工具安装 virtctl 客户端
从 kubevirt-virtctl
软件包安装 virtctl
客户端。
先决条件
- 您可以在 Red Hat Enterprise Linux(RHEL)系统中启用了 OpenShift virtualization 仓库。
流程
安装
kubevirt-virtctl
软件包:# yum install kubevirt-virtctl
6.5.3. 其他资源
- 使用 CLI 工具用于 OpenShift Virtualization。
6.6. 卸载 OpenShift Virtualization
您可以使用 Web 控制台或命令行界面 (CLI) 卸载 OpenShift Virtualization,以删除 OpenShift Virtualization 工作负载、Operator 及其资源。
6.6.1. 使用 Web 控制台卸载 OpenShift Virtualization
您可以使用 Web 控制台卸载 OpenShift Virtualization 来执行以下任务:
6.6.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。
6.6.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。
6.6.1.3. 使用 web 控制台删除命令空间
您可以使用 OpenShift Container Platform web 控制台删除一个命名空间。
先决条件
-
可以使用具有
cluster-admin
权限的账户访问 OpenShift Container Platform 集群。
流程
- 导航至 Administration → Namespaces。
- 在命名空间列表中找到您要删除的命名空间。
-
在命名空间列表的右侧,从 Options 菜单
中选择 Delete Namespace。
- 当 Delete Namespace 页打开时,在相关项中输入您要删除的命名空间的名称。
- 单击 Delete。
6.6.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。
6.6.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
删除 OpenShift Virtualization Operator 订阅:
$ oc delete subscription kubevirt-hyperconverged -n openshift-cnv
删除 OpenShift Virtualization
ClusterServiceVersion
资源:$ oc delete csv -n openshift-cnv -l operators.coreos.com/kubevirt-hyperconverged.openshift-cnv
使用
dry-run
选项运行oc delete crd
命令列出 OpenShift Virtualization 自定义资源定义 (CRD):$ oc delete crd --dry-run=client -l operators.coreos.com/kubevirt-hyperconverged.openshift-cnv
输出示例
customresourcedefinition.apiextensions.k8s.io "cdis.cdi.kubevirt.io" deleted (dry run) customresourcedefinition.apiextensions.k8s.io "hostpathprovisioners.hostpathprovisioner.kubevirt.io" deleted (dry run) customresourcedefinition.apiextensions.k8s.io "hyperconvergeds.hco.kubevirt.io" deleted (dry run) customresourcedefinition.apiextensions.k8s.io "kubevirts.kubevirt.io" deleted (dry run) customresourcedefinition.apiextensions.k8s.io "networkaddonsconfigs.networkaddonsoperator.network.kubevirt.io" deleted (dry run) customresourcedefinition.apiextensions.k8s.io "ssps.ssp.kubevirt.io" deleted (dry run) customresourcedefinition.apiextensions.k8s.io "tektontasks.tektontasks.kubevirt.io" deleted (dry run)
运行
oc delete crd
命令来删除 CRD,而无需dry-run
选项:$ oc delete crd -l operators.coreos.com/kubevirt-hyperconverged.openshift-cnv
第 7 章 更新 OpenShift Virtualization
了解 Operator Lifecycle Manager (OLM) 如何为 OpenShift Virtualization 提供 z-stream 和次要版本更新。
OpenShift Virtualization 不再提供 Node Maintenance Operator (NMO)。您可以从 OpenShift Container Platform web 控制台中的 OperatorHub,或使用 OpenShift CLI (
oc
) 安装 NMO。在从 OpenShift Virtualization 4.10.2 及更新版本升级到 OpenShift Virtualization 4.11 前,您必须执行以下任务之一:
- 将所有节点从维护模式移出。
-
安装独立 NMO,将
nodemaintenances.nodemaintenance.kubevirt.io
自定义资源 (CR) 替换为nodemaintenances.nodemaintenance.medik8s.io
CR。
7.1. 关于更新 OpenShift Virtualization
- Operator Lifecycle Manager (OLM) 管理 OpenShift Virtualization Operator 的生命周期。Marketplace Operator 在 OpenShift Container Platform 安装过程中部署,使外部 Operator 可供集群使用。
- OLM 为 OpenShift Virtualization 提供 z-stream 和次要版本更新。在将 OpenShift Container Platform 更新至下一个次版本时,次版本更新将变为可用。在不先更新 OpenShift Container Platform 的情况下,您无法将 OpenShift Virtualization 更新至下一个次版本。
- OpenShift Virtualization 订阅使用一个名为 stable 的单一更新频道。stable 频道确保 OpenShift Virtualization 和 OpenShift Container Platform 版本兼容。
如果您的订阅的批准策略被设置为 Automatic,则当 stable 频道中提供新版本的 Operator 时,更新过程就会马上启动。强烈建议您使用 Automatic(自动) 批准策略来维护可支持的环境。只有在运行对应的 OpenShift Container Platform 版本时,才会支持 OpenShift Virtualization 的每个次要版本。例如,您必须在 OpenShift Container Platform 4.12 上运行 OpenShift Virtualization 4.12。
- 虽然可以选择 Manual(手工) 批准策略,但并不建议这样做,因为它存在集群的支持性和功能风险。使用 Manual 批准策略时,您必须手动批准每个待处理的更新。如果 OpenShift Container Platform 和 OpenShift Virtualization 更新不同步,您的集群将无法被支持。
- 更新完成所需时间取决于您的网络连接情况。大部分自动更新可在十五分钟内完成。
- 更新 OpenShift Virtualization 不会中断网络连接。
- 数据卷及其关联的持久性卷声明会在更新过程中保留。
如果您的虚拟机正在运行,使用 hostpath 置备程序存储,则无法实时迁移,并可能会阻止 OpenShift Container Platform 集群更新。
作为临时解决方案,您可以重新配置虚拟机以便在集群更新过程中自动关闭它们。删除 evictionStrategy: LiveMigrate
字段,并将 runStrategy
字段设置为 Always
。
7.1.1. 关于工作负载更新
更新 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 由具有always
的runStrategy
值的VirtualMachine
对象控制,则会在带有更新组件的新 pod 中创建一个新的 VMI。
迁移尝试和超时
更新工作负载时,如果 pod 在以下时间段内处于 Pending
状态,实时迁移会失败:
- 5 分钟
-
如果 pod 因为是
Unschedulable
而处于 pending 状态。 - 15 分钟
- 如果 pod 因任何原因处于 pending 状态。
当 VMI 无法迁移时,virt-controller
会尝试再次迁移它。它会重复这个过程,直到所有可可迁移的 VMI 在新的 virt-launcher
Pod 上运行。如果 VMI 没有被正确配置,这些尝试可能会无限期重复。
每次尝试都会对应于一个迁移对象。只有最近五个尝试才在缓冲区中。这可防止迁移对象在系统上进行积累,同时保留用于调试的信息。
7.1.2. 关于 EUS 到 EUS 更新
每个 OpenShift Container Platform 的次版本号为偶数(包括 4.10 和 4.12)都是延长更新支持(EUS)版本。但是,由于 Kubernetes 设计了串行次版本更新,所以您无法直接从一个 EUS 版本更新到下一个版本。
从源 EUS 版本升级到下一个奇数次版本后,您必须按顺序将 OpenShift Virtualization 更新至更新路径中的所有次版本的 z-stream 版本。当您升级到最新的适用 z-stream 版本时,您可以将 OpenShift Container Platform 更新至目标 EUS 次版本。
当 OpenShift Container Platform 更新成功时,OpenShift Virtualization 的对应更新将变为可用。现在,您可以将 OpenShift Virtualization 更新至目标 EUS 版本。
7.1.2.1. 准备更新
在开始 EUS 到 EUS 更新前,您必须:
- 在启动 EUS 到 EUS 更新前,暂停 worker 节点的机器配置池,以便 worker 不会重启两次。
- 在开始更新过程前禁用自动工作负载更新。这是为了防止 OpenShift Virtualization 迁移或驱除虚拟机(VM),直到您升级到目标 EUS 版本。
默认情况下,当您更新 OpenShift Virtualization Operator 时,OpenShift Virtualization 会自动更新工作负载,如 virt-launcher
pod。您可以在 HyperConverged
自定义资源的 spec.workloadUpdateStrategy
小节中配置此行为。
了解有关准备执行 EUS 到 EUS 更新的更多信息。
7.2. 防止在 EUS 到 EUS 更新过程中进行工作负载更新
当您从一个延长更新支持(EUS)版本升级到下一个版本时,您必须手动禁用自动工作负载更新,以防止 OpenShift Virtualization 在更新过程中迁移或驱除工作负载。
先决条件
- 您正在运行 EUS 版本 OpenShift Container Platform,并希望升级到下一个 EUS 版本。还没有同时更新至奇数版本。
- 您可以阅读"准备执行 EUS 到 EUS 更新",并了解到与 OpenShift Container Platform 集群相关的注意事项和要求。
- 按照 OpenShift Container Platform 文档的指示暂停 worker 节点的机器配置池。
- 建议您使用默认的 Automatic 批准策略。如果使用 Manual 批准策略,您必须批准 web 控制台中的所有待处理的更新。如需了解更多详细信息,请参阅"需要批准待处理的 Operator 更新"部分。
流程
运行以下命令备份当前的
workloadUpdateMethods
配置:$ WORKLOAD_UPDATE_METHODS=$(oc get kv kubevirt-kubevirt-hyperconverged -n openshift-cnv -o jsonpath='{.spec.workloadUpdateStrategy.workloadUpdateMethods}')
运行以下命令关闭所有工作负载更新方法:
$ oc patch hco kubevirt-hyperconverged -n openshift-cnv --type json -p '[{"op":"replace","path":"/spec/workloadUpdateStrategy/workloadUpdateMethods", "value":[]}]'
输出示例
hyperconverged.hco.kubevirt.io/kubevirt-hyperconverged patched
在继续操作前,请确保
HyperConverged
Operator 为Upgradeable
。输入以下命令并监控输出:$ oc get hco kubevirt-hyperconverged -n openshift-cnv -o json | jq ".status.conditions"
例 7.1. 输出示例
[ { "lastTransitionTime": "2022-12-09T16:29:11Z", "message": "Reconcile completed successfully", "observedGeneration": 3, "reason": "ReconcileCompleted", "status": "True", "type": "ReconcileComplete" }, { "lastTransitionTime": "2022-12-09T20:30:10Z", "message": "Reconcile completed successfully", "observedGeneration": 3, "reason": "ReconcileCompleted", "status": "True", "type": "Available" }, { "lastTransitionTime": "2022-12-09T20:30:10Z", "message": "Reconcile completed successfully", "observedGeneration": 3, "reason": "ReconcileCompleted", "status": "False", "type": "Progressing" }, { "lastTransitionTime": "2022-12-09T16:39:11Z", "message": "Reconcile completed successfully", "observedGeneration": 3, "reason": "ReconcileCompleted", "status": "False", "type": "Degraded" }, { "lastTransitionTime": "2022-12-09T20:30:10Z", "message": "Reconcile completed successfully", "observedGeneration": 3, "reason": "ReconcileCompleted", "status": "True", "type": "Upgradeable" 1 } ]
- 1
- OpenShift Virtualization Operator 具有
Upgradeable
状态。
手动将集群从源 EUS 版本升级到下一个 OpenShift Container Platform 次要版本:
$ oc adm upgrade
验证
运行以下命令检查当前版本:
$ oc get clusterversion
注意将 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
- 将 OpenShift Virtualization 更新至可用于非 EUS 次版本的每个 z-stream 版本,通过运行上一步中显示的命令来监控每个更新。
运行以下命令,确认 OpenShift Virtualization 已成功更新至非 EUS 版本的最新 z-stream 版本:
$ oc get hco kubevirt-hyperconverged -n openshift-cnv -o json | jq ".status.versions"
输出示例
[ { "name": "operator", "version": "4.12.1" } ]
等待
HyperConverged
Operator 在执行下一次更新前具有Upgradeable
状态。输入以下命令并监控输出:$ oc get hco kubevirt-hyperconverged -n openshift-cnv -o json | jq ".status.conditions"
- 将 OpenShift Container Platform 更新至目标 EUS 版本。
通过检查集群版本确认更新是否成功:
$ oc get clusterversion
将 OpenShift Virtualization 更新至目标 EUS 版本。
- 使用默认的 Automatic 批准策略,OpenShift Virtualization 会在更新 OpenShift Container Platform 后自动更新到对应的版本。
- 如果使用 Manual 批准策略,请使用 Web 控制台批准待处理的更新。
运行以下命令监控 OpenShift Virtualization 更新:
$ oc get csv -n openshift-cnv
当
VERSION
字段与目标 EUS 版本匹配并且PHASE
字段显示为Succeeded
时,更新已完成。恢复您备份的工作负载更新方法配置:
$ oc patch hco kubevirt-hyperconverged -n openshift-cnv --type json -p "[{\"op\":\"add\",\"path\":\"/spec/workloadUpdateStrategy/workloadUpdateMethods\", \"value\":$WORKLOAD_UPDATE_METHODS}]"
输出示例
hyperconverged.hco.kubevirt.io/kubevirt-hyperconverged patched
验证
运行以下命令检查虚拟机迁移的状态:
$ oc get vmim -A
后续步骤
- 现在,您可以取消暂停 worker 节点的机器配置池。
7.3. 配置工作负载更新方法
您可以通过编辑 HyperConverged
自定义资源(CR)来配置工作负载更新方法。
先决条件
要使用实时迁移作为更新方法,您必须首先在集群中启用实时迁移。
注意如果
VirtualMachineInstance
CR 包含evictionStrategy: LiveMigrate
,且虚拟机实例(VMI)不支持实时迁移,则 VMI 将不会更新。
流程
要在默认编辑器中打开
HyperConverged
CR,请运行以下命令:$ oc edit hco -n openshift-cnv kubevirt-hyperconverged
编辑
HyperConverged
CR 的workloadUpdateStrategy
小节。例如:apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged spec: workloadUpdateStrategy: workloadUpdateMethods: 1 - LiveMigrate 2 - Evict 3 batchEvictionSize: 10 4 batchEvictionInterval: "1m0s" 5 ...
- 1
- 可用于执行自动化工作负载更新的方法。可用值为
LiveMigrate
和Evict
。如果您如本例所示启用这两个选项,则更新会为不支持实时迁移的 VMI 使用LiveMigrate
,对于不支持实时迁移的 VMI 使用Evict
。要禁用自动工作负载更新,您可以删除workloadUpdateStrategy
小节,或设置workloadUpdateMethods: []
将数组留空。 - 2
- 具有最低破坏性的更新方法。支持实时迁移的 VMI 通过将虚拟机 (VM) 客户机迁移到启用了更新组件的新 pod 中来更新。如果
LiveMigrate
是唯一列出的工作负载更新方法,不支持实时迁移的 VMI 不会中断或更新。 - 3
- 在升级过程中关闭 VMI pod 是一个有破坏性的方法。如果在集群中没有启用实时迁移,
Evict
是唯一可用的更新方法。如果 VMI 由已配置了runStrategy: always
的VirtualMachine
对象控制,新的 VMI 会在带有更新组件的新 pod 中创建。 - 4
- 使用
Evict
方法每次可以强制更新的 VMI 数量。这不适用于LiveMigrate
方法。 - 5
- 驱除下一批工作负载前等待的时间间隔。这不适用于
LiveMigrate
方法。
注意您可以通过编辑
HyperConverged
CR 的spec.liveMigrationConfig
小节来配置实时迁移限制和超时。- 若要应用您的更改,请保存并退出编辑器。
7.4. 批准待处理的 Operator 更新
7.4.1. 手动批准待处理的 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。
7.5. 监控更新状态
7.5.1. 监控 OpenShift Virtualization 升级状态
要监控 OpenShift Virtualization Operator 升级的状态,请观察集群服务版本 (CSV) PHASE
。此外您还可在 web 控制台中,或运行此处提供的命令来监控 CSV 状况。
PHASE
和状况值均是基于可用信息的近似值。
先决条件
-
以具有
cluster-admin
角色的用户身份登录集群。 -
安装 OpenShift CLI(
oc
)。
流程
运行以下命令:
$ oc get csv -n openshift-cnv
查看输出,检查
PHASE
字段。例如:输出示例
VERSION REPLACES PHASE 4.9.0 kubevirt-hyperconverged-operator.v4.8.2 Installing 4.9.0 kubevirt-hyperconverged-operator.v4.9.0 Replacing
可选:运行以下命令来监控所有 OpenShift Virtualization 组件状况的聚合状态:
$ oc get hco -n openshift-cnv kubevirt-hyperconverged \ -o=jsonpath='{range .status.conditions[*]}{.type}{"\t"}{.status}{"\t"}{.message}{"\n"}{end}'
成功升级后会输出以下内容:
输出示例
ReconcileComplete True Reconcile completed successfully Available True Reconcile completed successfully Progressing False Reconcile completed successfully Degraded False Reconcile completed successfully Upgradeable True Reconcile completed successfully
7.5.2. 查看过时的 OpenShift Virtualization 工作负载
您可以使用 CLI 查看过时的工作负载列表。
如果集群中存在过时的虚拟化 pod,OutdatedVirtualMachineInstanceWorkloads
警报会触发。
流程
要查看过时的虚拟机实例 (VMI) 列表,请运行以下命令:
$ oc get vmi -l kubevirt.io/outdatedLauncherImage --all-namespaces
配置工作负载更新以确保 VMI 自动更新。
7.6. 其他资源
第 8 章 安全策略
虚拟机 (VM) 工作负载作为非特权 pod 运行。因此,虚拟机可以使用 OpenShift Virtualization 功能,一些 pod 被赋予其他 pod 所有者不可用的自定义安全策略:
-
扩展的
container_t
SELinux 策略适用于virt-launcher
pod。 -
为
kubevirt-controller
服务帐户定义了 安全性上下文约束 (SCC)。
8.1. 关于工作负载安全性
默认情况下,虚拟机 (VM) 工作负载不会在 OpenShift Virtualization 中使用 root 权限运行。
对于每个虚拟机,virt-launcher
pod 以 会话模式运行一个 libvirt
实例,用于管理虚拟机进程。在会话模式中,libvirt
守护进程以非 root 用户帐户运行,仅允许同一用户标识符 (UID) 下运行的客户端的连接。因此,虚拟机作为非特权 pod 运行,遵循最小特权的安全原则。
不支持需要 root 权限的 OpenShift Virtualization 功能。如果功能需要 root,则可能无法与 OpenShift Virtualization 搭配使用。
8.2. 为 virt-launcher pod 扩展 SELinux 策略
virt-launcher
Pod 的 container_t
SELinux 策略被扩展来启用 OpenShift Virtualization 的基本功能。
网络多队列需要以下策略,它可在可用 vCPU 数量增加时扩展网络性能:
-
allow process self (tun_socket (relabelfrom relabelto attach_queue))
-
以下策略允许
virt-launcher
读取/proc
目录中的文件,包括/proc/cpuinfo
和/proc/uptime
:-
allow process proc_type (file (getattr open read))
-
以下策略允许
libvirtd
转发与网络相关的调试信息。allow process self (netlink_audit_socket (nlmsg_relay))
注意如果没有此策略,则阻止任何转发网络调试信息。这可能会通过 SELinux 拒绝填充节点的审计日志。
以下策略允许
libvirtd
访问hugetblfs
,这是支持巨页所必需的:-
allow process hugetlbfs_t (dir (add_name create write remove_name rmdir setattr))
-
allow process hugetlbfs_t (file (create unlink))
-
以下策略允许
virtiofs
挂载文件系统并访问 NFS:-
allow process nfs_t (dir (mounton))
-
allow process proc_t (dir (mounton))
-
allow process proc_t (filesystem (mount unmount))
-
以下策略从上游 Kubevirt 继承,它启用了
passt
网络:-
allow process tmpfs_t (filesystem (mount))
-
OpenShift Virtualization 目前不支持 passt
。
8.3. kubevirt-controller 服务帐户的其他 OpenShift Container Platform 安全性上下文约束和 Linux 功能
Pod 的安全上下文约束(SCC)控制权限。这些权限包括 Pod(容器集合)可以执行的操作以及它们可以访问的资源。您可以使用 SCC 定义 Pod 运行必须满足的一组条件,以便其能被系统接受。
virt-controller
是一个集群控制器,可为集群中的虚拟机创建 virt-launcher
pod。这些 pod 由 kubevirt-controller
服务帐户授予权限。
kubevirt-controller
服务帐户被授予额外的 SCC 和 Linux 功能,以便能够创建具有适当权限的 virt-launcher
Pod。这些扩展权限允许虚拟机使用超出典型 pod 范围的 OpenShift Virtualization 功能。
kubevirt-controller
服务帐户被授予以下 SCC:
-
scc.AllowHostDirVolumePlugin = true
这允许虚拟机使用 hostpath 卷插件。 -
scc.AllowPrivilegedContainer = false
可确保 virt-launcher pod 不是作为特权容器运行。 scc.AllowedCapabilities = []corev1.Capability{"SYS_NICE", "NET_BIND_SERVICE", "SYS_PTRACE"}
-
SYS_NICE
允许设置 CPU 关联性。 -
NET_BIND_SERVICE
允许 DHCP 和 Slirp 操作。 -
SYS_PTRACE
允许某些版本的libvirt
查找swtpm
的进程 ID (PID),这是软件受信任的平台模块 (TPM) 模拟器。
-
8.3.1. 查看 kubevirt-controller 的 SCC 和 RBAC 定义
您可以使用 oc
工具查看 kubevirt-controller
的 SecurityContextConstraints
定义:
$ oc get scc kubevirt-controller -o yaml
您可以使用 oc
工具查看 kubevirt-controller
clusterrole 的 RBAC 定义:
$ oc get clusterrole kubevirt-controller -o yaml
8.4. 其他资源
- 管理安全性上下文约束
- 使用 RBAC 定义和应用权限
- Red Hat Enterprise Linux (RHEL)文档中的优化虚拟机网络性能
- 在虚拟机中使用巨页
- RHEL 文档中的配置巨页
第 9 章 使用 CLI 工具
用于管理集群中资源的两个主要 CLI 工具是:
-
OpenShift Virtualization
virtctl
客户端 -
OpenShift Container Platform
oc
客户端
9.1. 先决条件
-
您必须安装
virtctl
客户端。
9.2. OpenShift Container Platform 客户端命令
OpenShift Container Platform oc
客户端是一个用于管理 OpenShift Container Platform 资源的命令行实用程序,包括 VirtualMachine
(vm
)和 VirtualMachineInstance
(vmi
)对象类型。
您可以使用 -n <namespace>
指定一个不同的项目。
表 9.1. oc
命令
命令 | 描述 |
---|---|
|
以 |
| 显示当前项目中指定对象类型的对象列表。 |
| 显示当前项目中指定资源的详情。 |
| 从文件名称或 stdin 在当前项目中创建资源。 |
| 编辑当前项目中的资源。 |
| 删除当前项目中的资源。 |
有关 oc
客户端命令的更全面信息,请参阅 OpenShift Container Platform CLI 工具文档。
9.3. virtctl 命令
virtctl
客户端是用于管理 OpenShift Virtualization 资源的命令行实用程序。
表 9.2. virtctl
常规命令
命令 | 描述 |
---|---|
|
查看 |
|
查看 |
| 查看特定命令的选项列表。 |
|
查看任何 |
9.3.1. VM 和 VMI 管理命令
您可使用 virtctl
管理虚拟机 (VM) 或虚拟机实例 (VMI) 状态,并迁移虚拟机。
表 9.3. virtctl
VM 管理命令
命令 | 描述 |
---|---|
| 启动虚拟机。 |
| 以暂停状态启动虚拟机。这个选项可让您从 VNC 控制台中断引导过程。 |
| 停止虚拟机。 |
| 强制停止虚拟机。这个选项可能会导致数据不一致或数据丢失。 |
| 暂停 VM 或 VMI。机器状态保存在内存中。 |
| 取消暂停 VM 或 VMI。 |
| 迁移虚拟机。 |
| 重启虚拟机。 |
9.3.2. VM 和 VMI 连接命令
您可使用 virtctl
连接到串行控制台,公开端口、设置代理连接、指定端口,以及打开到虚拟机的 VNC 连接。
表 9.4. virtctl console
,expose
, 和 vnc
命令
命令 | 描述 |
---|---|
| 连接到 VMI 的串行控制台。 |
| 创建转发 VM 或 VMI 的指定端口的服务,并在节点的指定端口上公开该服务。 |
| 打开到 VMI 的虚拟网络客户端 (VNC) 连接。 通过 VNC 访问 VMI 的图形控制台需要在本地机器上有一个远程查看器。 |
| 显示端口号,并使用任何查看器通过 VNC 连接手动连接到 VMI。 |
| 如果该端口可用,则指定端口号用于在指定端口上运行代理。 如果没有指定端口号,代理会在随机端口上运行。 |
9.3.3. VM 卷导出命令
您可使用 virtctl vmexport
命令来创建、下载或删除从虚拟机、虚拟机快照或持久性卷声明 (PVC) 导出的卷。
表 9.5. virtctl vmexport
命令
命令 | 描述 |
---|---|
|
创建一个
|
|
手动删除 |
|
下载在
可选:
|
|
创建一个 |
9.3.4. VM 内存转储命令
您可使用 virtctl memory-dump
命令在 PVC 上输出虚拟机 (VM) 内存转储。您可以指定现有的 PVC,或使用 --create-claim
标志来创建新 PVC。
先决条件
-
PVC 卷模式必须是
FileSystem
。 PVC 必须足够大以保存内存转储。
计算 PVC 大小的公式为
(VMMemorySize + 100Mi)* FileSystemOverhead
,其中100Mi
是内存转储开销。您必须运行以下命令来在
HyperConverged
自定义资源中启用热插功能:$ oc patch hco kubevirt-hyperconverged -n openshift-cnv \ --type json -p '[{"op": "add", "path": "/spec/featureGates", \ "value": "HotplugVolumes"}]'
下载内存转储
您必须使用 virtctl vmexport download
命令下载内存转储:
$ virtctl vmexport download <vmexport_name> --vm\|pvc=<object_name> \ --volume=<volume_name> --output=<output_file>
表 9.6. virtctl memory-dump
命令
命令 | 描述 |
---|---|
|
在 PVC 上保存虚拟机的内存转储。内存转储状态显示在 可选:
|
|
使用相同的 PVC 重新运行 这个命令覆盖以前的内存转储。 |
| 删除内存转储。 如果要更改目标 PVC,则必须手动删除内存转储。
这个命令会删除虚拟机和 PVC 之间的关联,以便在 |
9.3.5. 镜像上传命令
您可使用 virtctl image-upload
命令将虚拟机镜像上传到数据卷中。
表 9.7. virtctl image-upload
命令
命令 | 描述 |
---|---|
| 将虚拟机镜像上传到已存在的数据卷中。 |
| 将虚拟机镜像上传到指定请求大小的新数据卷中。 |
9.3.6. 环境信息命令
您可使用 virtctl
查看版本、文件系统、客户机操作系统和登录用户的信息。
表 9.8. virtctl
环境信息命令
命令 | 描述 |
---|---|
| 查看客户机机器上可用的文件系统。 |
| 查看客户机机器上操作系统的信息。 |
| 查看客户机机器上的登录用户。 |
9.4. 使用 virtctl guestfs 创建容器
您可以使用 virtctl guestfs
命令部署带有 libguestfs-tools
以及附加到它的持久性卷声明 (PVC) 的交互式容器。
流程
要部署一个带有
libguestfs-tools
的容器,挂载 PVC 并为其附加一个 shell,运行以下命令:$ virtctl guestfs -n <namespace> <pvc_name> 1
- 1
- PVC 名称是必需的参数。如果没有包括它,则会出现错误消息。
9.5. libguestfs 工具和 virtctl guestfs
libguestfs
工具可帮助您访问和修改虚拟机 (VM) 磁盘镜像。您可以使用 libguestfs
工具查看和编辑客户机中的文件、克隆和构建虚拟机,以及格式化和调整磁盘大小。
您还可以使用 virtctl guestfs
命令及其子命令在 PVC 上修改、检查和调试虚拟机磁盘。要查看可能子命令的完整列表,请在命令行中输入 virt-
并按 Tab 键。例如:
命令 | 描述 |
---|---|
| 在终端中以交互方式编辑文件。 |
| 将 ssh 密钥注入客户系统并创建登录。 |
| 查看虚拟机使用了多少磁盘空间。 |
| 通过创建包含完整列表的输出文件,查看虚拟客户机上安装的所有 RPM 的完整列表。 |
|
在终端中使用 |
| 封装要用作模板的虚拟机磁盘镜像。 |
默认情况下,virtctl guestfs
会创建一个会话,其中包含管理 VM 磁盘所需的一切内容。但是,如果想要自定义行为,该命令还支持几个标志选项:
标记选项 | 描述 |
---|---|
|
为 |
带有 | 使用特定命名空间中的 PVC。
如果不使用
如果没有包括 |
|
列出
您可以使用 |
|
代表
默认情况下,
如果群集没有任何
如果没有设置, |
|
显示
您还可以通过设置 |
这个命令还会检查 PVC 是否被另一个 pod 使用,这时会出现错误消息。但是,libguestfs-tools
进程启动后,设置无法避免使用相同的 PVC 的新 pod。在启动虚拟机访问同一 PVC 前,您必须先验证没有活跃的 virtctl guestfs
pod。
virtctl guestfs
命令只接受附加到交互式 pod 的单个 PVC。
9.6. 其他资源
第 10 章 虚拟机
10.1. 创建虚拟机
使用以下其中一个流程来创建虚拟机:
- 快速入门指南
- 从目录快速创建
- 使用虚拟机向导来粘贴预先配置的 YAML 文件
- 使用 CLI
不要在 openshift-*
命名空间中创建虚拟机 。相反,创建一个新命名空间或使用没有 openshift
前缀的现有命名空间。
从 web 控制台创建虚拟机时,请选择配置了引导源的虚拟机模板。具有引导源的虚拟机模板标记为 Available boot source,或者它们显示自定义标签文本。使用有可用引导源的模板可促进创建虚拟机的过程。
没有引导源的模板被标记为 Boot source required。如果完成了 向虚拟机中添加引导源的步骤,您可以使用这些模板。
由于存储行为的区别,一些虚拟机模板与单节点 OpenShift 不兼容。为确保兼容性,请不要为使用数据卷或存储配置集的任何模板或虚拟机设置 evictionStrategy
字段。
10.1.1. 使用快速入门创建虚拟机
web 控制台为创建虚拟机提供指导指导快速入门。您可以通过在 Administrator 视角中选择 Help 菜单来查看 Quick Starts 目录来访问 Quick Starts 目录。当您点快速入门标题并开始使用时,系统会帮助您完成这个过程。
快速入门中的任务以选择红帽模板开始。然后,您可以添加一个引导源并导入操作系统镜像。最后,您可以保存自定义模板,并使用它来创建虚拟机。
先决条件
- 访问您可以下载操作系统镜像的 URL 链接的网站。
流程
- 在 web 控制台中,从 Help 菜单中选择 Quick Starts。
- 点 Quick Starts 目录里的一个标题。例如:Creating a Red Hat Linux Enterprise Linux virtual machine。
- 按照教程中的说明,完成导入操作系统镜像并创建虚拟机的任务。Virtualization → VirtualMachines 页面显示虚拟机。
10.1.2. 快速创建虚拟机
您可以使用有可用引导源的模板快速创建虚拟机(VM)。
流程
- 在侧边菜单中点 Virtualization → Catalog。
点 Boot source available 来使用引导源过滤模板。
注意默认情况下,模板列表将仅显示默认模板。过滤时点 All Items,以查看您选择的过滤器的所有可用模板。
- 点模板查看其详情。
点 Quick Create VirtualMachine 从模板创建虚拟机。
虚拟机 Details 页面会显示 provisioning 状态。
验证
- 点 Events 在虚拟机被置备时查看事件流。
- 点 Console 以验证虚拟机是否已成功引导。
10.1.3. 从自定义模板创建虚拟机
有些模板需要额外的参数,例如使用引导源的 PVC。您可以自定义模板的选择参数来创建虚拟机(VM)。
流程
在 web 控制台中选择一个模板:
- 在侧边菜单中点 Virtualization → Catalog。
- 可选:按项目、关键字、操作系统或工作负载配置集过滤模板。
- 点您要自定义的模板。
- 点 Customize VirtualMachine。
- 指定虚拟机的参数,包括其 Name 和 Disk source。您可选择指定要克隆的数据源。
验证
- 点 Events 在虚拟机被置备时查看事件流。
- 点 Console 以验证虚拟机是否已成功引导。
从 web 控制台创建虚拟机时,请参考虚拟机字段部分。
10.1.3.1. 虚拟机字段
下表列出了您可以在 OpenShift Container Platform web 控制台中编辑的虚拟机字段:
表 10.1. 虚拟机字段
标签页 | 字段或功能 |
---|---|
概述 |
|
YAML |
|
调度 |
|
环境 |
|
网络接口 |
|
磁盘 |
|
脚本 |
|
元数� |
|
10.1.3.1.1. 网络字段
名称 | 描述 |
---|---|
名称 | 网络接口控制器的名称。 |
model | 指明网络接口控制器的型号。支持的值有 e1000e 和 virtio。 |
网络 | 可用网络附加定义的列表。 |
类型 | 可用绑定方法列表。选择适合网络接口的绑定方法:
|
MAC 地址 | 网络接口控制器的 MAC 地址。如果没有指定 MAC 地址,则会自动分配一个。 |
10.1.3.1.2. 存储字段
名称 | 选择 | 描述 |
---|---|---|
Source | 空白(创建 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 磁盘可用。在 OpenShift Virtualization 4.11 之前,如果您没有指定这些参数,系统将使用 kubevirt-storage-class-defaults
配置映射中的默认值。在 OpenShift Virtualization 4.11 及更高版本中,系统使用存储配置集中的默认值。
使用存储配置集来确保在为 OpenShift Virtualization 置备存储时一致的高级存储设置。
要手动指定 卷模式 和 访问模式,您必须清除 Apply optimized StorageProfile settings 复选框,该复选框被默认选择。
名称 | 模式描述 | 参数 | 参数描述 |
---|---|---|---|
卷模式 | 定义持久性卷是否使用格式化的文件系统或原始块状态。默认为 Filesystem。 | Filesystem | 在基于文件系统的卷中保存虚拟磁盘。 |
Block |
直接将虚拟磁盘存储在块卷中。只有底层存储支持时才使用 | ||
访问模式 | 持久性卷访问模式。 | ReadWriteOnce (RWO) | 卷可以被一个节点以读写模式挂载。 |
ReadWriteMany (RWX) | 卷可以被多个节点以读写模式挂载。 注意 对于一些功能(如虚拟机在节点间实时迁移)需要这个权限。 | ||
ReadOnlyMany (ROX) | 卷可以被多个节点以只读形式挂载。 |
10.1.3.1.3. Cloud-init 字段
名称 | 描述 |
---|---|
Hostname | 为虚拟机设置特定主机名。 |
授权 SSH 密钥 | 复制到虚拟机上 ~/.ssh/authorized_keys 的用户公钥。 |
自定义脚本 | 将其他选项替换为您粘贴自定义 cloud-init 脚本的字段。 |
要配置存储类默认设置,请使用存储配置集。如需更多信息,请参阅自定义存储配置集。
10.1.3.2. 粘贴至预先配置的 YAML 文件中以创建虚拟机
通过写入或粘贴 YAML 配置文件来创建虚拟机。每当您打开 YAML 编辑屏幕,默认会提供一个有效的 example
虚拟机配置。
如果您点击 Create 时 YAML 配置无效,则错误消息会指示出错的参数。一次仅显示一个错误。
编辑时离开 YAML 屏幕会取消您对配置做出的任何更改。
流程
- 在侧边菜单中点 Virtualization → VirtualMachines。
- 点 Create 并选择 With YAML。
在可编辑窗口写入或粘贴您的虚拟机配置。
-
或者,使用 YAML 屏幕中默认提供的
example
虚拟机。
-
或者,使用 YAML 屏幕中默认提供的
- 可选:点 Download 以下载当前状态下的 YAML 配置文件。
- 点击 Create 以创建虚拟机。
虚拟机在 VirtualMachines 页面中列出。
10.1.4. 使用 CLI 创建虚拟机
您可以从 virtualMachine
清单创建虚拟机。
流程
编辑虚拟机的
VirtualMachine
清单。例如,以下清单配置 Red Hat Enterprise Linux(RHEL)虚拟机:例 10.1. RHEL 虚拟机的清单示例
apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: labels: app: <vm_name> 1 name: <vm_name> spec: dataVolumeTemplates: - apiVersion: cdi.kubevirt.io/v1beta1 kind: DataVolume metadata: name: <vm_name> spec: sourceRef: kind: DataSource name: rhel9 namespace: openshift-virtualization-os-images storage: resources: requests: storage: 30Gi running: false template: metadata: labels: kubevirt.io/domain: <vm_name> spec: domain: cpu: cores: 1 sockets: 2 threads: 1 devices: disks: - disk: bus: virtio name: rootdisk - disk: bus: virtio name: cloudinitdisk interfaces: - masquerade: {} name: default rng: {} features: smm: enabled: true firmware: bootloader: efi: {} resources: requests: memory: 8Gi evictionStrategy: LiveMigrate networks: - name: default pod: {} volumes: - dataVolume: name: <vm_name> name: rootdisk - cloudInitNoCloud: userData: |- #cloud-config user: cloud-user password: '<password>' 2 chpasswd: { expire: False } name: cloudinitdisk
使用清单文件创建虚拟机:
$ oc create -f <vm_manifest_file>.yaml
可选:启动虚拟机:
$ virtctl start <vm_name>
10.1.5. 虚拟机存储卷类型
存储卷类型 | 描述 |
---|---|
ephemeral | 将网络卷用作只读后备存储的本地写时复制 (COW) 镜像。后备卷必须为 PersistentVolumeClaim。当虚拟机启动并在本地存储所有写入数据时,便会创建临时镜像。当虚拟机停止、重启或删除时,便会丢弃临时镜像。其底层的卷 (PVC) 不会以任何方式发生变化。 |
persistentVolumeClaim | 将可用 PV 附加到虚拟机。附加 PV 可确保虚拟机数据在会话之间保持。 将现有虚拟机导入到 OpenShift Container Platform 中的建议方法是,使用 CDI 将现有虚拟机磁盘导入到 PVC 中,然后将 PVC 附加到虚拟机实例。在 PVC 中使用磁盘需要满足一些要求。 |
dataVolume |
通过导入、克隆或上传操作来管理虚拟机磁盘的准备过程,以此在
指定 |
cloudInitNoCloud | 附加包含所引用的 cloud-init NoCloud 数据源的磁盘,从而向虚拟机提供用户数据和元数据。虚拟机磁盘内部需要安装 cloud-init。 |
containerDisk | 引用容器镜像 registry 中存储的镜像,如虚拟机磁盘。镜像从 registry 中拉取,并在虚拟机启动时作为磁盘附加到虚拟机。
容器镜像 registry 仅支持 RAW 和 QCOW2 格式的磁盘类型。建议使用 QCOW2 格式以减小镜像的大小。 注意
|
emptyDisk | 创建额外的稀疏 QCOW2 磁盘,与虚拟机接口的生命周期相关联。当虚拟机中的客户端初始化重启后,数据保留下来,但当虚拟机停止或从 web 控制台重启时,数据将被丢弃。空磁盘用于存储应用程序依赖项和数据,否则这些依赖项和数据会超出临时磁盘有限的临时文件系统。 此外还必须提供磁盘容量大小。 |
10.1.6. 关于虚拟机的 RunStrategies
虚拟机的 RunStrategy
会根据一系列条件,决定虚拟机实例(VMI)的行为。spec.runStrategy
设置存在于虚拟机配置过程中,作为 spec.running
设置的替代方案。spec.runStrategy
设置为创建和管理 VMI 提供了更大的灵活性。而 spec.running
设置只能有 true
或 false
响应。但是,这两种设置是相互排斥的。只能同时使用 spec.running
或 spec.runStrategy
之一。如果两者都存在,则会出现错误。
有四个定义的 RunStrategies。
Always
-
在创建虚拟机时,始终会存在 VMI。如果因为任何原因造成原始的 VMI 停止运行,则会创建一个新的 VMI,这与
spec.running: true
的行为相同。 RerunOnFailure
- 如果上一个实例因为错误而失败,则会重新创建一个 VMI。如果虚拟机成功停止(例如虚拟机正常关机),则不会重新创建实例。
Manual
-
start
、stop
和restart
virtctl 客户端命令可以被用来控制 VMI 的状态。 Halted
-
创建虚拟机时没有 VMI,这与
spec.running: false
的行为相同。
start
、stop
和 restart
virtctl 命令的不同组合会影响到使用哪个 RunStrategy
。
下表是虚拟机从不同状态过渡的列表。第一栏显示了 VM 的初始 RunStrategy
。每个额外的栏都显示一个 virtctl 命令以及在运行该命令后的新的 RunStrategy
。
初始 RunStrategy | 开始 | 停止 | 重启 |
---|---|---|---|
Always | - | Halted | Always |
RerunOnFailure | - | Halted | RerunOnFailure |
Manual | Manual | Manual | Manual |
Halted | Always | - | - |
在使用安装程序置备的基础架构安装的 OpenShift Virtualization 集群中,当节点的 MachineHealthCheck 失败且集群不可用时,,带有 Always
或 RerunOnFailure
的 RunStrategy 的虚拟机会被重新调度到一个新的节点上。
apiVersion: kubevirt.io/v1
kind: VirtualMachine
spec:
RunStrategy: Always 1
template:
...
- 1
- VMI 的当前
RunStrategy
设置。
10.1.7. 其他资源
KubeVirt v0.58.0 API Reference 中的
VirtualMachineSpec
定义为虚拟机规格的参数和等级提供更宽松的上下文。注意KubeVirt API Reference 是上游项目参考,可能包含 OpenShift Virtualization 不支持的参数。
- 启用 CPU Manager 以使用高性能工作负载配置集。
-
在将容器磁盘作为
containerDisk
卷添加到虚拟机之前,请参阅准备容器磁盘。 - 有关部署和启用机器健康检查的详情,请参阅部署机器健康检查。
- 有关安装程序置备的基础架构的详情,请参阅安装程序置备的基础架构概述。
- 自定义存储配置集
10.2. 编辑虚拟机
您可以使用 web 控制台中的 YAML 编辑器或命令行上的 OpenShift CLI 来更新虚拟机配置。您还可以更新 Virtual Machine Details 屏幕中的参数子集。
10.2.1. 在 web 控制台中编辑虚拟机
您可以使用 OpenShift Container Platform web 控制台或命令行界面编辑虚拟机。
流程
- 在 web 控制台中进入到 Virtualization → VirtualMachines。
- 选择虚拟机以打开 VirtualMachine 详情页面。
- 点具有铅笔图标的字段,这表示该字段可编辑。例如,点当前的 引导模式 设置(如 BIOS 或 UEFI)打开 引导模式 窗口并从列表中选择一个选项。
- 点击 Save。
如果虚拟机正在运行,对 Boot Order 或 Flavor 的更改在重启虚拟机后才会生效。
您可以点击相关字段右侧的 View Pending Changes 来查看待处理的更改。页面顶部的 Pending Changes 标题显示虚拟机重启时将应用的所有更改列表。
10.2.1.1. 虚拟机字段
下表列出了您可以在 OpenShift Container Platform web 控制台中编辑的虚拟机字段:
表 10.2. 虚拟机字段
标签页 | 字段或功能 |
---|---|
详情 |
|
YAML |
|
调度 |
|
网络接口 |
|
磁盘 |
|
脚本 |
|
快照 |
|
10.2.2. 使用 web 控制台编辑虚拟机 YAML 配置
您可以在 web 控制台中编辑虚拟机的 YAML 配置。某些参数无法修改。如果在有无效配置时点 Save,则会出现一个错误消息指示无法更改的参数。
编辑时离开 YAML 屏幕会取消您对配置做出的任何更改。
流程
- 在侧边菜单中点 Virtualization → VirtualMachines。
- 选择虚拟机。
- 点击 YAML 选项卡以显示可编辑的配置。
- (可选):您可点击 Download,在本地下载当前状态的 YAML 文件。
- 编辑该文件并点击 Save。
确认消息显示修改已成功,其中包含对象的更新版本号。
10.2.3. 使用 CLI 编辑虚拟机 YAML 配置
使用这个步骤,通过 CLI 编辑虚拟机 YAML 配置。
先决条件
- 已使用 YAML 对象配置文件配置了虚拟机。
-
已安装
oc
CLI。
流程
运行以下命令以更新虚拟机配置:
$ oc edit <object_type> <object_ID>
- 打开对象配置。
- 编辑 YAML。
如果要编辑正在运行的虚拟机,您需要执行以下任一操作:
- 重启虚拟机。
运行以下命令使新配置生效:
$ oc apply <object_type> <object_ID>
10.2.4. 将虚拟磁盘添加到虚拟机
使用这个流程在虚拟机中添加虚拟磁盘。
流程
- 在侧边菜单中点 Virtualization → VirtualMachines。
- 选择虚拟机以打开 VirtualMachine Details 屏幕。
- 点 Disks 选项卡,然后点 Add disk。
在 Add disk 窗口中,指定 Source、Name、Size、Type、Interface 和 Storage Class。
- 可选:如果您使用空磁盘源并在创建数据卷时要求最大写入性能,则可以启用预分配。如果要这样做,可选中启用预分配复选框。
-
可选:您可以清除 Apply optimized StorageProfile 设置,以更改虚拟磁盘的卷模式和访问模式。如果没有指定这些参数,系统将使用
kubevirt-storage-class-defaults
配置映射中的默认值。
- 点 Add。
如果虚拟机正在运行,新磁盘处于 pending restart 状态,且不会在重启虚拟机前附加。
页面顶部的 Pending Changes 标题显示虚拟机重启时将应用的所有更改列表。
要配置存储类默认设置,请使用存储配置集。如需更多信息,请参阅自定义存储配置集。
10.2.4.1. 为 VirtualMachines 编辑 CD-ROM
使用以下步骤为虚拟机编辑 CD-ROM。
流程
- 在侧边菜单中点 Virtualization → VirtualMachines。
- 选择虚拟机以打开 VirtualMachine Details 屏幕。
- 点 Disks 选项卡。
-
点您要编辑的 CD-ROM 的 Options 菜单
,然后选择 Edit。
- 在 Edit CD-ROM 窗口中,编辑字段: Source、Persistent Volume Claim、Name、Type 和 Interface。
- 点击 Save。
10.2.4.2. 存储字段
名称 | 选择 | 描述 |
---|---|---|
Source | 空白(创建 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 磁盘可用。在 OpenShift Virtualization 4.11 之前,如果您没有指定这些参数,系统将使用 kubevirt-storage-class-defaults
配置映射中的默认值。在 OpenShift Virtualization 4.11 及更高版本中,系统使用存储配置集中的默认值。
使用存储配置集来确保在为 OpenShift Virtualization 置备存储时一致的高级存储设置。
要手动指定 卷模式 和 访问模式,您必须清除 Apply optimized StorageProfile settings 复选框,该复选框被默认选择。
名称 | 模式描述 | 参数 | 参数描述 |
---|---|---|---|
卷模式 | 定义持久性卷是否使用格式化的文件系统或原始块状态。默认为 Filesystem。 | Filesystem | 在基于文件系统的卷中保存虚拟磁盘。 |
Block |
直接将虚拟磁盘存储在块卷中。只有底层存储支持时才使用 | ||
访问模式 | 持久性卷访问模式。 | ReadWriteOnce (RWO) | 卷可以被一个节点以读写模式挂载。 |
ReadWriteMany (RWX) | 卷可以被多个节点以读写模式挂载。 注意 对于一些功能(如虚拟机在节点间实时迁移)需要这个权限。 | ||
ReadOnlyMany (ROX) | 卷可以被多个节点以只读形式挂载。 |
10.2.5. 将网络接口添加到虚拟机
将网络接口添加到虚拟机.
流程
- 在侧边菜单中点 Virtualization → VirtualMachines。
- 选择虚拟机以打开 VirtualMachine Details 屏幕。
- 点击 Network Interfaces 选项卡。
- 点击 Add Network Interface。
- 在 Add Network Interface 窗口中,指定网络接口的 Name、Model、Network、Type 和 MAC Address。
- 点 Add。
如果虚拟机正在运行,新的网络接口处于 pending restart 状态,且更改在重启虚拟机后才会生效。
页面顶部的 Pending Changes 标题显示虚拟机重启时将应用的所有更改列表。
10.2.5.1. 网络字段
名称 | 描述 |
---|---|
名称 | 网络接口控制器的名称。 |
model | 指明网络接口控制器的型号。支持的值有 e1000e 和 virtio。 |
网络 | 可用网络附加定义的列表。 |
类型 | 可用绑定方法列表。选择适合网络接口的绑定方法:
|
MAC 地址 | 网络接口控制器的 MAC 地址。如果没有指定 MAC 地址,则会自动分配一个。 |
10.2.6. 其他资源
10.3. 编辑引导顺序
您可以使用 Web 控制台或 CLI 更新引导顺序列表的值。
通过 Virtual Machine Overview 页面中的 Boot Order ,您可以:
- 选择磁盘或网络接口控制器 (NIC) 并将其添加到引导顺序列表中。
- 编辑引导顺序列表中磁盘或 NIC 的顺序。
- 从引导顺序列表中移除磁盘或者 NIC,然后将其返回到可引导源清单。
10.3.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 标题显示虚拟机重启时将应用的所有更改列表。
10.3.2. 在 web 控制台中编辑引导顺序列表
在 web 控制台中编辑引导顺序列表。
流程
- 在侧边菜单中点 Virtualization → VirtualMachines。
- 选择虚拟机以打开 VirtualMachine 详情页面。
- 点 Details 标签页。
- 点击位于 Boot Order 右侧的铅笔图标。
选择适当的方法来移动引导顺序列表中的项目:
- 如果您没有使用屏幕阅读器,请在您想要移动的项目旁的箭头图标上切换,拖动或下移项目,然后将其放到您选择的位置。
- 如果您使用屏幕阅读器,请按上箭头或者下箭头键移动引导顺序列表中的项目。然后,按 Tab 键将项目放到您选择的位置。
- 点 Save。
如果虚拟机正在运行,对引导顺序列表的更改将在重启虚拟机后才会生效。
您可以点 Boot Order 字段右侧的 View Pending Changes 查看待处理的修改。页面顶部的 Pending Changes 标题显示虚拟机重启时将应用的所有更改列表。
10.3.3. 在 YAML 配置文件中编辑引导顺序列表
使用 CLI 编辑 YAML 配置文件中的引导顺序列表。
流程
运行以下命令为虚拟机打开 YAML 配置文件:
$ oc edit vm example
编辑 YAML 文件并修改与磁盘或网络接口控制器 (NIC) 关联的引导顺序值。例如:
disks: - bootOrder: 1 1 disk: bus: virtio name: containerdisk - disk: bus: virtio name: cloudinitdisk - cdrom: bus: virtio name: cd-drive-1 interfaces: - boot Order: 2 2 macAddress: '02:96:c4:00:00' masquerade: {} name: default
- 保存 YAML 文件。
- 点 reload the content,使 YAML 文件中更新的引导顺序值应用到 web 控制台的引导顺序列表中。
10.3.4. 从 web 控制台中的引导顺序列表中删除项目
使用 Web 控制台从引导顺序列表中移除项目。
流程
- 在侧边菜单中点 Virtualization → VirtualMachines。
- 选择虚拟机以打开 VirtualMachine 详情页面。
- 点 Details 标签页。
- 点击位于 Boot Order 右侧的铅笔图标。
-
点击项
旁边的 Remove 图标。该项目从引导顺序列表中删除,可用引导源列表的内容被保存。如果您从引导顺序列表中删除所有项目,则会显示以下消息: No resource selected.虚拟机会根据在 YAML 文件中的顺序从磁盘引导。
如果虚拟机正在运行,在重启虚拟机后对 Boot Order 的更改不会生效。
您可以点 Boot Order 字段右侧的 View Pending Changes 查看待处理的修改。页面顶部的 Pending Changes 标题显示虚拟机重启时将应用的所有更改列表。
10.4. 删除虚拟机
您可从 web 控制台或使用 oc
命令行删除虚拟机。
10.4.1. 使用 web 控制台删除虚拟机
删除虚拟机会将其从集群中永久移除。
当您删除虚拟机时,其使用的数据卷会被自动删除。
流程
- 在 OpenShift Container Platform 控制台中,从侧边菜单中点 Virtualization → VirtualMachines。
点您要删除的虚拟机的 Options 菜单
,然后选择 Delete。
- 或者,击虚拟机名称,打开 VirtualMachine 详情页面并点击 Actions → Delete。
- 在确认弹出窗口中,点击 Delete 永久删除虚拟机。
10.4.2. 使用 CLI 删除虚拟机
您可以使用 oc
命令行界面(CLI)删除虚拟机。您可以使用 oc
对多个虚拟机执行操作。
当您删除虚拟机时,其使用的数据卷会被自动删除。
先决条件
- 找到要删除的虚拟机名称。
流程
运行以下命令以删除虚拟机:
$ oc delete vm <vm_name>
注意此命令只删除当前项目中存在的对象。如果您要删除其他项目或命名空间中的对象,请使用
-n <project_name>
选项。
10.5. 导出虚拟机
您可以导出虚拟机 (VM) 及其关联的磁盘,以将虚拟机导入到另一个集群或分析卷以备备目的。
您可以使用命令行界面创建一个 VirtualMachineExport
自定义资源 (CR)。
另外,您可以使用 virtctl vmexport
命令创建一个 VirtualMachineExport
CR 并下载导出的卷。
10.5.1. 创建 VirtualMachineExport 自定义资源
您可以创建一个 VirtualMachineExport
自定义资源 (CR) 来导出以下对象:
- 虚拟机 (VM):导出指定虚拟机的持久性卷声明 (PVC)。
-
VM 快照:导出
VirtualMachineSnapshot
CR 中包含的 PVC。 -
PVC :导出 PVC。如果 PVC 被另一个 pod (如
virt-launcher
pod)使用,则导出会一直处于Pending
状态,直到 PVC 不再使用为止。
VirtualMachineExport
CR 为导出的卷创建内部和外部链接。内部链接在集群中有效。可以使用 Ingress
或 Route
访问外部链接。
导出服务器支持以下文件格式:
-
raw
: 原始磁盘镜像文件。 -
gzip
:压缩的磁盘镜像文件. -
dir
:PVC 目录和文件。 -
tar.gz
:压缩的 PVC 文件。
先决条件
- 必须为虚拟机导出关闭虚拟机。
流程
创建一个
VirtualMachineExport
清单,根据以下示例从VirtualMachine
、VirtualMachineSnapshot
或PersistentVolumeClaim
CR 导出卷,并将其保存为example-export.yaml
:VirtualMachineExport
示例apiVersion: export.kubevirt.io/v1alpha1 kind: VirtualMachineExport metadata: name: example-export spec: source: apiGroup: "kubevirt.io" 1 kind: VirtualMachine 2 name: example-vm ttlDuration: 1h 3
创建
VirtualMachineExport
CR:$ oc create -f example-export.yaml
获取
VirtualMachineExport
CR:$ oc get vmexport example-export -o yaml
导出的卷的内部和外部链接显示在
status
小节中:输出示例
apiVersion: export.kubevirt.io/v1alpha1 kind: VirtualMachineExport metadata: name: example-export namespace: example spec: source: apiGroup: "" kind: PersistentVolumeClaim name: example-pvc tokenSecretRef: example-token status: conditions: - lastProbeTime: null lastTransitionTime: "2022-06-21T14:10:09Z" reason: podReady status: "True" type: Ready - lastProbeTime: null lastTransitionTime: "2022-06-21T14:09:02Z" reason: pvcBound status: "True" type: PVCReady links: external: 1 cert: |- -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- volumes: - formats: - format: raw url: https://vmexport-proxy.test.net/api/export.kubevirt.io/v1alpha1/namespaces/example/virtualmachineexports/example-export/volumes/example-disk/disk.img - format: gzip url: https://vmexport-proxy.test.net/api/export.kubevirt.io/v1alpha1/namespaces/example/virtualmachineexports/example-export/volumes/example-disk/disk.img.gz name: example-disk internal: 2 cert: |- -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- volumes: - formats: - format: raw url: https://virt-export-example-export.example.svc/volumes/example-disk/disk.img - format: gzip url: https://virt-export-example-export.example.svc/volumes/example-disk/disk.img.gz name: example-disk phase: Ready serviceName: virt-export-example-export
10.6. 管理虚拟机实例
如果您在 OpenShift Virtualization 环境之外创建独立虚拟机实例(VMI),您可以使用 web 控制台或使用命令行界面(CLI)使用 oc
或 virtctl
命令管理它们。
virtctl
命令提供比 oc
命令更多的虚拟化选项。例如,您可以使用 virtctl
暂停虚拟机或公开端口。
10.6.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。
10.6.2. 使用 CLI 列出所有虚拟机实例
您可以使用 oc
命令行界面(CLI)列出集群中的所有虚拟机实例(VMI),包括独立 VMI 和虚拟机拥有的实例。
流程
运行以下命令列出所有 VMI:
$ oc get vmis
10.6.3. 使用 web 控制台列出独立虚拟机实例
使用 web 控制台,您可以列出并查看集群中不属于虚拟机(VM)的独立虚拟机实例(VMI)。
受 VM 或其他对象拥有的 VMI 不会被显示在 web 控制台中。web 控制台仅显示独立 VMI。如果要列出集群中的所有 VMI,则必须使用 CLI。
流程
在侧边菜单中点 Virtualization → VirtualMachines。
您可以在名称旁使用黑色徽标识别独立 VMI。
10.6.4. 使用 web 控制台编辑独立虚拟机实例
您可以使用 web 控制台编辑独立虚拟机实例(VMI)的注解和标签。其他字段不可编辑。
流程
- 在 OpenShift Container Platform 控制台中,从侧边菜单中点 Virtualization → VirtualMachines。
- 选择独立 VMI 以打开 VirtualMachineInstance 详情页面。
- 在 Details 标签页中,点 Annotations 或 Labels 旁边的铅笔图标。
- 进行相关的更改并点击 Save。
10.6.5. 使用 CLI 删除独立虚拟机实例
您可以使用 oc
CLI 删除独立虚拟机实例。
先决条件
- 找出要删除的 VMI 的名称。
流程
运行以下命令来创建 VMI:
$ oc delete vmi <vmi_name>
10.6.6. 使用 web 控制台删除独立虚拟机实例
从 web 控制台删除独立虚拟机实例(VMI)。
流程
- 在 OpenShift Container Platform web 控制台中,从侧边菜单中点 Virtualization → VirtualMachines。
- 点 Actions → Delete VirtualMachineInstance。
- 在弹出的确认窗口中点击 Delete 永久删除独立的 VMI。
10.7. 控制虚拟机状态
您可从 web 控制台来停止、启动和重启虚拟机。
您可使用 virtctl
管理虚拟机状态并从 CLI 执行其他操作。例如,您可以使用 virtctl
来强制停止虚拟机或公开端口。
10.7.1. 启动虚拟机
您可从 web 控制台启动虚拟机。
流程
- 在侧边菜单中点 Virtualization → VirtualMachines。
- 找到包含要启动的虚拟机的行。
导航到适合您的用例的菜单:
要保留此页面(您可以在其中对多个虚拟机执行操作):
-
点击
位于行右边的 Options 菜单。
-
点击
在启动虚拟机前,要查看有关所选虚拟机的综合信息:
- 点虚拟机名称访问 VirtualMachine 详情页面。
- 点 Actions。
- 选择 Restart。
- 在确认窗口中,点 Start 启动虚拟机。
首次启动从 URL
源置备的虚拟机时,当 OpenShift Virtualization 从 URL 端点导入容器时,虚拟机将处于 Importing 状态。根据镜像大小,该过程可能需要几分钟时间。
10.7.2. 重启虚拟机
您可从 web 控制台重启正在运行的虚拟机。
为了避免错误,不要重启状态为 Importing 的虚拟机。
流程
- 在侧边菜单中点 Virtualization → VirtualMachines。
- 找到包含要启动的虚拟机的行。
导航到适合您的用例的菜单:
要保留此页面(您可以在其中对多个虚拟机执行操作):
-
点击
位于行右边的 Options 菜单。
-
点击
要在重启前查看有关所选虚拟机的综合信息:
- 点虚拟机名称访问 VirtualMachine 详情页面。
- 点 Actions → Restart。
- 在确认窗口中,点击 Restart 重启虚拟机。
10.7.3. 停止虚拟机
您可从 web 控制台停止虚拟机。
流程
- 在侧边菜单中点 Virtualization → VirtualMachines。
- 找到包含您要停止的虚拟机的行。
导航到适合您的用例的菜单:
要保留此页面(您可以在其中对多个虚拟机执行操作):
-
点击
位于行右边的 Options 菜单。
-
点击
在停止之前,查看所选虚拟机的综合信息:
- 点虚拟机名称访问 VirtualMachine 详情页面。
- 点 Actions → Stop。
- 在确认窗口中,点击 Stop 停止虚拟机。
10.7.4. 取消暂停虚拟机
您可从 web 控制台取消暂停一个正暂停的虚拟机。
先决条件
至少一个虚拟机的状态是 Paused。
注意您可以使用
virtctl
客户端暂停虚拟机。
流程
- 在侧边菜单中点 Virtualization → VirtualMachines。
- 找到包含您要取消暂停的虚拟机的行。
导航到适合您的用例的菜单:
要保留此页面(您可以在其中对多个虚拟机执行操作):
- 在 Status 栏中点 Paused。
要在取消暂停之前查看所选虚拟机的综合信息:
- 点虚拟机名称访问 VirtualMachine 详情页面。
- 点击位于 Status 右侧的铅笔图标。
- 在确认窗口中,点击 Unpause 来取消暂停虚拟机。
10.8. 访问虚拟机控制台
OpenShift Virtualization 提供不同的虚拟机控制台,您可使用这些控制台来完成不同的产品任务。您可以使用 CLI 命令通过 OpenShift Container Platform Web 控制台和访问这些控制台。
10.8.1. 在 OpenShift Container Platform web 控制台中访问虚拟机控制台
您可以使用 OpenShift Container Platform web 控制台中的串口控制台或 VNC 控制台连接至虚拟机。
您可以使用 OpenShift Container Platform Web 控制台中的 desktop viewer 控制台(使用 RDP(远程桌面协议)连接到 Windows 虚拟机。
10.8.1.1. 连接至串行控制台
从 web 控制台的 VirtualMachine 详情页中的 Console 选项卡连接至正在运行的虚拟机的串行控制台。
流程
- 在 OpenShift Container Platform 控制台中,从侧边菜单中点 Virtualization → VirtualMachines。
- 选择虚拟机以打开 VirtualMachine 详情页面。
- 点击 Console 选项卡。默认会打开 VNC 控制台。
- 点 Disconnect 以确保一次只打开一个控制台会话。否则,VNC 控制台会话会在后台保持活跃。
- 点击 VNC Console 下拉菜单并选择 Serial Console。
- 点 Disconnect 结束控制台会话。
- 可选:点 Open Console in New Window 在一个单独的窗口中打开串口控制台。
10.8.1.2. 连接至 VNC 控制台
从 web 控制台的 VirtualMachine 详情页中的 Console 选项卡连接至正在运行的虚拟机的 VNC 控制台。
流程
- 在 OpenShift Container Platform 控制台中,从侧边菜单中点 Virtualization → VirtualMachines。
- 选择虚拟机以打开 VirtualMachine 详情页面。
- 点击 Console 选项卡。默认会打开 VNC 控制台。
- 可选:点 Open Console in New Window 在一个单独的窗口中打开 VNC 控制台。
- 可选:点 Send Key 将密钥组合发送到虚拟机。
- 点控制台窗口外,然后点 Disconnect 结束会话。
10.8.1.3. 通过 RDP 连接至 Windows 虚拟机
Desktop viewer 控制台利用远程桌面协议 (RDP),为连接至 Windows 虚拟机提供更好的控制台体验。
要使用 RDP 连接至 Windows 虚拟机,请从 web 控制台上 Virtual Machine Details 屏幕中的 Consoles 选项卡下载虚拟机的 console.rdp
文件,并将其提供给您首选的 RDP 客户端。
先决条件
-
正在运行的 Windows 虚拟机装有 QEMU 客户机代理。VirtIO 驱动程序中包含
qemu-guest-agent
。 - 与 Windows 虚拟机处于相同网络的机器上装有 RDP 客户端。
流程
- 在 OpenShift Container Platform 控制台中,从侧边菜单中点 Virtualization → VirtualMachines。
- 点 Windows 虚拟机打开 VirtualMachine 详情页。
- 点击 Console 选项卡。
- 从控制台列表中,选择 Desktop viewer。
-
点击 Launch Remote Desktop 下载
console.rdp
文件。 -
参考您首选的 RDP 客户端中的
console.rdp
文件,以连接到 Windows 虚拟机。
10.8.1.4. 在虚拟机间切换显示
如果您的 Windows 虚拟机附加了 vGPU,您可以使用 web 控制台在默认显示和 vGPU 显示间切换。
先决条件
-
介质设备在
HyperConverged
自定义资源中配置,并分配给虚拟机。 - 虚拟机正在运行。
流程
- 在 OpenShift Container Platform 控制台中点 Virtualization → VirtualMachines
- 选择 Windows 虚拟机以打开 Overview 屏幕。
- 点击 Console 选项卡。
- 从控制台列表中,选择 VNC 控制台。
从 Send Key 列表选择适当的组合:
-
要访问默认虚拟机显示,请选择
Ctl + Alt+ 1
。 -
要访问 vGPU 显示,请选择
Ctl + Alt + 2
。
-
要访问默认虚拟机显示,请选择
其他资源
10.8.1.5. 使用 Web 控制台复制 SSH 命令
复制命令,以通过 SSH 连接到虚拟机 (VM) 终端。
流程
- 在 OpenShift Container Platform 控制台中,从侧边菜单中点 Virtualization → VirtualMachines。
-
点虚拟机的 Options 菜单
,然后选择 Copy SSH 命令。
- 将其粘贴到终端中以访问虚拟机。
10.8.2. 使用 CLI 命令访问虚拟机控制台
10.8.2.1. 使用 virtctl 通过 SSH 访问虚拟机
您可使用 virtctl ssh
命令,使用本地 SSH 客户端将 SSH 流量转发到虚拟机 (VM)。
control plane 上的高 SSH 流量可能会减慢 API 服务器的速度。如果您定期需要大量连接,请使用专用的 Kubernetes Service
对象来访问虚拟机。
先决条件
-
您可以使用
cluster-admin
权限访问 OpenShift Container Platform 集群。 -
已安装 OpenShift CLI(
oc
)。 -
已安装
virtctl
客户端。 - 您要访问的虚拟机正在运行。
- 您与虚拟机位于同一个项目中。
流程
使用
ssh-keygen
命令生成 SSH 公钥对:$ ssh-keygen -f <key_file> 1
- 1
- 指定要存储密钥的文件。
创建一个 SSH 身份验证 secret,其中包含用于访问虚拟机的 SSH 公钥:
$ oc create secret generic my-pub-key --from-file=key1=<key_file>.pub
在
VirtualMachine
清单中添加对 secret 的引用。例如:apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: testvm spec: running: true template: spec: accessCredentials: - sshPublicKey: source: secret: secretName: my-pub-key 1 propagationMethod: configDrive: {} 2 # ...
- 重启虚拟机以应用您的更改。
运行以下命令通过 SSH 访问虚拟机:
$ virtctl ssh -i <key_file> <vm_username>@<vm_name>
可选: 要安全地向虚拟机或虚拟机传输文件,请使用以下命令:
将文件从机器复制到虚拟机
$ virtctl scp -i <key_file> <filename> <vm_username>@<vm_name>:
将文件从虚拟机复制到您的机器中
$ virtctl scp -i <key_file> <vm_username@<vm_name>:<filename> .
其他资源
10.8.2.2. 访问虚拟机实例的串行控制台
virtctl console
命令可打开特定虚拟机实例的串行控制台。
先决条件
-
必须安装
virt-viewer
软件包。 - 您要访问的虚拟机实例必须正在运行。
流程
使用
virtctl
连接至串行控制台:$ virtctl console <VMI>
10.8.2.3. 使用 VNC 访问虚拟机实例的图形控制台
virtctl
客户端实用程序可使用 remote-viewer
功能打开正在运行的虚拟机实例的图形控制台。该功能包含在 virt-viewer
软件包中。
先决条件
-
必须安装
virt-viewer
软件包。 - 您要访问的虚拟机实例必须正在运行。
如果要通过 SSH 在远程机器上使用 virtctl
,您必须将 X 会话转发至您的机器。
流程
使用
virtctl
实用程序连接至图形界面:$ virtctl vnc <VMI>
如果命令失败,请尝试使用
-v
标志来收集故障排除信息:$ virtctl vnc <VMI> -v 4
10.8.2.4. 通过 RDP 控制台连接至 Windows 虚拟机
使用本地远程桌面协议 (RDP) 客户端创建 Kubernetes Service
对象以连接到 Windows 虚拟机(VM)。
先决条件
-
正在运行的 Windows 虚拟机装有 QEMU 客户机代理。VirtIO 驱动程序中包含
qemu-guest-agent
对象。 - 在本地机器上安装了 RDP 客户端。
流程
编辑
VirtualMachine
清单,为创建服务添加标签:apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: vm-ephemeral namespace: example-namespace spec: running: false template: metadata: labels: special: key 1 # ...
- 1
- 在
spec.template.metadata.labels
部分添加标签special: key
。
注意虚拟机上的标签会传递到 pod。
special: key
标签必须与Service
清单的spec.selector
属性中的标签匹配。-
保存
VirtualMachine
清单文件以应用更改。 创建
Service
清单以公开虚拟机:apiVersion: v1 kind: Service metadata: name: rdpservice 1 namespace: example-namespace 2 spec: ports: - targetPort: 3389 3 protocol: TCP selector: special: key 4 type: NodePort 5 # ...
-
保存
Service
清单文件。 运行以下命令来创建服务:
$ oc create -f <service_name>.yaml
- 启动虚拟机。如果虚拟机已在运行,重启它。
查询
Service
对象以验证它是否可用:$ oc get service -n example-namespace
NodePort
服务的输出示例NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE rdpservice NodePort 172.30.232.73 <none> 3389:30000/TCP 5m
运行以下命令来获取节点的 IP 地址:
$ oc get node <node_name> -o wide
输出示例
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP node01 Ready worker 6d22h v1.24.0 192.168.55.101 <none>
- 在首选的 RDP 客户端中指定节点 IP 地址和分配的端口。
- 输入用户名和密码以连接到 Windows 虚拟机。
10.9. 使用 sysprep 自动执行 Windows 安装
您可以使用 Microsoft DVD 镜像和 sysprep
自动安装、设置和软件置备 Windows 虚拟机。
10.9.1. 使用 Windows DVD 创建虚拟机磁盘镜像
Microsoft 不提供下载的磁盘镜像,但您可以使用 Windows DVD 创建磁盘镜像。然后,可以使用此磁盘镜像来创建虚拟机。
流程
- 在 OpenShift Virtualization web 控制台中,点 Storage → PersistentVolumeClaims → Create PersistentVolumeClaim With Data upload form。
- 选择预期的项目。
- 设置 持久性卷声明名称。
- 从 Windows DVD 上传虚拟机磁盘镜像。该镜像现在可作为引导源来创建新的 Windows 虚拟机。
10.9.2. 使用磁盘镜像安装 Windows
您可以使用磁盘镜像在虚拟机上安装 Windows。
先决条件
- 您必须使用 Windows DVD 创建磁盘镜像。
-
您必须创建一个
autounattend.xml
回答文件。详情请查看 Microsoft 文档。
流程
- 在 OpenShift Container Platform 控制台中,从侧边菜单中点 Virtualization → Catalog。
- 选择 Windows 模板并点 Customize VirtualMachine。
- 从 Disk source 列表中选择 Upload(Upload a new file to a PVC),并浏览 DVD 镜像。
- 点 Review and create VirtualMachine。
- 清除 Clone available operating system source to this Virtual Machine。
- 清除 Start this VirtualMachine after creation。
- 在 Scripts 选项卡的 Sysprep 部分,点 Edit。
-
浏览到
autounattend.xml
回答文件,然后点保存。 - 点 Create VirtualMachine。
-
在 YAML 标签页中,将
running:false
替换为runStrategy: RerunOnFailure
,点 Save。
虚拟机将从包含 autounattend.xml
回答文件的 sysprep
磁盘开始。
10.9.3. 使用 sysprep 常规调整 Windows 虚拟机
常规化镜像允许该镜像在部署虚拟机上时删除所有特定于系统的配置数据。
在常规调整虚拟机前,您必须确保 sysprep
工具在无人值守的 Windows 安装后无法检测到应答文件。
流程
- 在 OpenShift Container Platform 控制台中点 Virtualization → VirtualMachines。
- 选择 Windows 虚拟机以打开 VirtualMachine 详情页。
- 点 Disks 选项卡。
-
点
sysprep
磁盘的 Options 菜单,然后选择 Detach。
- 单击 Detach。
-
重命名
C:\Windows\Panther\unattend.xml
以避免sysprep
工具对其进行检测。 运行以下命令启动
sysprep
程序:%WINDIR%\System32\Sysprep\sysprep.exe /generalize /shutdown /oobe /mode:vm
-
sysprep
工具完成后,Windows 虚拟机将关闭。VM 的磁盘镜像现在可作为 Windows 虚拟机的安装镜像使用。
现在,您可以对虚拟机进行特殊化。
10.9.4. 专用 Windows 虚拟机
专用虚拟机(VM)将配置从常规化 Windows 镜像到虚拟机中的计算机特定信息。
先决条件
- 您必须有一个通用的 Windows 磁盘镜像。
-
您必须创建一个
unattend.xml
回答文件。详情请查看 Microsoft 文档。
流程
- 在 OpenShift Container Platform 控制台中点 Virtualization → Catalog。
- 选择 Windows 模板并点 Customize VirtualMachine。
- 从 Disk source 列表中选择 PVC(clone PVC)。
- 指定通用 Windows 镜像的持久性卷声明项目和持久性卷声明名称。
- 点 Review and create VirtualMachine。
- 点 Scripts 选项卡。
-
在 Sysprep 部分中,点 Edit,浏览到
unattend.xml
回答文件,然后点保存。 - 点 Create VirtualMachine。
在初次启动过程中,Windows 使用 unattend.xml
回答文件来专注于虚拟机。虚拟机现在可供使用。
10.9.5. 其他资源
10.10. 解决故障节点来触发虚拟机故障切换
如果节点失败,并且没有在集群中部署 机器健康检查,则带有 RunStrategy: Always
配置的虚拟机(VM)不会被自动重新定位到健康的节点上。要触发虚拟机故障切换,您必须手动删除 Node
对象。
如果使用安装程序置备的基础架构安装集群,并且正确地配置了机器健康检查:
- 故障节点会被自动回收。
-
RunStrategy
被设置为Always
或RerunOnFailure
的虚拟机会自动调度到健康的节点上。
10.10.1. 先决条件
-
运行虚拟机的节点具有
NotReady
条件。 -
在故障节点中运行的虚拟机的
RunStrategy
设置为Always
。 -
已安装 OpenShift CLI(
oc
)。
10.10.2. 从裸机集群中删除节点
当您使用 CLI 删除节点时,节点对象会从 Kubernetes 中删除,但该节点上存在的 pod 不会被删除。任何未由复制控制器支持的裸机 pod 都无法从 OpenShift Container Platform 访问。由复制控制器支持的 Pod 会重新调度到其他可用的节点。您必须删除本地清单 pod。
流程
通过完成以下步骤,从裸机上运行的 OpenShift Container Platform 集群中删除节点:
将节点标记为不可调度:
$ oc adm cordon <node_name>
排空节点上的所有 pod:
$ oc adm drain <node_name> --force=true
如果节点离线或者无响应,此步骤可能会失败。即使节点没有响应,它仍然在运行写入共享存储的工作负载。为了避免数据崩溃,请在进行操作前关闭物理硬件。
从集群中删除节点:
$ oc delete node <node_name>
虽然节点对象现已从集群中删除,但它仍然可在重启后或 kubelet 服务重启后重新加入集群。要永久删除该节点及其所有数据,您必须弃用该节点。
- 如果您关闭了物理硬件,请重新打开它以便节点可以重新加入集群。
10.10.3. 验证虚拟机故障切换
在不健康节点上终止所有资源后,会为每个重新定位的虚拟机在健康的节点上自动创建新虚拟机实例(VMI)。要确认已创建了 VMI,使用 oc
CLI 查看所有 VMI。
10.10.3.1. 使用 CLI 列出所有虚拟机实例
您可以使用 oc
命令行界面(CLI)列出集群中的所有虚拟机实例(VMI),包括独立 VMI 和虚拟机拥有的实例。
流程
运行以下命令列出所有 VMI:
$ oc get vmis
10.11. 在虚拟机上安装 QEMU 客户机代理
QEMU 客户机代理是在虚拟机上运行的一个守护进程,它会将有关虚拟机、用户、文件系统和从属网络的信息传递给主机。
10.11.1. 在 Linux 虚拟机上安装 QEMU 客户机代理
qemu-guest-agent
广泛可用,默认在红帽虚拟机中可用。安装代理并启动服务。
要检查您的虚拟机 (VM) 是否已安装并运行 QEMU 客户机代理,请验证 AgentConnected
是否列在 VM spec 中。
要为具有最高完整性的在线(Running 状态)虚拟机创建快照,请安装 QEMU 客户机代理。
QEMU 客户机代理通过尝试静止虚拟机的文件系统来尽可能取一个一致的快照,具体取决于系统工作负载。这样可确保在进行快照前将 in-flight I/O 写入磁盘。如果没有客户机代理,则无法静止并生成最佳快照。执行快照的条件反映在 web 控制台或 CLI 中显示的快照声明中。
流程
- 通过其中一个控制台或通过 SSH 访问虚拟机命令行。
在虚拟机上安装 QEMU 客户机代理:
$ yum install -y qemu-guest-agent
确保服务持久并启动它:
$ systemctl enable --now qemu-guest-agent
10.11.2. 在 Windows 虚拟机上安装 QEMU 客户机代理
对于 Windows 虚拟机,QEMU 客户机代理包含在 VirtIO 驱动程序中。在现有或者新的 Windows 安装上安装驱动程序。
要检查您的虚拟机 (VM) 是否已安装并运行 QEMU 客户机代理,请验证 AgentConnected
是否列在 VM spec 中。
要为具有最高完整性的在线(Running 状态)虚拟机创建快照,请安装 QEMU 客户机代理。
QEMU 客户机代理通过尝试静止虚拟机的文件系统来尽可能取一个一致的快照,具体取决于系统工作负载。这样可确保在进行快照前将 in-flight I/O 写入磁盘。如果没有客户机代理,则无法静止并生成最佳快照。执行快照的条件反映在 web 控制台或 CLI 中显示的快照声明中。
10.11.2.1. 在现有 Windows 虚拟机上安装 VirtIO 驱动程序
从附加的 SATA CD 驱动器将 VirtIO 驱动程序安装到现有 Windows 虚拟机。
该流程使用通用方法为 Windows 添加驱动。具体流程可能会因 Windows 版本而稍有差异。有关具体安装步骤,请参阅您的 Windows 版本安装文档。
流程
- 启动虚拟机并连接至图形控制台。
- 登录 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 关闭窗口。
- 重启虚拟机以完成驱动程序安装。
10.11.2.2. 在 Windows 安装过程中安装 VirtIO 驱动程序
在 Windows 安装过程中,从附加的 SATA CD 驱动程序安装 VirtIO 驱动程序。
该流程使用通用方法安装 Windows,且安装方法可能因 Windows 版本而异。有关您要安装的 Windows 版本,请参阅相关文档。
流程
- 启动虚拟机并连接至图形控制台。
- 开始 Windows 安装过程。
- 选择 Advanced 安装。
-
加载驱动程序前无法识别存储目的地。点击
Load driver
。 - 驱动程序将附加为 SATA CD 驱动器。点击 OK 并浏览 CD 驱动器以加载存储驱动程序。驱动程序将按照其驱动程序类型、操作系统和 CPU 架构分层排列。
- 对所有所需驱动程序重复前面两步。
- 完成 Windows 安装。
10.12. 查看虚拟机的 QEMU 客户机代理信息
当 QEMU 客户机代理在虚拟机上运行时,您可以使用 web 控制台查看有关虚拟机、用户、文件系统和从属网络的信息。
10.12.1. 先决条件
- 在虚拟机上安装 QEMU 客户机代理。
10.12.2. 关于 web 控制台中的 QEMU 客户机代理信息
安装 QEMU 客户机代理后,VirtualMachine 详情页中的 Overview 和 Details 选项卡会显示主机名、操作系统、时区和登录用户的信息。
VirtualMachine 详情页面会显示在虚拟机上安装的客户端操作系统的信息。Details 标签显示有登录用户信息的表。Disks 标签页显示含有文件系统信息的表格。
如果没有安装 QEMU 客户机代理,Overview 和 Details 选项卡将显示有关创建虚拟机时指定的操作系统的信息。
10.12.3. 在 web 控制台中查看 QEMU 客户机代理信息
您可以使用 web 控制台查看由 QEMU 客户机代理传递给主机的虚拟机信息。
流程
- 在侧边菜单中点 Virtualization → VirtualMachines。
- 选择虚拟机名称以打开 VirtualMachine 详情页。
- 点 Details 选项卡查看活跃用户。
- 点 Disks 标签查看文件系统的信息。
10.13. 在虚拟机中管理配置映射、secret 和服务帐户
您可以使用 secret、配置映射和服务帐户将配置数据传递给虚拟机。例如,您可以:
- 通过向虚拟机添加 secret 来授予虚拟机对需要凭证的服务的访问权限。
- 在配置映射中存储非机密配置数据,以便 pod 或另一个对象可以使用这些数据。
- 允许组件通过将服务帐户与该组件关联来访问 API 服务器。
OpenShift Virtualization 将 secret、配置映射和服务帐户作为虚拟机磁盘公开,以便可以在平台间使用这些 secret、ConfigMap 和服务帐户而无需额外的开销。
10.13.1. 将 secret、配置映射或服务帐户添加到虚拟机
使用 OpenShift Container Platform Web 控制台向虚拟机添加 secret、配置映射或服务帐户。
这些资源作为磁盘添加到虚拟机中。您可在挂载任何其他磁盘时挂载 secret、配置映射或服务帐户。
如果虚拟机正在运行,则更改在重启虚拟机之后才会生效。新添加的资源在页面顶部的 Pending Changes 中的 Environment 和 Disks 都会标记为改变待处理。
先决条件
- 要添加的 secret、配置映射或服务帐户必须与目标虚拟机位于同一命名空间中。
流程
- 在侧边菜单中点 Virtualization → VirtualMachines。
- 选择虚拟机以打开 VirtualMachine 详情页面。
- 在 Environment 选项卡中,点 Add Config Map、Secret or Service Account。
- 点 Select a resource,从列表中选择一个资源。为所选资源自动生成带有六个字符的序列号。
- 可选:点 Reload 将环境恢复到其上次保存的状态。
- 点击 Save。
验证
- 在 VirtualMachine 详情页中,点 Disks 选项卡,验证 secret、配置映射或服务帐户是否包含在磁盘列表中。
- 点 Actions → Restart 重启虚拟机。
现在,您可以在挂载任何其他磁盘时挂载 secret、配置映射或服务帐户。
10.13.2. 从虚拟机中删除 secret、配置映射或服务帐户
使用 OpenShift Container Platform Web 控制台从虚拟机中删除 secret、配置映射或服务帐户。
先决条件
- 您必须至少有一个 secret、配置映射或服务帐户附加到虚拟机。
流程
- 在侧边菜单中点 Virtualization → VirtualMachines。
- 选择虚拟机以打开 VirtualMachine 详情页面。
- 点 Environment 标签页。
-
在列表中找到您要删除的项目,然后点击项目右侧的 Remove
。
- 点击 Save。
您可以点击 Reload 将表单重置为最后一个保存的状态。
验证
- 在 VirtualMachine 详情页,点 Disks 选项卡。
- 检查以确保删除的 secret、配置映射或服务帐户不再包含在磁盘列表中。
10.13.3. 其他资源
10.14. 在现有 Windows 虚拟机上安装 VirtIO 驱动程序
10.14.1. 关于 VirtIO 驱动程序
VirtIO 驱动程序是 Microsoft Windows 虚拟机在 OpenShift Virtualization 中运行时所需的半虚拟化设备驱动程序。受支持的驱动程序可在 红帽生态系统目录的 container-native-virtualization/virtio-win
容器磁盘中找到。
必须将 container-native-virtualization/virtio-win
容器磁盘作为 SATA CD 驱动器附加到虚拟机,以启用驱动程序安装。您可在虚拟机安装 Windows 期间安装 VirtIO 驱动程序,或将其附加到现有 Windows 安装。
安装完驱动程序后,可从虚拟机中移除 container-native-virtualization/virtio-win
容器磁盘。
10.14.2. Microsoft Windows 虚拟机支持的 VirtIO 驱动程序
表 10.3. 支持的驱动程序
驱动程序名称 | 硬件 ID | 描述 |
---|---|---|
viostor |
VEN_1AF4&DEV_1001 | 块驱动程序。有时会在 Other devices 组中显示为 SCSI Controller。 |
viorng |
VEN_1AF4&DEV_1005 | 熵源(entropy)驱动程序。有时会在 Other devices 组中显示为 PCI Device。 |
NetKVM |
VEN_1AF4&DEV_1000 | 网络驱动程序。有时会在 Other devices 组中显示为 Ethernet Controller。仅在配置了 VirtIO NIC 时可用。 |
10.14.3. 将 VirtIO 驱动程序容器磁盘添加到虚拟机中
针对 Microsoft Windows 的 OpenShift Virtualization VirtIO 驱动程序作为一个容器磁盘提供,可在 Red Hat Ecosystem Catalog 中找到。要为 Windows 虚拟机安装这些驱动程序,请在虚拟机配置文件中将 container-native-virtualization/virtio-win
容器磁盘作为 SATA CD 驱动器附加到虚拟机。
先决条件
-
从 Red Hat Ecosystem Catalog 下载
container-native-virtualization/virtio-win
容器磁盘。这一步并非强制要求,因为如果集群中不存在容器磁盘,将从 Red Hat registry 中下载,但通过此步下载可节省安装时间。
流程
将
container-native-virtualization/virtio-win
容器磁盘作为cdrom
磁盘添加到 Windows 虚拟机配置文件中。如果集群中还没有容器磁盘,将从 registry 中下载。spec: domain: devices: disks: - name: virtiocontainerdisk bootOrder: 2 1 cdrom: bus: sata volumes: - containerDisk: image: container-native-virtualization/virtio-win name: virtiocontainerdisk
- 1
- OpenShift Virtualization 按照
VirtualMachine
配置文件中定义的顺序启动虚拟机磁盘。您可将虚拟机的其他磁盘定义到container-native-virtualization/virtio-win
容器磁盘前面,也可使用bootOrder
可选参数来确保虚拟机从正确磁盘启动。如果为一个磁盘指定bootOrder
,则必须为配置中的所有磁盘指定。
虚拟机启动后,磁盘随即可用:
-
如果要将容器磁盘添加到正在运行的虚拟机,请在 CLI 中执行
oc apply -f <vm.yaml>
,或重启虚拟机,以使更改生效。 -
如果虚拟机还未运行,则使用
virtctl start <vm>
。
-
如果要将容器磁盘添加到正在运行的虚拟机,请在 CLI 中执行
虚拟机启动后,可从附加的 SATA CD 驱动器安装 VirtIO 驱动程序。
10.14.4. 在现有 Windows 虚拟机上安装 VirtIO 驱动程序
从附加的 SATA CD 驱动器将 VirtIO 驱动程序安装到现有 Windows 虚拟机。
该流程使用通用方法为 Windows 添加驱动。具体流程可能会因 Windows 版本而稍有差异。有关具体安装步骤,请参阅您的 Windows 版本安装文档。
流程
- 启动虚拟机并连接至图形控制台。
- 登录 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 关闭窗口。
- 重启虚拟机以完成驱动程序安装。
10.14.5. 从虚拟机移除 VirtIO 容器磁盘
在向虚拟机安装完所有所需 VirtIO 驱动程序后,container-native-virtualization/virtio-win
容器磁盘便不再需要附加到虚拟机。从虚拟机配置文件中移除 container-native-virtualization/virtio-win
容器磁盘。
流程
编辑配置文件并移除
disk
和volume
。$ oc edit vm <vm-name>
spec: domain: devices: disks: - name: virtiocontainerdisk bootOrder: 2 cdrom: bus: sata volumes: - containerDisk: image: container-native-virtualization/virtio-win name: virtiocontainerdisk
- 重启虚拟机以使更改生效。
10.15. 在新 Windows 虚拟机上安装 VirtIO 驱动程序
10.15.1. 先决条件
- Windows 安装介质可访问虚拟机,比如将 ISO 导入到数据卷并将其附加到虚拟机。
10.15.2. 关于 VirtIO 驱动程序
VirtIO 驱动程序是 Microsoft Windows 虚拟机在 OpenShift Virtualization 中运行时所需的半虚拟化设备驱动程序。受支持的驱动程序可在 红帽生态系统目录的 container-native-virtualization/virtio-win
容器磁盘中找到。
必须将 container-native-virtualization/virtio-win
容器磁盘作为 SATA CD 驱动器附加到虚拟机,以启用驱动程序安装。您可在虚拟机安装 Windows 期间安装 VirtIO 驱动程序,或将其附加到现有 Windows 安装。
安装完驱动程序后,可从虚拟机中移除 container-native-virtualization/virtio-win
容器磁盘。
10.15.3. Microsoft Windows 虚拟机支持的 VirtIO 驱动程序
表 10.4. 支持的驱动程序
驱动程序名称 | 硬件 ID | 描述 |
---|---|---|
viostor |
VEN_1AF4&DEV_1001 | 块驱动程序。有时会在 Other devices 组中显示为 SCSI Controller。 |
viorng |
VEN_1AF4&DEV_1005 | 熵源(entropy)驱动程序。有时会在 Other devices 组中显示为 PCI Device。 |
NetKVM |
VEN_1AF4&DEV_1000 | 网络驱动程序。有时会在 Other devices 组中显示为 Ethernet Controller。仅在配置了 VirtIO NIC 时可用。 |
10.15.4. 将 VirtIO 驱动程序容器磁盘添加到虚拟机中
针对 Microsoft Windows 的 OpenShift Virtualization VirtIO 驱动程序作为一个容器磁盘提供,可在 Red Hat Ecosystem Catalog 中找到。要为 Windows 虚拟机安装这些驱动程序,请在虚拟机配置文件中将 container-native-virtualization/virtio-win
容器磁盘作为 SATA CD 驱动器附加到虚拟机。
先决条件
-
从 Red Hat Ecosystem Catalog 下载
container-native-virtualization/virtio-win
容器磁盘。这一步并非强制要求,因为如果集群中不存在容器磁盘,将从 Red Hat registry 中下载,但通过此步下载可节省安装时间。
流程
将
container-native-virtualization/virtio-win
容器磁盘作为cdrom
磁盘添加到 Windows 虚拟机配置文件中。如果集群中还没有容器磁盘,将从 registry 中下载。spec: domain: devices: disks: - name: virtiocontainerdisk bootOrder: 2 1 cdrom: bus: sata volumes: - containerDisk: image: container-native-virtualization/virtio-win name: virtiocontainerdisk
- 1
- OpenShift Virtualization 按照
VirtualMachine
配置文件中定义的顺序启动虚拟机磁盘。您可将虚拟机的其他磁盘定义到container-native-virtualization/virtio-win
容器磁盘前面,也可使用bootOrder
可选参数来确保虚拟机从正确磁盘启动。如果为一个磁盘指定bootOrder
,则必须为配置中的所有磁盘指定。
虚拟机启动后,磁盘随即可用:
-
如果要将容器磁盘添加到正在运行的虚拟机,请在 CLI 中执行
oc apply -f <vm.yaml>
,或重启虚拟机,以使更改生效。 -
如果虚拟机还未运行,则使用
virtctl start <vm>
。
-
如果要将容器磁盘添加到正在运行的虚拟机,请在 CLI 中执行
虚拟机启动后,可从附加的 SATA CD 驱动器安装 VirtIO 驱动程序。
10.15.5. 在 Windows 安装过程中安装 VirtIO 驱动程序
在 Windows 安装过程中,从附加的 SATA CD 驱动程序安装 VirtIO 驱动程序。
该流程使用通用方法安装 Windows,且安装方法可能因 Windows 版本而异。有关您要安装的 Windows 版本,请参阅相关文档。
流程
- 启动虚拟机并连接至图形控制台。
- 开始 Windows 安装过程。
- 选择 Advanced 安装。
-
加载驱动程序前无法识别存储目的地。点击
Load driver
。 - 驱动程序将附加为 SATA CD 驱动器。点击 OK 并浏览 CD 驱动器以加载存储驱动程序。驱动程序将按照其驱动程序类型、操作系统和 CPU 架构分层排列。
- 对所有所需驱动程序重复前面两步。
- 完成 Windows 安装。
10.15.6. 从虚拟机移除 VirtIO 容器磁盘
在向虚拟机安装完所有所需 VirtIO 驱动程序后,container-native-virtualization/virtio-win
容器磁盘便不再需要附加到虚拟机。从虚拟机配置文件中移除 container-native-virtualization/virtio-win
容器磁盘。
流程
编辑配置文件并移除
disk
和volume
。$ oc edit vm <vm-name>
spec: domain: devices: disks: - name: virtiocontainerdisk bootOrder: 2 cdrom: bus: sata volumes: - containerDisk: image: container-native-virtualization/virtio-win name: virtiocontainerdisk
- 重启虚拟机以使更改生效。
10.16. 使用虚拟可信平台模块设备
通过编辑 VirtualMachine
(VM)或 VirtualMachineInstance
(VMI)清单,将虚拟 Trusted Platform 模块(vTPM)设备添加到新的或现有虚拟机中。
10.16.1. 关于 vTPM 设备
虚拟可信平台模块(vTPM)设备功能,如物理信任平台模块(TPM)硬件芯片。
您可以将 vTPM 设备与任何操作系统一起使用,但 Windows 11 需要存在 TPM 芯片用来安装或引导的 TPM 芯片。vTPM 设备允许从 Windows 11 镜像创建的虚拟机在没有物理 TPM 芯片的情况下正常工作。
如果没有启用 vTPM,则虚拟机无法识别 TPM 设备,即使节点有一个。
vTPM 设备还可通过在没有物理硬件的情况下暂时存储 secret 来保护虚拟机。但是,当前不支持将 vTPM 用于持久性 secret 存储。vTPM 在虚拟机关闭后丢弃存储的 secret。
10.16.2. 将 vTPM 设备添加到虚拟机
将虚拟 Trusted Platform 模块(vTPM)设备添加到虚拟机(VM)可让您从 Windows 11 镜像创建的虚拟机,而无需物理 TPM 设备。vTPM 设备还会为该虚拟机临时存储 secret。
流程
运行以下命令以更新虚拟机配置:
$ oc edit vm <vm_name>
编辑 VM
spec
,使其包含tpm: {}
行。例如:apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: example-vm spec: template: spec: domain: devices: tpm: {} 1 ...
- 1
- 在虚拟机中添加 TPM 设备。
- 若要应用您的更改,请保存并退出编辑器。
- 可选:如果编辑了正在运行的虚拟机,您必须重启它才能使更改生效。
10.17. 使用 OpenShift Pipelines 管理虚拟机
Red Hat OpenShift Pipelines 是一个 Kubernetes 原生 CI/CD 框架,允许开发人员在其自己的容器中设计和运行 CI/CD 管道的每个步骤。
Tekton Tasks Operator (TTO) 将 OpenShift Virtualization 与 Pipelines 集成。TTO 包含集群任务和示例管道,允许您:
- 创建和管理虚拟机 (VM)、持久性卷声明 (PVC) 和数据卷
- 在虚拟机中运行命令
-
使用
libguestfs
工具操作磁盘镜像
使用 Red Hat OpenShift Pipelines 管理虚拟机只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
10.17.1. 先决条件
-
您可以使用
cluster-admin
权限访问 OpenShift Container Platform 集群。 -
已安装 OpenShift CLI(
oc
)。 - 已安装 Pipelines。
10.17.2. 部署 Tekton Tasks Operator 资源
安装 OpenShift Virtualization 时,默认不会部署 Tekton Tasks Operator (TTO) 集群任务和示例管道。要部署 TTO 资源,请在 HyperConverged
自定义资源 (CR) 中启用 deployTektonTaskResources
功能门。
流程
运行以下命令,在默认编辑器中打开
HyperConverged
CR:$ oc edit hco -n openshift-cnv kubevirt-hyperconverged
将
spec.featureGates.deployTektonTaskResources
字段设置为true
。apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: kubevirt-hyperconverged spec: tektonPipelinesNamespace: <user_namespace> 1 featureGates: deployTektonTaskResources: true 2 #...
注意即使稍后禁用功能门,集群任务和示例管道仍可用。
- 保存更改并退出编辑器。
10.17.3. Tekton Tasks Operator 支持的虚拟机任务
下表显示了作为 Tekton Tasks Operator 一部分的集群任务。
表 10.5. Tekton Tasks Operator 支持的虚拟机任务
任务 | 描述 |
---|---|
| 从模板创建虚拟机。 |
| 复制虚拟机模板。 |
| 修改虚拟机模板。 |
| 创建和删除数据卷或数据源。 |
| 在虚拟机上运行脚本或命令,并在之后停止或删除虚拟机。 |
|
使用 |
|
使用 |
| 等待虚拟机实例的特定状态,并根据状态失败或成功。 |
10.17.4. 管道示例
Tekton Tasks Operator 包含以下 Pipeline
清单示例。您可以使用 Web 控制台或 CLI 运行示例管道。
- Windows 10 安装程序管道
- 此管道将 Windows 10 安装到来自 Windows 安装镜像(ISO 文件) 的新数据卷中。自定义应答文件用于运行安装过程。
- Windows 10 自定义管道
- 此管道克隆基本 Windows 10 安装的数据卷,通过安装 Microsoft SQL Server Express 进行自定义,然后创建新镜像和模板。
10.17.4.1. 使用 Web 控制台运行示例管道
您可以从 web 控制台中的 Pipelines 菜单运行示例管道。
流程
- 在侧边菜单中点 Pipelines → Pipelines。
- 选择一个管道以打开 Pipeline 详情页面。
- 从 Actions 列表中,选择 Start。此时会显示 Start Pipeline 对话框。
- 保留参数的默认值,然后点 Start 运行管道。Details 选项卡跟踪每个任务的进度,并显示管道状态。
10.17.4.2. 使用 CLI 运行示例管道
使用 PipelineRun
资源来运行示例管道。PipelineRun
对象是管道的运行实例。它使用集群上的特定输入、输出和执行参数来实例化 Pipeline 执行。它还为管道中的每个任务创建一个 TaskRun
对象。
流程
要运行 Windows 10 安装程序管道,请创建以下
PipelineRun
清单:apiVersion: tekton.dev/v1beta1 kind: PipelineRun metadata: generateName: windows10-installer-run- labels: pipelinerun: windows10-installer-run spec: params: - name: winImageDownloadURL value: <link_to_windows_10_iso> 1 pipelineRef: name: windows10-installer taskRunSpecs: - pipelineTaskName: copy-template taskServiceAccountName: copy-template-task - pipelineTaskName: modify-vm-template taskServiceAccountName: modify-vm-template-task - pipelineTaskName: create-vm-from-template taskServiceAccountName: create-vm-from-template-task - pipelineTaskName: wait-for-vmi-status taskServiceAccountName: wait-for-vmi-status-task - pipelineTaskName: create-base-dv taskServiceAccountName: modify-data-object-task - pipelineTaskName: cleanup-vm taskServiceAccountName: cleanup-vm-task status: {}
- 1
- 指定 Windows 10 64 位 ISO 文件的 URL。产品语言必须是 English (United States)。
应用
PipelineRun
清单:$ oc apply -f windows10-installer-run.yaml
要运行 Windows 10 自定义管道,请创建以下
PipelineRun
清单:apiVersion: tekton.dev/v1beta1 kind: PipelineRun metadata: generateName: windows10-customize-run- labels: pipelinerun: windows10-customize-run spec: params: - name: allowReplaceGoldenTemplate value: true - name: allowReplaceCustomizationTemplate value: true pipelineRef: name: windows10-customize taskRunSpecs: - pipelineTaskName: copy-template-customize taskServiceAccountName: copy-template-task - pipelineTaskName: modify-vm-template-customize taskServiceAccountName: modify-vm-template-task - pipelineTaskName: create-vm-from-template taskServiceAccountName: create-vm-from-template-task - pipelineTaskName: wait-for-vmi-status taskServiceAccountName: wait-for-vmi-status-task - pipelineTaskName: create-base-dv taskServiceAccountName: modify-data-object-task - pipelineTaskName: cleanup-vm taskServiceAccountName: cleanup-vm-task - pipelineTaskName: copy-template-golden taskServiceAccountName: copy-template-task - pipelineTaskName: modify-vm-template-golden taskServiceAccountName: modify-vm-template-task status: {}
应用
PipelineRun
清单:$ oc apply -f windows10-customize-run.yaml
10.17.5. 其他资源
10.18. 高级虚拟机管理
10.18.1. 为虚拟机使用资源配额
为虚拟机创建和管理资源配额。
10.18.1.1. 为虚拟机设置资源配额限制
只有使用请求自动用于虚拟机 (VM) 的资源配额。如果您的资源配额使用限制,则必须为虚拟机手动设置资源限值。资源限值必须至少大于资源请求的 100 MiB。
流程
通过编辑
VirtualMachine
清单来为虚拟机设置限值。例如:apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: with-limits spec: running: false template: spec: domain: # ... resources: requests: memory: 128Mi limits: memory: 256Mi 1
- 1
- 这个配置被支持,因为
limits.memory
值至少比requests.memory
的值大100Mi
。
-
保存
VirtualMachine
清单。
10.18.1.2. 其他资源
10.18.2. 为虚拟机指定节点
您可以使用节点放置规则将虚拟机放置到特定的节点上。
10.18.2.1. 关于虚拟机的节点放置
要确保虚拟机在适当的节点上运行,您可以配置节点放置规则。如果出现以下情况,您可能需要进行此操作:
- 您有多台虚拟机。为确保容错,您希望它们在不同节点上运行。
- 您有两个 chatty 虚拟机。为了避免冗余节点间路由,您希望虚拟机在同一节点上运行。
- 您的虚拟机需要所有可用节点上不存在的特定硬件功能。
- 您有一个 pod 可以向节点添加功能,并想将虚拟机放置到该节点上,以便它可以使用这些功能。
虚拟机放置依赖于工作负载的现有节点放置规则。如果组件级别上的特定节点排除工作负载,则虚拟机无法放置在这些节点上。
您可以在 VirtualMachine
清单的 spec
字段中使用以下规则类型:
nodeSelector
- 允许将虚拟机调度到使用此字段中指定的键值对标记的节点上。节点必须具有与所有列出的对完全匹配的标签。
关联性
这可让您使用更具表达力的语法来设置与虚拟机匹配的规则。例如,您可以指定规则是首选项,而非硬要求,因此在规则不满足时仍然可以调度虚拟机。虚拟机放置支持 Pod 关联性、pod 反关联性和节点关联性。Pod 关联性适用于虚拟机,因为
VirtualMachine
工作负载类型基于Pod
对象。注意关联性规则仅在调度期间应用。如果不再满足限制,OpenShift Container Platform 不会重新调度正在运行的工作负载。
容限(tolerations)
- 允许将虚拟机调度到具有匹配污点的节点。如果污点应用到某个节点,则该节点只接受容许该污点的虚拟机。
10.18.2.2. 节点放置示例
以下示例 YAML 文件片断使用 nodePlacement
、affinity
和 tolerations
字段为虚拟机自定义节点放置。
10.18.2.2.1. 示例:使用 nodeSelector 放置虚拟机节点
在本例中,虚拟机需要一个包含 example-key-1 = example-value-1
和 example-key-2 = example-value-2
标签的元数据的节点。
如果没有节点适合此描述,则不会调度虚拟机。
VM 清单示例
metadata: name: example-vm-node-selector apiVersion: kubevirt.io/v1 kind: VirtualMachine spec: template: spec: nodeSelector: example-key-1: example-value-1 example-key-2: example-value-2 ...
10.18.2.2.2. 示例:使用 pod 关联性和 pod 反关联性的虚拟机节点放置
在本例中,虚拟机必须调度到具有标签 example-key-1 = example-value-1
的正在运行的 pod 的节点上。如果没有在任何节点上运行这样的 pod,则不会调度虚拟机。
如果可能,虚拟机不会调度到具有标签 example-key-2 = example-value-2
的 pod 的节点上。但是,如果所有候选节点都有具有此标签的 pod,调度程序会忽略此约束。
VM 清单示例
metadata: name: example-vm-pod-affinity apiVersion: kubevirt.io/v1 kind: VirtualMachine spec: affinity: podAffinity: requiredDuringSchedulingIgnoredDuringExecution: 1 - labelSelector: matchExpressions: - key: example-key-1 operator: In values: - example-value-1 topologyKey: kubernetes.io/hostname podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: 2 - weight: 100 podAffinityTerm: labelSelector: matchExpressions: - key: example-key-2 operator: In values: - example-value-2 topologyKey: kubernetes.io/hostname ...
10.18.2.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 清单示例
metadata: name: example-vm-node-affinity apiVersion: kubevirt.io/v1 kind: VirtualMachine spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: 1 nodeSelectorTerms: - matchExpressions: - key: example.io/example-key operator: In values: - example-value-1 - example-value-2 preferredDuringSchedulingIgnoredDuringExecution: 2 - weight: 1 preference: matchExpressions: - key: example-node-label-key operator: In values: - example-node-label-value ...
10.18.2.2.4. 示例:带有容限的虚拟机节点放置
在本例中,为虚拟机保留的节点已使用 key=virtualization:NoSchedule
污点标记。由于此虚拟机具有匹配的容限
,它可以调度到污点节点上。
容许污点的虚拟机不需要调度到具有该污点的节点。
VM 清单示例
metadata: name: example-vm-tolerations apiVersion: kubevirt.io/v1 kind: VirtualMachine spec: tolerations: - key: "key" operator: "Equal" value: "virtualization" effect: "NoSchedule" ...
10.18.2.3. 其他资源
10.18.3. 配置证书轮转
配置证书轮转参数以替换现有证书。
10.18.3.1. 配置证书轮转
您可以在 web 控制台中的 OpenShift Virtualization 安装过程中,或者在安装 HyperConverged
自定义资源(CR)后完成此操作。
流程
运行以下命令打开
HyperConverged
CR:$ oc edit hco -n openshift-cnv kubevirt-hyperconverged
按照以下示例所示,编辑
spec.certConfig
字段。要避免系统过载,请确保所有值都大于或等于 10 分钟。将所有值显示为符合 golangParseDuration
格式的字符串。apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: certConfig: ca: duration: 48h0m0s renewBefore: 24h0m0s 1 server: duration: 24h0m0s 2 renewBefore: 12h0m0s 3
- 将 YAML 文件应用到集群。
10.18.3.2. 证书轮转参数故障排除
删除一个或多个 certConfig
值会导致它们恢复到默认值,除非默认值与以下条件之一冲突:
-
ca.renewBefore
的值必须小于或等于ca.duration
的值。 -
server.duration
的值必须小于或等于ca.duration
的值。 -
server.renewBefore
的值必须小于或等于server.duration
的值。
如果默认值与这些条件冲突,您将收到错误。
如果您删除了以下示例中的 server.duration
值,则默认值 24h0m0s
大于 ca.duration
的值,并与指定条件冲突。
示例
certConfig: ca: duration: 4h0m0s renewBefore: 1h0m0s server: duration: 4h0m0s renewBefore: 4h0m0s
这会生成以下出错信息:
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 值。
10.18.4. 为虚拟机使用 UEFI 模式
您可以使用统一可扩展固件接口(UEFI)模式引导虚拟机(VM)。
10.18.4.1. 关于虚拟机的 UEFI 模式
像旧的 BIOS 一样,统一可扩展固件接口(UEFI)在计算机启动时初始化硬件组件和操作系统镜像文件。与 BIOS 相比,UEFI 支持更现代的功能和自定义选项,从而加快启动速度。
它将初始化和启动的所有信息保存在带有 .efi
扩展的文件中,该扩展被保存在名为 EFI 系统分区(ESP)的特殊分区中。ESP 还包含安装在计算机上的操作系统的引导装载程序程序。
10.18.4.2. 在 UEFI 模式中引导虚拟机
您可以通过编辑 VirtualMachine
清单,将虚拟机配置为在 UEFI 模式中引导。
先决条件
-
安装 OpenShift CLI (
oc
) 。
流程
编辑或创建
VirtualMachine
清单文件。使用spec.firmware.bootloader
小节来配置 UEFI 模式:使用安全引导活跃在 UEFI 模式中引导
apiversion: kubevirt.io/v1 kind: VirtualMachine metadata: labels: special: vm-secureboot name: vm-secureboot spec: template: metadata: labels: special: vm-secureboot spec: domain: devices: disks: - disk: bus: virtio name: containerdisk features: acpi: {} smm: enabled: true 1 firmware: bootloader: efi: secureBoot: true 2 ...
运行以下命令,将清单应用到集群:
$ oc create -f <file_name>.yaml
10.18.5. 为虚拟机配置 PXE 启动
OpenShift Virtualization 中提供 PXE 启动或网络启动。网络启动支持计算机启动和加载操作系统或其他程序,无需本地连接的存储设备。例如,在部署新主机时,您可使用 PXE 启动从 PXE 服务器中选择所需操作系统镜像。
10.18.5.1. 先决条件
- Linux 网桥必须已连接。
- PXE 服务器必须作为网桥连接至相同 VLAN。
10.18.5.2. 使用指定的 MAC 地址的 PXE 引导
作为管理员,您可首先为您的 PXE 网络创建 NetworkAttachmentDefinition
对象,以此通过网络引导客户端。然后在启动虚拟机实例前,在您的虚拟机实例配置文件中引用网络附加定义。如果 PXE 服务器需要,您还可在虚拟机实例配置文件中指定 MAC 地址。
先决条件
- 必须已连接 Linux 网桥。
- PXE 服务器必须作为网桥连接至相同 VLAN。
流程
在集群上配置 PXE 网络:
为 PXE 网络
pxe-net-conf
创建网络附加定义文件:apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: pxe-net-conf spec: config: '{ "cniVersion": "0.3.1", "name": "pxe-net-conf", "plugins": [ { "type": "cnv-bridge", "bridge": "br1", "vlan": 1 1 }, { "type": "cnv-tuning" 2 } ] }'
注意虚拟机实例将通过所请求的 VLAN 的访问端口附加到网桥
br1
。
使用您在上一步中创建的文件创建网络附加定义:
$ oc create -f pxe-net-conf.yaml
编辑虚拟机实例配置文件以包括接口和网络的详情。
如果 PXE 服务器需要,请指定网络和 MAC 地址。如果未指定 MAC 地址,则会自动分配一个值。
请确保
bootOrder
设置为1
,以便该接口先启动。在本例中,该接口连接到了名为<pxe-net>
的网络中:interfaces: - masquerade: {} name: default - bridge: {} name: pxe-net macAddress: de:00:00:00:00:de bootOrder: 1
注意启动顺序对于接口和磁盘全局通用。
为磁盘分配一个启动设备号,以确保置备操作系统后能够正确启动。
将磁盘
bootOrder
值设置为2
:devices: disks: - disk: bus: virtio name: containerdisk bootOrder: 2
指定网络连接到之前创建的网络附加定义。在这种情况下,
<pxe-net>
连接到名为<pxe-net-conf>
的网络附加定义:networks: - name: default pod: {} - name: pxe-net multus: networkName: pxe-net-conf
创建虚拟机实例:
$ oc create -f vmi-pxe-boot.yaml
输出示例
virtualmachineinstance.kubevirt.io "vmi-pxe-boot" created
等待虚拟机实例运行:
$ oc get vmi vmi-pxe-boot -o yaml | grep -i phase phase: Running
使用 VNC 查看虚拟机实例:
$ virtctl vnc vmi-pxe-boot
- 查看启动屏幕,验证 PXE 启动是否成功。
登录虚拟机实例:
$ virtctl console vmi-pxe-boot
验证虚拟机上的接口和 MAC 地址,并验证连接到网桥的接口是否具有指定的 MAC 地址。在本例中,我们使用了
eth1
进行 PXE 启动,无需 IP 地址。另一接口eth0
从 OpenShift Container Platform 获取 IP 地址。$ ip addr
输出示例
... 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
10.18.5.3. 模板:用于 PXE 启动的虚拟机配置文件
apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: creationTimestamp: null labels: special: vm-pxe-boot name: vm-pxe-boot spec: template: metadata: labels: special: vm-pxe-boot spec: domain: devices: disks: - disk: bus: virtio name: containerdisk bootOrder: 2 - disk: bus: virtio name: cloudinitdisk interfaces: - masquerade: {} name: default - bridge: {} name: pxe-net macAddress: de:00:00:00:00:de bootOrder: 1 machine: type: "" resources: requests: memory: 1024M networks: - name: default pod: {} - multus: networkName: pxe-net-conf name: pxe-net terminationGracePeriodSeconds: 180 volumes: - name: containerdisk containerDisk: image: kubevirt/fedora-cloud-container-disk-demo - cloudInitNoCloud: userData: | #cloud-config user: fedora password: fedora chpasswd: {expire: False} name: cloudinitdisk status: {}
10.18.5.4. OpenShift Virtualization 术语表
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)
-
节点上请求的网络配置的描述。您可以通过将
NodeNetworkConfigurationPolicy
清单应用到集群来更新节点网络配置,包括添加和删除网络接口 。 - 预启动执行环境 (PXE)
- 一种接口,让管理员能够通过网络从服务器启动客户端机器。网络启动可用于为客户端远程加载操作系统和其他软件。
10.18.6. 在虚拟机中使用巨页
您可以使用巨页作为集群中虚拟机的后备内存。
10.18.6.1. 先决条件
- 节点必须配置预先分配的巨页。
10.18.6.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 中,可将虚拟机配置为消耗预先分配的巨页。
10.18.6.3. 为虚拟机配置巨页
您可以在虚拟机配置中包括 memory.hugepages.pageSize
和 resources.requests.memory
参数来配置虚拟机来使用预分配的巨页。
内存请求必须按页大小分离。例如,您不能对大小为 1Gi
的页请求 500Mi
内存。
主机的内存布局和客户端操作系统不相关。虚拟机清单中请求的巨页适用于 QEMU。客户端中的巨页只能根据虚拟机实例的可用内存量来配置。
如果您编辑了正在运行的虚拟机,则必须重启虚拟机才能使更改生效。
先决条件
- 节点必须配置预先分配的巨页。
流程
在虚拟机配置中,把
resources.requests.memory
和memory.hugepages.pageSize
参数添加到spec.domain
。以下配置片段适用于请求总计4Gi
内存的虚拟机,页面大小为1Gi
:kind: VirtualMachine ... spec: domain: resources: requests: memory: "4Gi" 1 memory: hugepages: pageSize: "1Gi" 2 ...
应用虚拟机配置:
$ oc apply -f <virtual_machine>.yaml
10.18.7. 为虚拟机启用专用资源
要提高性能,您可以将节点的资源(如 CPU)专用于特定的一个虚拟机。
10.18.7.1. 关于专用资源
当为您的虚拟机启用专用资源时,您的工作负载将会在不会被其他进程使用的 CPU 上调度。通过使用专用资源,您可以提高虚拟机性能以及延迟预测的准确性。
10.18.7.2. 先决条件
-
节点上必须配置 CPU Manager。在调度虚拟机工作负载前,请确认节点具有
cpumanager = true
标签。 - 虚拟机必须关机。
10.18.7.3. 为虚拟机启用专用资源
您可以在 Details 选项卡中为虚拟机启用专用资源。从红帽模板创建的虚拟机可以使用专用资源进行配置。
流程
- 在 OpenShift Container Platform 控制台中,从侧边菜单中点 Virtualization → VirtualMachines。
- 选择虚拟机以打开 VirtualMachine 详情页面。
- 在 Scheduling 选项卡中,点 Dedicated Resources 旁边的铅笔图标。
- 选择 Schedule this workload with dedicated resources (guaranteed policy)。
- 点 Save。
10.18.8. 调度虚拟机
在确保虚拟机的 CPU 模型和策略属性与节点支持的 CPU 模型和策略属性兼容的情况下,可在节点上调度虚拟机(VM)。
10.18.8.1. 策略属性
您可以指定策略属性和在虚拟机调度到节点上时匹配的 CPU 功能来调度虚拟机(VM)。为虚拟机指定的策略属性决定了如何在节点上调度该虚拟机。
策略属性 | 描述 |
---|---|
force | VM 被强制调度到某个节点上。即使主机 CPU 不支持虚拟机的 CPU,也是如此。 |
require | 在虚拟机没有使用特定 CPU 模型和功能规格配置时,应用于虚拟机的默认策略。如果节点没有配置为支持使用此默认策略属性或其他策略属性的 CPU 节点发现,则虚拟机不会调度到该节点上。主机 CPU 必须支持虚拟机的 CPU,或者虚拟机监控程序必须可以模拟支持的 CPU 模型。 |
optional | 如果主机物理机器 CPU 支持该虚拟机,则虚拟机会被添加到节点。 |
disable | 无法通过 CPU 节点发现调度虚拟机。 |
forbid | 即使主机 CPU 支持该功能,且启用了 CPU 节点发现,也不会调度虚拟机。 |
10.18.8.2. 设置策略属性和 CPU 功能
您可以为每个虚拟机(VM)设置策略属性和 CPU 功能,以确保根据策略和功能在节点上调度该功能。验证您设置的 CPU 功能以确保主机 CPU 支持或者虚拟机监控程序模拟该功能。
10.18.8.3. 使用支持的 CPU 型号调度虚拟机
您可以为虚拟机 (VM) 配置 CPU 模型,将其调度到支持其 CPU 模型的节点。
流程
编辑虚拟机配置文件的
domain
spec。以下示例显示了为虚拟机定义的特定 CPU 模型:apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: myvm spec: template: spec: domain: cpu: model: Conroe 1
- 1
- 虚拟机的 CPU 模型.
10.18.8.4. 使用主机模型调度虚拟机
当将虚拟机(VM)的 CPU 模型设置为 host-model
时,虚拟机会继承调度节点的 CPU 模型。
流程
编辑虚拟机配置文件的
domain
spec。以下示例演示了为虚拟机指定host-model
:apiVersion: kubevirt/v1alpha3 kind: VirtualMachine metadata: name: myvm spec: template: spec: domain: cpu: model: host-model 1
- 1
- 继承调度节点的 CPU 模型的虚拟机。
10.18.9. 配置 PCI 透传
借助 Peripheral Component Interconnect(PCI)透传功能,您可以从虚拟机访问和管理硬件设备。配置 PCI 透传后,PCI 设备的功能就如同它们实际上附加到客户机操作系统上一样。
集群管理员可以使用 oc
CLI 来公开和管理集群中允许在集群中使用的主机设备。
10.18.9.1. 关于为 PCI 透传准备主机设备
要使用 CLI 为 PCI 透传准备主机设备,请创建一个 MachineConfig
对象并添加内核参数,以启用输入输出内存管理单元(IOMMU)。将 PCI 设备绑定到虚拟功能 I/O(VFIO)驱动程序,然后通过编辑 HyperConverged
自定义资源(CR)的 allowedHostDevices
字段在集群中公开它。首次安装 OpenShift Virtualization Operator 时,allowedHostDevices
列表为空。
要使用 CLI 从集群中删除 PCI 主机设备,可从 HyperConverged
CR 中删除 PCI 设备信息。
10.18.9.1.1. 添加内核参数以启用 IOMMU 驱动程序
要在内核中启用 IOMMU(Input-Output Memory Management Unit)驱动程序,请创建 MachineConfig
对象并添加内核参数。
先决条件
- 正常运行的 OpenShift 容器平台集群的管理特权。
- Intel 或 AMD CPU 硬件。
- 启用用于直接 I/O 扩展的 Intel 虚拟化技术或 BIOS 中的 AMD IOMMU(基本输入/输出系统)。
流程
创建用于标识内核参数的
MachineConfig
对象。以下示例显示了 Intel CPU 的内核参数。apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: labels: machineconfiguration.openshift.io/role: worker 1 name: 100-worker-iommu 2 spec: config: ignition: version: 3.2.0 kernelArguments: - intel_iommu=on 3 ...
创建新的
MachineConfig
对象:$ oc create -f 100-worker-kernel-arg-iommu.yaml
验证
验证是否添加了新的
MachineConfig
对象。$ oc get MachineConfig
10.18.9.1.2. 将 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
输出示例
02:01.0 3D controller [0302]: NVIDIA Corporation GV100GL [Tesla V100 PCIe 32GB] [10de:1eb8] (rev a1)
创建 Butane 配置文件
100-worker-vfiopci.bu
,将 PCI 设备绑定到 VFIO 驱动程序。注意有关 Butane 的信息,请参阅"使用 Butane 创建机器配置"。
示例
variant: openshift version: 4.12.0 metadata: name: 100-worker-vfiopci labels: machineconfiguration.openshift.io/role: worker 1 storage: files: - path: /etc/modprobe.d/vfio.conf mode: 0644 overwrite: true contents: inline: | options vfio-pci ids=10de:1eb8 2 - path: /etc/modules-load.d/vfio-pci.conf 3 mode: 0644 overwrite: true contents: inline: vfio-pci
使用 Butane 生成
MachineConfig
对象文件100-worker-vfiopci.yaml
,包含要发送到 worker 节点的配置:$ butane 100-worker-vfiopci.bu -o 100-worker-vfiopci.yaml
将
MachineConfig
对象应用到 worker 节点:$ oc apply -f 100-worker-vfiopci.yaml
验证
MachineConfig
对象是否已添加。$ oc get MachineConfig
输出示例
NAME GENERATEDBYCONTROLLER IGNITIONVERSION AGE 00-master d3da910bfa9f4b599af4ed7f5ac270d55950a3a1 3.2.0 25h 00-worker d3da910bfa9f4b599af4ed7f5ac270d55950a3a1 3.2.0 25h 01-master-container-runtime d3da910bfa9f4b599af4ed7f5ac270d55950a3a1 3.2.0 25h 01-master-kubelet d3da910bfa9f4b599af4ed7f5ac270d55950a3a1 3.2.0 25h 01-worker-container-runtime d3da910bfa9f4b599af4ed7f5ac270d55950a3a1 3.2.0 25h 01-worker-kubelet d3da910bfa9f4b599af4ed7f5ac270d55950a3a1 3.2.0 25h 100-worker-iommu 3.2.0 30s 100-worker-vfiopci-configuration 3.2.0 30s
验证
验证是否已加载 VFIO 驱动程序。
$ lspci -nnk -d 10de:
输出确认使用了 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: nouveau
10.18.9.1.3. 使用 CLI 在集群中公开 PCI 主机设备
要在集群中公开 PCI 主机设备,将 PCI 设备的详细信息添加到 HyperConverged
自定义资源(CR)的 spec.permittedHostDevices.pciHostDevices
数组中。
流程
运行以下命令,在默认编辑器中编辑
HyperConverged
CR:$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
将 PCI 设备信息添加到
spec.percommitHostDevices.pciHostDevices
数组。例如:配置文件示例
apiVersion: hco.kubevirt.io/v1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: permittedHostDevices: 1 pciHostDevices: 2 - pciDeviceSelector: "10DE:1DB6" 3 resourceName: "nvidia.com/GV100GL_Tesla_V100" 4 - pciDeviceSelector: "10DE:1EB8" resourceName: "nvidia.com/TU104GL_Tesla_T4" - pciDeviceSelector: "8086:6F54" resourceName: "intel.com/qat" externalResourceProvider: true 5 ...