8.15. 导入虚拟机
8.15.1. 数据卷导入的 TLS 证书
8.15.1.1. 添加用于身份验证数据卷导入的 TLS 证书
registry 或 HTTPS 端点的 TLS 证书必须添加到配置映射中,才能从这些源导入数据。此配置映射必须存在于目标数据卷的命名空间中。
通过引用 TLS 证书的相对文件路径来创建配置映射。
流程
确定您处于正确的命名空间中。配置映射只能被数据卷引用(如果位于同一命名空间中)。
$ oc get ns
创建配置映射:
$ oc create configmap <configmap-name> --from-file=</path/to/file/ca.pem>
8.15.1.2. 示例:从 TLS 证书创建的配置映射
以下示例是从 ca.pem
TLS 证书创建的配置映射。
apiVersion: v1 kind: ConfigMap metadata: name: tls-certs data: ca.pem: | -----BEGIN CERTIFICATE----- ... <base64 encoded cert> ... -----END CERTIFICATE-----
8.15.2. 使用数据卷导入虚拟机镜像
使用 Containerized Data Importer(CDI)通过使用数据卷将虚拟机镜像导入到持久性卷声明(PVC)中。您可以将数据卷附加到虚拟机以获取持久性存储。
虚拟机镜像可以托管在 HTTP 或 HTTPS 端点上,也可以内嵌在容器磁盘中,并存储在容器镜像仓库中。
当您将磁盘镜像导入到 PVC 中时,磁盘镜像扩展为使用 PVC 中请求的全部存储容量。要使用该空间,可能需要扩展虚拟机中的磁盘分区和文件系统。
调整大小的流程因虚拟机上安装的操作系统而异。详情请查看操作系统文档。
8.15.2.1. 先决条件
- 如果端点需要 TLS 证书,该证书必须 包含在与数据卷相同的命名空间中的配置映射 中,并在数据卷配置中引用。
导入容器磁盘:
- 您可能需要从虚拟机镜像准备容器磁盘,并在导入前将其存储在容器镜像仓库中。
-
如果容器镜像仓库没有 TLS,您必须将 registry 添加到
HyperConverged
自定义资源的insecureRegistries
字段中,然后才能从中导入容器磁盘。
- 您可能需要定义存储类或准备 CDI 涂销空间才能成功完成此操作。
8.15.2.2. CDI 支持的操作列表
此列表针对端点显示内容类型支持的 CDI 操作,以及哪些操作需要涂销空间(scratch space)。
内容类型 | HTTP | HTTPS | HTTP 基本身份验证 | Registry | 上传 |
---|---|---|---|---|---|
KubeVirt (QCOW2) |
✓ QCOW2 |
✓ QCOW2** |
✓ QCOW2 |
✓ QCOW2* |
✓ QCOW2* |
KubeVirt (RAW) |
✓ RAW |
✓ RAW |
✓ RAW |
✓ RAW* |
✓ RAW* |
✓ 支持的操作
□ 不支持的操作
* 需要涂销空间
** 如果需要自定义证书颁发机构,则需要涂销空间
CDI 现在使用 OpenShift Container Platform 集群范围的代理配置。
8.15.2.3. 关于数据卷
DataVolume
对象是 Containerized Data Importer (CDI) 项目提供的自定义资源。DataVolume 编配与底层持久性卷声明(PVC)关联的导入、克隆和上传操作。数据卷与 OpenShift Virtualization 集成,它们可在 PVC 准备好前阻止虚拟机启动。
8.15.2.4. 使用数据卷将虚拟机镜像导入到存储中
您可以使用数据卷将虚拟机镜像导入到存储中。
虚拟机镜像可以托管在 HTTP 或 HTTPS 端点上,或者镜像可以构建到容器磁盘中,并存储在容器镜像仓库中。
您可以在 VirtualMachine
配置文件中为镜像指定数据源。创建虚拟机时,包含虚拟机镜像的数据卷将导入到存储中。
先决条件
要导入虚拟机镜像,必须有以下内容:
-
RAW、ISO 或 QCOW2 格式的虚拟机磁盘镜像,可选择使用
xz
或gz
进行压缩。 - 托管镜像的 HTTP 或 HTTPS 端点,以及访问数据源所需的任何身份验证凭证。
-
RAW、ISO 或 QCOW2 格式的虚拟机磁盘镜像,可选择使用
- 要导入容器磁盘,您必须将虚拟机镜像构建到容器磁盘中,并存储在容器镜像仓库中,以及访问数据源所需的任何身份验证凭证。
- 如果虚拟机必须与未由系统 CA 捆绑包签名的证书的服务器通信,则必须在与数据卷相同的命名空间中创建一个配置映射。
流程
如果您的数据源需要身份验证,请创建一个
Secret
清单,指定数据源凭证,并将其保存为endpoint-secret.yaml
:apiVersion: v1 kind: Secret metadata: name: endpoint-secret 1 labels: app: containerized-data-importer type: Opaque data: accessKeyId: "" 2 secretKey: "" 3
应用
Secret
清单:$ oc apply -f endpoint-secret.yaml
编辑
VirtualMachine
清单,为要导入的虚拟机镜像指定数据源,并将其保存为vm-fedora-datavolume.yaml
:apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: creationTimestamp: null labels: kubevirt.io/vm: vm-fedora-datavolume name: vm-fedora-datavolume 1 spec: dataVolumeTemplates: - metadata: creationTimestamp: null name: fedora-dv 2 spec: storage: resources: requests: storage: 10Gi storageClassName: local source: http: 3 url: "https://mirror.arizona.edu/fedora/linux/releases/35/Cloud/x86_64/images/Fedora-Cloud-Base-35-1.2.x86_64.qcow2" 4 secretRef: endpoint-secret 5 certConfigMap: "" 6 status: {} running: true template: metadata: creationTimestamp: null labels: kubevirt.io/vm: vm-fedora-datavolume spec: domain: devices: disks: - disk: bus: virtio name: datavolumedisk1 machine: type: "" resources: requests: memory: 1.5Gi terminationGracePeriodSeconds: 60 volumes: - dataVolume: name: fedora-dv name: datavolumedisk1 status: {}
创建虚拟机:
$ oc create -f vm-fedora-datavolume.yaml
注意oc create
命令创建数据卷和虚拟机。CDI 控制器创建一个带有正确注解和导入过程的底层 PVC。导入完成后,数据卷状态变为Succeeded
。您可以启动虚拟机。数据卷置备在后台进行,因此无需监控进程。
验证
importer pod 从指定的 URL 下载虚拟机镜像或容器磁盘,并将其存储在置备的 PV 上。运行以下命令,查看 importer pod 的状态:
$ oc get pods
运行以下命令监控数据卷,直到其状态为
Succeeded
:$ oc describe dv fedora-dv 1
- 1
- 指定您在
VirtualMachine
清单中定义的数据卷名称。
通过访问其串行控制台来验证置备是否已完成,并且虚拟机是否已启动:
$ virtctl console vm-fedora-datavolume
8.15.2.5. 其他资源
- 配置预分配模式以提高数据卷操作的写入性能。
8.15.3. 使用数据卷将虚拟机镜像导入到块存储中
您可将现有虚拟机镜像导入到您的 OpenShift Container Platform 集群中。OpenShift Virtualization 使用数据卷自动导入数据并创建底层持久性卷声明(PVC)。
当您将磁盘镜像导入到 PVC 中时,磁盘镜像扩展为使用 PVC 中请求的全部存储容量。要使用该空间,可能需要扩展虚拟机中的磁盘分区和文件系统。
调整大小的流程因虚拟机上安装的操作系统而异。详情请查看操作系统文档。
8.15.3.1. 先决条件
- 如果您根据 CDI 支持的操作列表要求涂销空间,您必须首先定义一个 StorageClass 或准备 CDI 涂销空间才能成功完成此操作。
8.15.3.2. 关于数据卷
DataVolume
对象是 Containerized Data Importer (CDI) 项目提供的自定义资源。DataVolume 编配与底层持久性卷声明(PVC)关联的导入、克隆和上传操作。数据卷与 OpenShift Virtualization 集成,它们可在 PVC 准备好前阻止虚拟机启动。
8.15.3.3. 关于块持久性卷
块持久性卷(PV)是一个受原始块设备支持的 PV。这些卷没有文件系统,可以通过降低开销来为虚拟机提供性能优势。
原始块卷可以通过在 PV 和持久性卷声明(PVC)规格中指定 volumeMode: Block
来置备。
8.15.3.4. 创建本地块持久性卷
通过填充文件并将其挂载为循环设备,在节点上创建本地块持久性卷(PV)。然后,您可以在 PV 清单中将该循环设备作为 Block(块)
卷引用,并将其用作虚拟机镜像的块设备。
流程
-
以
root
身份登录节点,在其上创建本地 PV。本流程以node01
为例。 创建一个文件并用空字符填充,以便可将其用作块设备。以下示例创建
loop10
文件,大小为 2Gb(20,100 Mb 块):$ dd if=/dev/zero of=<loop10> bs=100M count=20
将
loop10
文件挂载为 loop 设备。$ losetup </dev/loop10>d3 <loop10> 1 2
创建引用所挂载 loop 设备的
PersistentVolume
清单。kind: PersistentVolume apiVersion: v1 metadata: name: <local-block-pv10> annotations: spec: local: path: </dev/loop10> 1 capacity: storage: <2Gi> volumeMode: Block 2 storageClassName: local 3 accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Delete nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - <node01> 4
创建块 PV。
# oc create -f <local-block-pv10.yaml>1
- 1
- 上一步中创建的持久性卷的文件名。
8.15.3.5. 使用数据卷将虚拟机镜像导入到块存储中
您可以使用数据卷将虚拟机镜像导入到块存储中。在创建虚拟机前,您要在 VirtualMachine
清单中引用数据卷。
先决条件
-
RAW、ISO 或 QCOW2 格式的虚拟机磁盘镜像,可选择使用
xz
或gz
进行压缩。 - 托管镜像的 HTTP 或 HTTPS 端点,以及访问数据源所需的任何身份验证凭证。
流程
如果您的数据源需要身份验证,请创建一个
Secret
清单,指定数据源凭证,并将其保存为endpoint-secret.yaml
:apiVersion: v1 kind: Secret metadata: name: endpoint-secret 1 labels: app: containerized-data-importer type: Opaque data: accessKeyId: "" 2 secretKey: "" 3
应用
Secret
清单:$ oc apply -f endpoint-secret.yaml
创建
DataVolume
清单,为虚拟机镜像指定数据源,并为storage.volumeMode
指定Block
。apiVersion: cdi.kubevirt.io/v1beta1 kind: DataVolume metadata: name: import-pv-datavolume 1 spec: storageClassName: local 2 source: http: url: "https://mirror.arizona.edu/fedora/linux/releases/35/Cloud/x86_64/images/Fedora-Cloud-Base-35-1.2.x86_64.qcow2" 3 secretRef: endpoint-secret 4 storage: volumeMode: Block 5 resources: requests: storage: 10Gi
创建数据卷来导入虚拟机镜像:
$ oc create -f import-pv-datavolume.yaml
在创建虚拟机前,您可以在 VirtualMachine
清单中引用此数据卷。
8.15.3.6. CDI 支持的操作列表
此列表针对端点显示内容类型支持的 CDI 操作,以及哪些操作需要涂销空间(scratch space)。
内容类型 | HTTP | HTTPS | HTTP 基本身份验证 | Registry | 上传 |
---|---|---|---|---|---|
KubeVirt (QCOW2) |
✓ QCOW2 |
✓ QCOW2** |
✓ QCOW2 |
✓ QCOW2* |
✓ QCOW2* |
KubeVirt (RAW) |
✓ RAW |
✓ RAW |
✓ RAW |
✓ RAW* |
✓ RAW* |
✓ 支持的操作
□ 不支持的操作
* 需要涂销空间
** 如果需要自定义证书颁发机构,则需要涂销空间
CDI 现在使用 OpenShift Container Platform 集群范围的代理配置。
8.15.3.7. 其他资源
- 配置预分配模式以提高数据卷操作的写入性能。
8.15.4. 导入单个 Red Hat Virtualization 虚拟机
您可以使用 VM Import 向导或 CLI 将单个 Red Hat Virtualization(RHV)虚拟机导入到 OpenShift Virtualization。
导入 RHV VM 是一个已弃用的功能。弃用的功能仍然包含在 OpenShift Virtualization 中,并且仍然被支持。但是,这个功能会在以后的发行版本中被删除,且不建议在新的部署中使用。
有关 OpenShift Virtualization 中已弃用或删除的主要功能的最新列表,请参阅 OpenShift Virtualization 发行注记中已弃用和删除的功能部分。
这个功能将被虚拟化的 Migration Toolkit 替代。
8.15.4.1. OpenShift Virtualization 存储功能列表
下表描述了支持导入虚拟机的 OpenShift Virtualization 存储类型。
RHV 虚拟机导入 | |
---|---|
OpenShift Container Storage: RBD 块模式卷 | 是 |
OpenShift Virtualization hostpath 置备程序 | 不是 |
其他多节点可写入存储 | 是 [1] |
其他单节点可写入存储 | 是 [2] |
- PVC 必须请求 ReadWriteMany 访问模式。
- PVC 必须请求 ReadWriteOnce 访问模式。
8.15.4.2. 导入虚拟机的先决条件
将 Red Hat Virtualization 虚拟机导入到 OpenShift Virtualization 需要以下先决条件:
- 具有 admin 用户权限。
存储:
- OpenShift Virtualization 本地和共享的持久性存储类必须支持虚拟机导入。
- 如果您使用 Ceph RBD 块模式卷,且可用的存储空间对于虚拟磁盘太小,则导入过程会在完成 75% 的时候停止 20 分钟以上,且迁移也不会成功。web 控制台中没有显示错误消息。BZ#1910019
网络:
- RHV 和 OpenShift Virtualization 网络必须具有相同的名称或被相互映射。
-
RHV VM 网络接口必须是
e1000
、rtl8139
或virtio
。
VM 磁盘:
-
磁盘接口必须是
sata
、virtio_scsi
或者virtio
。 - 不可将该磁盘配置为直接 LUN。
-
磁盘状态不得是
illegal
或locked
。 -
存储类型必须是
image
。 - 必须禁用 SCSI 保留功能。
-
ScsiGenericIO
必需被禁用。
-
磁盘接口必须是
VM 配置:
- 如果 VM 使用 GPU 资源,则必须配置提供 GPU 的节点。
- 不能为 vGPU 资源配置 VM。
-
虚拟机不能具有处于
illegal
状态的磁盘的快照。 - 虚拟机一定不能使用 OpenShift Container Platform 创建,并随后添加到 RHV。
- 虚拟机不能为 USB 设备配置。
-
watchdog 不能是
diag288
。
8.15.4.3. 使用 VM 导入向导(Import wizard)导入虚拟机
您可以使用 VM 导入向导导入单个虚拟机。
流程
-
在 web 控制台中,点 Workloads
Virtual Machines。 - 点击 Create Virtual Machine 并选择 Import with Wizard。
- 从 Provider 列表中选择 Red Hat Virtualization (RHV)。
选择 Connect to New Instance,或一个保存的 RHV 实例。
如果选择 Connect to New Instance,请填写以下字段:
-
API URL:例如
https://<RHV_Manager_FQDN>/ovirt-engine/api
CA certificate:点 Browse 上传 RHV Manager CA 证书或将 CA 证书粘贴到字段。
您可以运行以下命令来查看 CA 证书:
$ openssl s_client -connect <RHV_Manager_FQDN>:443 -showcerts < /dev/null
CA 证书是输出中的第二个证书。
-
Username:RHV Manager 的用户名,例如
ocpadmin@internal
- Password: RHV Manager 密码
-
API URL:例如
- 如果您选择了一个保存的 RHV 实例,向导将使用保存的凭证连接到 RHV 实例。
点击 Check and Save,然后等待连接完成。
注意连接详情存储在 secret 中。如果您提供的供应商带有不正确的 URL、用户名或密码,点 Workloads
Secrets 并删除供应商 secret。 - 选择一个集群和一个虚拟机。
- 点 Next。
- 在 Review 屏幕中,查看您的设置。
- 可选:您可以选择 Start virtual machine on creation。
点 Edit 以更新以下设置:
-
General
Name:虚拟机名称限制为 63 个字符。 General
Description: 虚拟机的描述信息(可选)。 Storage Class:选择 NFS 或 ocs-storagecluster-ceph-rbd。
如果选择 ocs-storagecluster-ceph-rbd,您必须将磁盘的 Volume Mode 设置为 Block。
-
advanced
Volume Mode: 选择 Block。
-
advanced
Volume Mode: 选择 Block。 -
networking
Network:您可以从可用网络附加定义对象列表中选择网络。
-
General
如果您编辑了导入设置,点 Import 或 Review and Import。
此时会显示 Successfully created virtual machine 消息以及为虚拟机创建的资源列表。虚拟机会出现在 Workloads
Virtual Machines 中。
虚拟机向导字段
名称 | 参数 | 描述 |
---|---|---|
名称 |
名称可包含小写字母 ( | |
描述 | 可选的描述字段。 | |
操作系统 | 模板中为虚拟机选择的操作系统。从模板创建虚拟机时,您无法编辑此字段。 | |
引导源 | 通过 URL 导入(创建 PVC) | 从 HTTP 或 HTTPS 端点提供的镜像导入内容。示例:包含操作系统镜像的网页中的 URL 链接。 |
克隆现有的 PVC(创建 PVC) | 选择集群中可用的现有持久性卷声明并克隆它。 | |
通过 Registry 导入(创建 PVC) |
从可通过集群访问的注册表中的可启动操作系统容器置备虚拟机。示例: | |
PXE(网络引导 - 添加网络接口) | 从网络的服务器引导操作系统。需要一个 PXE 可引导网络附加定义。 | |
持久性卷声明项目 | 用于克隆 PVC 的项目名称。 | |
持久性卷声明名称 | 如果您要克隆现有的 PVC,则应用于此虚拟机模板的 PVC 名称。 | |
将它作为光盘引导源挂载 | CD-ROM 需要额外的磁盘来安装操作系统。选择添加磁盘的选择框并稍后进行自定义。 | |
Flavor | tiny、small、Medium、Large、Custom | 根据与该模板关联的操作系统,在虚拟机模板中预设具有预定义值的 CPU 和内存量。
如果选择了默认模板,您可以使用自定义值覆盖模板中的 |
工作负载类型 注意 如果您选择了不正确的 Workload Type,则可能会出现性能或资源利用率问题(如缓慢的 UI)。 | Desktop | 用于桌面的虚拟机配置。适用于小型工作环境。建议与 Web 控制台搭配使用。 |
Server | 在性能和广泛的服务器工作负载兼容性方面具有最佳平衡。 | |
高性能 | 针对高性能负载进行了优化的虚拟机配置。 | |
创建后启动此虚拟机。 | 默认选择这个复选框并在创建后启动虚拟机。如果您不希望虚拟机在创建时启动,请清除该复选框。 |
网络字段
名称 | 描述 |
---|---|
名称 | 网络接口控制器的名称。 |
model | 指明网络接口控制器的型号。支持的值有 e1000e 和 virtio。 |
网络 | 可用网络附加定义的列表。 |
类型 |
可用绑定方法列表。对于默认的 pod 网络, |
MAC 地址 | 网络接口控制器的 MAC 地址。如果没有指定 MAC 地址,则会自动分配一个。 |
存储字段
名称 | 选择 | 描述 |
---|---|---|
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 | 用于创建磁盘的存储类。 | |
Advanced | 定义持久性卷是否使用格式化的文件系统或原始块状态。默认为 Filesystem。 |
高级存储设置
名称 | 参数 | 描述 |
---|---|---|
卷模式 | Filesystem | 在基于文件系统的卷中保存虚拟磁盘。 |
Block |
直接将虚拟磁盘存储在块卷中。只有底层存储支持时才使用 | |
访问模式 [1] | Single User (RWO) | 这个卷可以被一个单一的节点以 read/write 的形式挂载。 |
Shared Access (RWX) | 卷可以被多个节点以读写模式挂载。 | |
Read Only (ROX) | 卷可以被多个节点以只读形式挂载。 |
- 您可以使用命令行界面更改访问模式。
8.15.4.4. 使用 CLI 导入虚拟机
您可以通过 CLI 创建 Secret
和 VirtualMachineImport
自定义资源(CR)来导入虚拟机。Secret
CR 存储 RHV Manager 凭证和 CA 证书。VirtualMachineImport
CR 定义 VM 导入过程的参数。
可选:您可以创建一个与 VirtualMachineImport
CR 分开的 ResourceMapping
CR。ResourceMapping
CR 提供了更大的灵活性,例如导入额外的 RHV VM。
默认目标存储类必须是 NFS。Cinder 不支持 RHV VM 导入。
流程
运行以下命令来创建
Secret
CR:$ cat <<EOF | oc create -f - apiVersion: v1 kind: Secret metadata: name: rhv-credentials namespace: default 1 type: Opaque stringData: ovirt: | apiUrl: <api_endpoint> 2 username: ocpadmin@internal password: 3 caCert: | -----BEGIN CERTIFICATE----- 4 -----END CERTIFICATE----- EOF
$ openssl s_client -connect :443 -showcerts < /dev/null
可选:运行以下命令,创建
ResourceMapping
CR,以将资源映射与VirtualMachineImport
CR 分开:$ cat <<EOF | kubectl create -f - apiVersion: v2v.kubevirt.io/v1alpha1 kind: ResourceMapping metadata: name: resourcemapping_example namespace: default spec: ovirt: networkMappings: - source: name: <rhv_logical_network>/<vnic_profile> 1 target: name: <target_network> 2 type: pod storageMappings: 3 - source: name: <rhv_storage_domain> 4 target: name: <target_storage_class> 5 volumeMode: <volume_mode> 6 EOF
运行以下命令来创建
VirtualMachineImport
CR:$ cat <<EOF | oc create -f - apiVersion: v2v.kubevirt.io/v1beta1 kind: VirtualMachineImport metadata: name: vm-import namespace: default spec: providerCredentialsSecret: name: rhv-credentials namespace: default # resourceMapping: 1 # name: resourcemapping-example # namespace: default targetVmName: vm_example 2 startVm: true source: ovirt: vm: id: <source_vm_id> 3 name: <source_vm_name> 4 cluster: name: <source_cluster_name> 5 mappings: 6 networkMappings: - source: name: <source_logical_network>/<vnic_profile> 7 target: name: <target_network> 8 type: pod storageMappings: 9 - source: name: <source_storage_domain> 10 target: name: <target_storage_class> 11 accessMode: <volume_access_mode> 12 diskMappings: - source: id: <source_vm_disk_id> 13 target: name: <target_storage_class> 14 EOF
- 1
- 如果创建一个
ResourceMapping
CR,取消resourceMapping
部分的注释。 - 2
- 指定目标虚拟机名称。
- 3
- 指定源虚拟机 ID,例如
80554327-0569-496b-bdeb-fcbbf52b827b
。您可以通过在 Manager 机器的网页浏览器中输入https://www.example.com/ovirt-engine/api/vms/
来列出所有虚拟机来获取虚拟机 ID。找到您要导入的虚拟机及其对应的虚拟机 ID。您不需要指定虚拟机名称或集群名称。 - 4
- 如果指定源虚拟机名称,还必须同时指定源集群。不要指定源虚拟机 ID。
- 5
- 如果指定源集群,还必须指定源虚拟机名称。不要指定源虚拟机 ID。
- 6
- 如果创建一个
ResourceMapping
CR,注释掉mappings
部分。 - 7
- 指定源虚拟机的逻辑网络和 vNIC 配置集。
- 8
- 指定 OpenShift Virtualization 网络。
- 9
- 如果在
ResourceMapping
和VirtualMachineImport
CR 中都指定了存储映射,则VirtualMachineImport
CR 将具有优先权。 - 10
- 指定源存储域。
- 11
- 指定目标存储类。
- 12
- 指定
ReadWriteOnce
、ReadWriteMany
或ReadOnlyMany
。如果没有指定访问模式,{virt} 会根据 RHV VM 的 HostMigration 模式 或虚拟磁盘访问模式决定正确的卷访问模式: -
如果 RHV VM 迁移模式是
Allow manual and automatic migration
,则默认访问模式为ReadWriteMany
。 -
如果 RHV 虚拟磁盘访问模式是
ReadOnly
,则默认访问模式为ReadOnlyMany
。 -
对于所有其他设置,默认的访问模式为
ReadWriteOnce
。
-
如果 RHV VM 迁移模式是
- 13
- 指定源虚拟机磁盘 ID,例如
8181ecc1-5db8-4193-9c92-3ddab3be7b05
。您可以通过在 Manager 机器的网页浏览器中输入https://www.example.com/ovirt-engine/api/vms/vm23
并查看虚拟机详情来获取磁盘 ID。 - 14
- 指定目标存储类。
按照虚拟机导入的过程,以验证导入是否成功:
$ oc get vmimports vm-import -n default
显示成功导入的输出结果类似如下:
输出示例
... status: conditions: - lastHeartbeatTime: "2020-07-22T08:58:52Z" lastTransitionTime: "2020-07-22T08:58:52Z" message: Validation completed successfully reason: ValidationCompleted status: "True" type: Valid - lastHeartbeatTime: "2020-07-22T08:58:52Z" lastTransitionTime: "2020-07-22T08:58:52Z" message: 'VM specifies IO Threads: 1, VM has NUMA tune mode specified: interleave' reason: MappingRulesVerificationReportedWarnings status: "True" type: MappingRulesVerified - lastHeartbeatTime: "2020-07-22T08:58:56Z" lastTransitionTime: "2020-07-22T08:58:52Z" message: Copying virtual machine disks reason: CopyingDisks status: "True" type: Processing dataVolumes: - name: fedora32-b870c429-11e0-4630-b3df-21da551a48c0 targetVmName: fedora32
8.15.4.4.1. 创建用于导入虚拟机的配置映射
如果要覆盖默认的 vm-import-controller
映射或添加额外的映射,您可以创建一个配置映射来将 Red Hat Virtualization(RHV)虚拟机操作系统映射到 OpenShift Virtualization 模板。
默认 vm-import-controller
配置映射包含以下 RHV 操作系统,及其对应的通用 OpenShift Virtualization 模板。
RHV 虚拟机操作系统 | OpenShift Virtualization 模板 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
流程
在网页浏览器中,进入
http://<RHV_Manager_FQDN>/ovirt-engine/api/vms/<VM_ID>
找到RHV 虚拟机操作系统的 REST API 名称。操作系统名称会出现在 XML 输出的<os>
部分,如下例所示:... <os> ... <type>rhel_8x64</type> </os>
查看可用 OpenShift Virtualization 模板列表:
$ oc get templates -n openshift --show-labels | tr ',' '\n' | grep os.template.kubevirt.io | sed -r 's#os.template.kubevirt.io/(.*)=.*#\1#g' | sort -u
输出示例
fedora31 fedora32 ... rhel8.1 rhel8.2 ...
- 如果与 RHV 虚拟机操作系统匹配的 OpenShift Virtualization 模板没有出现在可用的模板列表中,使用 OpenShift Virtualization Web 控制台创建一个模板。
创建配置映射将 RHV VM 操作系统映射到 OpenShift Virtualization 模板:
$ cat <<EOF | oc create -f - apiVersion: v1 kind: ConfigMap metadata: name: os-configmap namespace: default 1 data: guestos2common: | "Red Hat Enterprise Linux Server": "rhel" "CentOS Linux": "centos" "Fedora": "fedora" "Ubuntu": "ubuntu" "openSUSE": "opensuse" osinfo2common: | "<rhv-operating-system>": "<vm-template>" 2 EOF
配置映射示例
$ cat <<EOF | oc apply -f - apiVersion: v1 kind: ConfigMap metadata: name: os-configmap namespace: default data: osinfo2common: | "other_linux": "fedora31" EOF
验证是否已创建自定义配置映射:
$ oc get cm -n default os-configmap -o yaml
对
vm-import-controller-config
配置映射进行补丁以应用新的配置映射:$ oc patch configmap vm-import-controller-config -n openshift-cnv --patch '{ "data": { "osConfigMap.name": "os-configmap", "osConfigMap.namespace": "default" 1 } }'
- 1
- 如果在配置映射中更改了命名空间,请更新它。
验证模板是否出现在 OpenShift Virtualization web 控制台中:
-
从侧边菜单中点 Workloads
Virtualization。 - 点 Virtual Machine Templates 标签页,在列表中找到模板。
-
从侧边菜单中点 Workloads
8.15.4.5. 导入虚拟机的故障排除
8.15.4.5.1. 日志
您可以检查 VM Import Controller pod 日志中的错误。
流程
运行以下命令,查看 VM Import Controller pod 的名称:
$ oc get pods -n <namespace> | grep import 1
- 1
- 指定导入虚拟机的命名空间。
输出示例
vm-import-controller-f66f7d-zqkz7 1/1 Running 0 4h49m
运行以下命令查看 VM Import Controller pod 日志:
$ oc logs <vm-import-controller-f66f7d-zqkz7> -f -n <namespace> 1
- 1
- 指定 VM Import Controller pod 名称和命名空间。
8.15.4.5.2. 错误信�
可能会出现以下出错信息:
如果 OpenShift Virtualization 存储 PV 不合适,VM Import Controller pod 日志中会显示以下错误消息,进度条会在 10% 的位置停止:
Failed to bind volumes: provisioning failed for PVC
您必须使用兼容的存储类。不支持 Cinder 存储类。
8.15.4.5.3. 已知问题
- 如果您使用 Ceph RBD 块模式卷,且可用的存储空间对于虚拟磁盘太小,则导入过程会在完成 75% 的时候停止 20 分钟以上,且迁移也不会成功。web 控制台中没有显示错误消息。BZ#1910019
8.15.5. 导入一个单一的 VMware 虚拟机或模板
您可以使用 VM I导入向导将 VMware vSphere 6.5、6.7 或 7.0 VM 或 VM 模板导入到 OpenShift Virtualization 中。如果您导入一个虚拟机模板,OpenShift Virtualization 会根据模板创建一个虚拟机。
导入 VMware VM 是一个已弃用的功能。弃用的功能仍然包含在 OpenShift Virtualization 中,并且仍然被支持。但是,这个功能会在以后的发行版本中被删除,且不建议在新的部署中使用。
有关 OpenShift Virtualization 中已弃用或删除的主要功能的最新列表,请参阅 OpenShift Virtualization 发行注记中已弃用和删除的功能部分。
这个功能将被虚拟化的 Migration Toolkit 替代。
8.15.5.1. OpenShift Virtualization 存储功能列表
下表描述了支持导入虚拟机的 OpenShift Virtualization 存储类型。
VMware VM 导入 | |
---|---|
OpenShift Container Storage: RBD 块模式卷 | 是 |
OpenShift Virtualization hostpath 置备程序 | 是 |
其他多节点可写入存储 | 是 [1] |
其他单节点可写入存储 | 是 [2] |
- PVC 必须请求 ReadWriteMany 访问模式。
- PVC 必须请求 ReadWriteOnce 访问模式。
8.15.5.2. 准备 VDDK 镜像
导入过程使用 VMware Virtual Disk Development Kit(VDDK)来复制 VMware 虚拟磁盘。
您可以下载 VDDK SDK,创建 VDDK 镜像,将镜像上传到镜像 registry,并将其添加到 HyperConverged
自定义资源(CR)的 spec.vddkInitImage
字段中。
您可以配置内部 OpenShift Container Platform 镜像 registry 或 VDDK 镜像的安全外部镜像 registry。该 registry 需要可以被 OpenShift Virtualization 环境访问。
在公共仓库中存储 VDDK 镜像可能会违反 VMware 许可证的条款。
8.15.5.2.1. 配置内部镜像 registry
您可以通过更新 Image Registry Operator 配置在裸机上配置内部 OpenShift Container Platform 镜像 registry。
您可以通过一个路由公开 registry,直接从 OpenShift Container Platform 集群内部或外部访问 registry。
更改镜像 registry 的管理状态
要启动镜像 registry,您必须将 Image Registry Operator 配置的 managementState
从 Removed 改为
Managed
。
流程
将
managementState
Image Registry Operator 配置从Removed 改为
Managed
。例如:$ oc patch configs.imageregistry.operator.openshift.io cluster --type merge --patch '{"spec":{"managementState":"Managed"}}'
为裸机和其他手动安装配置 registry 存储
作为集群管理员,在安装后需要配置 registry 来使用存储。
先决条件
-
您可以使用具有
cluster-admin
角色的用户访问集群。 - 您有一个使用手动置备的 Red Hat Enterprise Linux CoreOS(RHCOS)节点(如裸机)的集群。
已为集群置备了持久性存储,如 Red Hat OpenShift Container Storage。
重要当您只有一个副本时,OpenShift Container Platform 支持对镜像 registry 存储的
ReadWriteOnce
访问。ReadWriteOnce
访问还要求 registry 使用Recreate
rollout 策略。要部署支持高可用性的镜像 registry,需要两个或多个副本,ReadWriteMany
访问。- 必须具有 100Gi 容量。
流程
要将 registry 配置为使用存储,修改
configs.imageregistry/cluster
资源中的spec.storage.pvc
。注意使用共享存储时,请查看您的安全设置以防止外部访问。
验证您没有 registry pod:
$ oc get pod -n openshift-image-registry -l docker-registry=default
输出示例
No resourses found in openshift-image-registry namespace
注意如果您的输出中有一个 registry pod,则不需要继续这个过程。
检查 registry 配置:
$ oc edit configs.imageregistry.operator.openshift.io
输出示例
storage: pvc: claim:
将
claim
字段留空以允许自动创建image-registry-storage
PVC。检查
clusteroperator
状态:$ oc get clusteroperator image-registry
输出示例
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE image-registry 4.7 True False False 6h50m
确保 registry 设置为 managed,以启用镜像的构建和推送。
运行:
$ oc edit configs.imageregistry/cluster
然后,更改行
managementState: Removed
to
managementState: Managed
直接从集群访问registry
您可以从集群内部访问registry。
流程
通过使用内部路由从集群访问registry:
通过获取节点的名称来访问节点:
$ oc get nodes
$ oc debug nodes/<node_name>
要在节点上启用对
oc
和podman
等工具的访问,请将您的根目录改为/host
:sh-4.2# chroot /host
使用您的访问令牌登录到容器镜像registry:
sh-4.2# oc login -u kubeadmin -p <password_from_install_log> https://api-int.<cluster_name>.<base_domain>:6443
sh-4.2# podman login -u kubeadmin -p $(oc whoami -t) image-registry.openshift-image-registry.svc:5000
您应该看到一条确认登录的消息,例如:
Login Succeeded!
注意用户名可以是任何值,令牌包含了所有必要的信息。如果用户名包含冒号,则会导致登录失败。
因为 Image Registry Operator 创建了路由,所以它将与
default-route-openshift-image-registry.<cluster_name>
类似。针对您的registry执行
podman pull
和podman push
操作:重要您可以抓取任意镜像,但是如果已添加了system:registry角色,则只能将镜像推送到您自己的registry中。
在以下示例中,使用:
组件 值 <registry_ip>
172.30.124.220
<port>
5000
<project>
openshift
<image>
image
<tag>
忽略 (默认为
latest
)抓取任意镜像:
sh-4.2# podman pull name.io/image
使用
<registry_ip>:<port>/<project>/<image>
格式标记(tag)新镜像。项目名称必须出现在这个 pull 规范中,以供OpenShift Container Platform 把这个镜像正确放置在 registry 中,并在以后正确访问 registry 中的这个镜像:sh-4.2# podman tag name.io/image image-registry.openshift-image-registry.svc:5000/openshift/image
注意您必须具有指定项目的
system:image-builder
角色,该角色允许用户写或推送镜像。否则,下一步中的podman push
将失败。为了进行测试,您可以创建一个新项目来推送镜像。将新标记的镜像推送到 registry:
sh-4.2# podman push image-registry.openshift-image-registry.svc:5000/openshift/image
手动公开受保护的registry
通过使用路由可以开放从外部访问OpenShift Container Platform registry的通道,用户不再需要从集群内部登录到OpenShift Container Platform registry。这样,您可以使用路由地址从集群外部登录 registry,并使用路由主机标记并推送到现有项目。
先决条件
以下的先决条件会被自动执行:
- 部署 Registry Operator。
- 部署 Ingress Operator。
流程
您可以使用configs.imageregistry.operator.openshift.io
资源中的DefaultRoute
参数或使用自定义路由来公开路由。
使用DefaultRoute
公开registry:
将
DefaultRoute
设置为True
:$ oc patch configs.imageregistry.operator.openshift.io/cluster --patch '{"spec":{"defaultRoute":true}}' --type=merge
使用
podman
登录:$ HOST=$(oc get route default-route -n openshift-image-registry --template='{{ .spec.host }}')
$ podman login -u kubeadmin -p $(oc whoami -t) --tls-verify=false $HOST 1
- 1
- 如果集群的默认路由证书不受信任,则需要
--tls-verify=false
。您可以将一个自定义的可信证书设置为 Ingress Operator 的默认证书。
使用自定义路由公开registry:
使用路由的 TLS 密钥创建一个 secret:
$ oc create secret tls public-route-tls \ -n openshift-image-registry \ --cert=</path/to/tls.crt> \ --key=</path/to/tls.key>
此步骤是可选的。如果不创建一个secret,则路由将使用Ingress Operator的默认TLS配置。
在 Registry Operator 中:
spec: routes: - name: public-routes hostname: myregistry.mycorp.organization secretName: public-route-tls ...
注意如果为registry的路由提供了一个自定义的 TLS 配置,则仅需设置
secretName
。
8.15.5.2.2. 配置外部镜像 registry
如果将外部镜像 registry 用于 VDDK 镜像,您可以将外部镜像 registry 的证书颁发机构添加到 OpenShift Container Platform 集群。
另外,您可以从 Docker 凭证中创建一个 pull secret,并将其添加到您的服务帐户中。
在集群中添加证书颁发机构
您可以按照以下流程将证书颁发机构 (CA) 添加到集群,以便在推送和拉取镜像时使用。
先决条件
- 您必须具有集群管理员特权。
-
您必须有权访问 registry 的公共证书,通常是位于
/etc/docker/certs.d/
目录中的hostname/ca.crt
文件。
流程
在
openshift-config
命名空间中创建一个ConfigMap
,其中包含使用自签名证书的 registry 的可信证书。对于每个 CA 文件,确保ConfigMap
中的键是hostname[..port]
格式的容器镜像仓库的主机名:$ oc create configmap registry-cas -n openshift-config \ --from-file=myregistry.corp.com..5000=/etc/docker/certs.d/myregistry.corp.com:5000/ca.crt \ --from-file=otherregistry.com=/etc/docker/certs.d/otherregistry.com/ca.crt
更新集群镜像配置:
$ oc patch image.config.openshift.io/cluster --patch '{"spec":{"additionalTrustedCA":{"name":"registry-cas"}}}' --type=merge
允许 Pod 引用其他安全 registry 中的镜像
Docker 客户端的 .dockercfg
$HOME/.docker/config.json
文件是一个 Docker 凭证文件,如果您之前已登录安全或不安全的 registry,则该文件会保存您的身份验证信息。
要拉取(pull)并非来自 OpenShift Container Platform 内部 registry 的安全容器镜像,您必须从 Docker 凭证创建一个 pull secret,并将其添加到您的服务帐户。
流程
如果您已有该安全 registry 的
.dockercfg
文件,则可运行以下命令从该文件中创建一个 secret:$ oc create secret generic <pull_secret_name> \ --from-file=.dockercfg=<path/to/.dockercfg> \ --type=kubernetes.io/dockercfg
或者,如果您已有
$HOME/.docker/config.json
文件,则可运行以下命令:$ oc create secret generic <pull_secret_name> \ --from-file=.dockerconfigjson=<path/to/.docker/config.json> \ --type=kubernetes.io/dockerconfigjson
如果您还没有安全 registry 的 Docker 凭证文件,则可运行以下命令创建一个 secret:
$ oc create secret docker-registry <pull_secret_name> \ --docker-server=<registry_server> \ --docker-username=<user_name> \ --docker-password=<password> \ --docker-email=<email>
要使用 secret 为 Pod 拉取镜像,您必须将 secret 添加到您的服务帐户中。本例中服务帐户的名称应与 Pod 使用的服务帐户的名称匹配。默认服务帐户是
default
:$ oc secrets link default <pull_secret_name> --for=pull
8.15.5.2.3. 创建并使用 VDDK 镜像
您可以下载 VMware Virtual Disk Development Kit(VDDK),构建 VDDK 镜像,并将 VDDK 镜像推送到您的镜像 registry。然后,您将 VDDK 镜像添加到 HyperConverged
自定义资源(CR)的 spec.vddkInitImage
字段中。
先决条件
- 您必须有权访问 OpenShift Container Platform 内部镜像 registry 或安全的外部 registry。
流程
创建并导航到临时目录:
$ mkdir /tmp/<dir_name> && cd /tmp/<dir_name>
- 在一个浏览器中,进入 VMware code 并点 SDKs。
- 在 Compute Virtualization 下,点 Virtual Disk Development Kit(VDDK)。
- 选择与 VMware vSphere 版本对应的 VDDK 版本,例如 vSphere 7.0 的 VDDK 7.0,点 Download,然后在临时目录中保存 VDDK 归档。
提取 VDDK 归档:
$ tar -xzf VMware-vix-disklib-<version>.x86_64.tar.gz
创建
Dockerfile
:$ cat > Dockerfile <<EOF FROM busybox:latest COPY vmware-vix-disklib-distrib /vmware-vix-disklib-distrib RUN mkdir -p /opt ENTRYPOINT ["cp", "-r", "/vmware-vix-disklib-distrib", "/opt"] EOF
构建镜像:
$ podman build . -t <registry_route_or_server_path>/vddk:<tag> 1
- 1
- 指定您的镜像 registry:
-
对于内部 OpenShift Container Platform registry,请使用内部 registry 路由,如
image-registry.openshift-image-registry.svc:5000/openshift/vddk:<tag>
。 -
对于外部 registry,指定服务器名称、路径和标签。例如
server.example.com:5000/vddk:<tag>
。
-
对于内部 OpenShift Container Platform registry,请使用内部 registry 路由,如
将镜像推送至 registry:
$ podman push <registry_route_or_server_path>/vddk:<tag>
- 确保镜像可以被 OpenShift Virtualization 环境访问。
编辑 openshift-cnv 项目中的
HyperConverged
CR:$ oc edit hco -n openshift-cnv kubevirt-hyperconverged
将
vddkInitImage
参数添加到spec
小节中:apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: vddkInitImage: <registry_route_or_server_path>/vddk:<tag>
8.15.5.3. 使用 VM 导入向导(Import wizard)导入虚拟机
您可以使用 VM 导入向导导入单个虚拟机。
您还可以导入虚拟机模板。如果您导入一个虚拟机模板,OpenShift Virtualization 会根据模板创建一个虚拟机。
先决条件
- 具有 admin 用户权限。
- VMware Virtual Disk Development Kit(VDDK)镜像必须位于 OpenShift Virtualization 环境可访问的镜像 registry 中。
-
VDDK 镜像必须添加到
HyperConverged
自定义资源(CR)的spec.vddkInitImage
字段中。 - 虚拟机必须关机。
- 虚拟磁盘必须连接到 IDE 或者 SCSI 控制器。如果虚拟磁盘连接到一个 SATA 控制器,您可以将其改为 IDE 控制器,然后迁移虚拟机。
- OpenShift Virtualization 本地和共享的持久性存储类必须支持虚拟机导入。
OpenShift Virtualization 存储必须足够大来保存虚拟磁盘。
警告如果使用 Ceph RBD 块模式卷,则存储必须有足够的空间来存储虚拟磁盘。如果可用存储的大小无法满足磁盘要求,导入过程会失败,且用于复制虚拟磁盘的 PV 也不会被释放。因为没有足够的资源来删除对象,您将无法导入另一个虚拟机或清除存储。要解决这种情况,您必须在存储后端中添加更多对象存储设备。
OpenShift Virtualization 出口网络策略必须允许以下流量:
目的地 协议 端口 VMware ESXi 主机
TCP
443
VMware ESXi 主机
TCP
902
VMware vCenter
TCP
5840
流程
-
在 web 控制台中,点 Workloads
Virtual Machines。 - 点击 Create Virtual Machine 并选择 Import with Wizard。
- 从 Provider 列表中选择 VMware。
选择 Connect to New Instance 或一个保存的 vCenter 示例。
- 如果您选择 Connect to New Instance,输入 vCenter hostname、Username 和 Password。
- 如果您选择了一个保存的 vCenter 实例,向导将使用保存的凭证连接到 vCenter 实例。
点击 Check and Save,然后等待连接完成。
注意连接详情存储在 secret 中。如果您添加的供应商带有不正确的主机名、用户名或密码,点 Workloads
Secrets 并删除供应商 secret。 - 选择一个虚拟机或一个模板。
- 点 Next。
- 在 Review 屏幕中,查看您的设置。
点 Edit 以更新以下设置:
General:
- 描述
- 操作系统
- Flavor
- 内存
- CPU
- Workload Profile
Networking:
- 名称
- Model
- 网络
- 类型
- MAC 地址
Storage:点击 VM 磁盘 的 Options 菜单,然后选择 Edit 来更新以下字段:
- 名称
- Source:例如 Import Disk。
- Size
- Interface
Storage Class:选择 NFS 或 ocs-storagecluster-ceph-rbd(ceph-rbd)。
如果选择 ocs-storagecluster-ceph-rbd,您必须将磁盘的 Volume Mode 设置为 Block。
其他存储类可能会正常工作,但不被正式支持。
-
advanced
Volume Mode: 选择 Block。 -
Advanced
Access Mode
Advanced
Cloud-init: - Form: 输入 Hostname 和 Authenticated SSH Keys.
-
Custom script: 在文本字段中输入
cloud-init
脚本。
-
Advanced
Virtual Hardware:您可以将虚拟 CD-ROM 附加到导入的虚拟机。
如果您编辑了导入设置,点 Import 或 Review and Import。
此时会显示 Successfully created virtual machine 消息以及为虚拟机创建的资源列表。虚拟机会出现在 Workloads
Virtual Machines 中。
虚拟机向导字段
名称 | 参数 | 描述 |
---|---|---|
名称 |
名称可包含小写字母 ( | |
描述 | 可选的描述字段。 | |
操作系统 | 模板中为虚拟机选择的操作系统。从模板创建虚拟机时,您无法编辑此字段。 | |
引导源 | 通过 URL 导入(创建 PVC) | 从 HTTP 或 HTTPS 端点提供的镜像导入内容。示例:包含操作系统镜像的网页中的 URL 链接。 |
克隆现有的 PVC(创建 PVC) | 选择集群中可用的现有持久性卷声明并克隆它。 | |
通过 Registry 导入(创建 PVC) |
从可通过集群访问的注册表中的可启动操作系统容器置备虚拟机。示例: | |
PXE(网络引导 - 添加网络接口) | 从网络的服务器引导操作系统。需要一个 PXE 可引导网络附加定义。 | |
持久性卷声明项目 | 用于克隆 PVC 的项目名称。 | |
持久性卷声明名称 | 如果您要克隆现有的 PVC,则应用于此虚拟机模板的 PVC 名称。 | |
将它作为光盘引导源挂载 | CD-ROM 需要额外的磁盘来安装操作系统。选择添加磁盘的选择框并稍后进行自定义。 | |
Flavor | tiny、small、Medium、Large、Custom | 根据与该模板关联的操作系统,在虚拟机模板中预设具有预定义值的 CPU 和内存量。
如果选择了默认模板,您可以使用自定义值覆盖模板中的 |
工作负载类型 注意 如果您选择了不正确的 Workload Type,则可能会出现性能或资源利用率问题(如缓慢的 UI)。 | Desktop | 用于桌面的虚拟机配置。适用于小型工作环境。建议与 Web 控制台搭配使用。 |
Server | 在性能和广泛的服务器工作负载兼容性方面具有最佳平衡。 | |
高性能 | 针对高性能负载进行了优化的虚拟机配置。 | |
创建后启动此虚拟机。 | 默认选择这个复选框并在创建后启动虚拟机。如果您不希望虚拟机在创建时启动,请清除该复选框。 |
Cloud-init 字段
名称 | 描述 |
---|---|
Hostname | 为虚拟机设置特定主机名。 |
授权 SSH 密钥 | 复制到虚拟机上 ~/.ssh/authorized_keys 的用户公钥。 |
自定义脚本 | 将其他选项替换为您粘贴自定义 cloud-init 脚本的字段。 |
网络字段
名称 | 描述 |
---|---|
名称 | 网络接口控制器的名称。 |
model | 指明网络接口控制器的型号。支持的值有 e1000e 和 virtio。 |
网络 | 可用网络附加定义的列表。 |
类型 |
可用绑定方法列表。对于默认的 pod 网络, |
MAC 地址 | 网络接口控制器的 MAC 地址。如果没有指定 MAC 地址,则会自动分配一个。 |
存储字段
名称 | 选择 | 描述 |
---|---|---|
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 | 用于创建磁盘的存储类。 | |
Advanced | 定义持久性卷是否使用格式化的文件系统或原始块状态。默认为 Filesystem。 | |
Advanced | 持久性卷访问模式。支持的访问模式有 Single User(RWO)、Shared Access(RWX) 和 Read Only(ROX)。 |
高级存储设置
以下高级存储设置可用于 空白、从 URL 导入 和 克隆现有的 PVC 磁盘。所有参数都是可选的。如果没有指定这些参数,系统将使用 kubevirt-storage-class-defaults
配置映射中的默认值。
名称 | 参数 | 描述 |
---|---|---|
卷模式 | Filesystem | 在基于文件系统的卷中保存虚拟磁盘。 |
Block |
直接将虚拟磁盘存储在块卷中。只有底层存储支持时才使用 | |
访问模式 | Single User (RWO) | 这个卷可以被一个单一的节点以 read/write 的形式挂载。 |
Shared Access (RWX) | 卷可以被多个节点以读写模式挂载。 注意 对于一些功能(如虚拟机在节点间实时迁移)需要这个权限。 | |
Read Only (ROX) | 卷可以被多个节点以只读形式挂载。 |
8.15.5.3.1. 更新导入虚拟机的 NIC 名称
您必须更新从 VMware 导入的虚拟机的 NIC 名称,以符合 OpenShift Virtualization 命名约定。
流程
- 登录虚拟机。
-
进入
/etc/sysconfig/network-scripts
目录。 重新命名网络配置文件:
$ mv vmnic0 ifcfg-eth0 1
- 1
- 第一个网络配置文件的名称为
ifcfg-eth0
。额外网络配置文件按顺序编号,例如:ifcfg-eth1
、ifcfg-eth2
。
更新网络配置文件中的
NAME
和DEVICE
参数:NAME=eth0 DEVICE=eth0
重启网络:
$ systemctl restart network
8.15.5.4. 导入虚拟机的故障排除
8.15.5.4.1. 日志
您可以检查 V2V Conversion pod 日志中的错误。
8.15.5.4.2. 错误信�
此时会出现以下出错信息:
如果导入前 VMware VM 没有关闭,导入的虚拟机会显示错误消息,在 OpenShift Container Platform 控制台中显示
Readiness probe failed
,V2V Conversion pod 日志会显示以下错误消息:INFO - have error: ('virt-v2v error: internal error: invalid argument: libvirt domain ‘v2v_migration_vm_1’ is running or paused. It must be shut down in order to perform virt-v2v conversion',)"
如果非 admin 用户尝试导入虚拟机,则 OpenShift Container Platform 控制台中会显示以下错误消息:
Could not load config map vmware-to-kubevirt-os in kube-public namespace Restricted Access: configmaps "vmware-to-kubevirt-os" is forbidden: User cannot get resource "configmaps" in API group "" in the namespace "kube-public"
只有 admin 用户可以导入虚拟机。