文本已在OpenShift 4.15 + OpeShift Virtualization 4.15 环境中进行验证,不过下文部分 OpenShift Virtualization 的截图未更新。


文章目录

  • 安装 OpenShift Virtualization 环境
  • 运行环境要求
  • 用 OpenShift Virtualization Operator 安装环境
  • 创建 VM
  • 通过模板创建 VM
  • 基于已有 KVM 虚机镜像创建 VM
  • 了解 VM 和 Pod 、PVC关系
  • 操作管理 VM
  • 为 VM 添加 CDROM
  • VM 快照/恢复
  • 在节点之间实施迁移VM
  • 用命令访问虚拟机
  • 指定 VM 的运行节点
  • 演示视频
  • 参考


安装 OpenShift Virtualization 环境

运行环境要求

在安装 OpenShift Virtualization 前需要确认 OpenShift 集群必须具备以下特性:

  • OpenShift 集群的 Worker 节点主机是 BareMetal 类型,并且节点必须使用 CoreOS (RHCOS) Linux。
  • OpenShift 集群必须使用 IPI 安装方式,并且部署 machine health check 功能。

用 OpenShift Virtualization Operator 安装环境

用默认配置将 OpenShift Virtualization Operator 安装到 openshift-cnv 项目中。

FT2000系列处理器虚拟化管理 虚拟化 ft_kubernetes


用默认配置创建 HyperConverged 对象。

FT2000系列处理器虚拟化管理 虚拟化 ft_虚拟化_02


安装完 HyperConverged 可在开发者视图的拓扑中看到安装的资源。

FT2000系列处理器虚拟化管理 虚拟化 ft_虚拟化_03


安装 HyperConverged 完成后刷新管理员视图,可看到新的“虚拟化”菜单。

FT2000系列处理器虚拟化管理 虚拟化 ft_FT2000系列处理器虚拟化管理_04

创建 VM

通过模板创建 VM

  1. 新建一个项目:
$ oc new-project my-vm
  1. 通过菜单进入“虚拟机器”,然后点击页面中“创建”下的“使用向导”创建虚拟机。
  2. 在模板中选中 Fedora,然后点击“下一个”。
  3. 点击“定制虚拟机”。
  4. 在“常规设置”中将名称设为 “fedora-1”。
  5. 无需修改“网络”配置。
  6. 在“存储”中编辑“rootdisk”。
  7. 在“编辑磁盘”窗口中去除“应用优化的存储配置集设置”,并确认“访问模式”为“共享的访问”。
  8. 在“高级”中修改操作系统的“用户名”、“密码”和“主机名”。
  9. 经确认后创建虚拟机。查看 fedora-1 虚拟机的状态为 “Running”,并且“客户机代理”为“OK” 状态。
  10. 在 fedora-1 虚拟机的“控制台”栏目中可登陆该虚拟机。然后在 “fedora-1” 虚拟机中执行以下命令创建一个文件:
$ echo aaa>aaa

FT2000系列处理器虚拟化管理 虚拟化 ft_FT2000系列处理器虚拟化管理_05


12. 在 OpenShift 的开发者视图中也可看到 fedora-1 的拓扑。

FT2000系列处理器虚拟化管理 虚拟化 ft_虚拟机_06

基于已有 KVM 虚机镜像创建 VM

在创建 VM的时候,在“常规设置” 页面中除去 “将可用操作系统源克隆到此虚拟机” 选项。然后确认“引导源” 为 “URL(creates PVC)”,并在 “URL” 中提供一个已有 KVM 虚机镜像的有效地址,例如下图的 “http://10.20.0.254/download/Fedora35.qcow2”。

FT2000系列处理器虚拟化管理 虚拟化 ft_kubernetes_07


后续配置同以前的说明。在创建VM的时候可以看到 “Importing (CDI)” 的状态和执行情况。

FT2000系列处理器虚拟化管理 虚拟化 ft_kubernetes_08

了解 VM 和 Pod 、PVC关系

  1. 进入 “虚拟化” 的 “概述”,查看虚拟机的资源监控。
  2. 查看“存储”的“持久性卷声明”,确认其对应了 “fedora-1” 虚拟机的 “rootdisk” 磁盘。
  3. 在“工作负载”的“Pod” 中进入 “fedora-1” 虚拟机对应的 Pod。
  4. 在 Pod 中的“终端中”执行 “top” 命令,确认有 “qemu-kvm” 的进程。这说明在 Pod 运行的是基于 KVM 的虚拟机。
  5. 在 Pod 运行以下命令,确认有 user1_fedora-1 虚机在运行,然后查看该 VM 使用的块存储和网络配置。
sh-5.1$ virsh list
Authorization not available. Check if polkit service is running or see debug message for more information.
 Id   Name             State
--------------------------------
 1    user1_fedora-1   running

sh-5.1$ virsh domblklist 1
Authorization not available. Check if polkit service is running or see debug message for more information.
 Target   Source
----------------------------------------------------------------------------------------
 vda      /dev/rootdisk
 vdb      /var/run/kubevirt-ephemeral-disks/cloud-init-data/user1/fedora-1/noCloud.iso

sh-5.1$ virsh domiflist 1
Authorization not available. Check if polkit service is running or see debug message for more information.
 Interface   Type       Source   Model                     MAC
------------------------------------------------------------------------------
 tap0        ethernet   -        virtio-non-transitional   02:1f:ba:00:00:00
  1. 然后删除该 Pod,可以确认 “fedora-1” 虚拟机也会被删除。不过虚拟机会随着 Pod 的恢复也会被恢复。
  2. 再次进入 “fedora-1” 虚拟机的控制台,确认 “aaa” 文件依然存在。

操作管理 VM

为 VM 添加 CDROM

  1. 确认 “fedora-1” 虚拟机为 “停止” 状态。
  2. 进入 “fedora-1” 虚拟机的 “磁盘” 栏目,然后添加 “磁盘”。在 “添加磁盘” 窗口中在 URL 中提供可以访问的 ISO 文件、以及磁盘的 “名称”、“大小”、“类型”、“接口”和“存储类”,最后 “添加”。
  3. 在 “fedora-1” 虚拟机的 “详情” 栏目中进入 “引导顺序”。
  4. 将前面创建的 CDROM 作为引导源,并将其调整为第一个引导源。
  5. 再次启动 “fedora-1” 虚拟机,可以看到使用 CDROM 启动了虚拟机。
  6. 另外存储的“持久性卷声明”中也加载的 CDROM。

VM 快照/恢复

  1. 进入 “fedora-1” 虚拟机的 “快照” 栏目,然后点击 “进行快照”。
  2. 在 “进行快照” 窗口中确认 “我已经了解了这个警告,并希望继续”,然后 “保存”。
  3. 确认快照创建的状态。注意:由于此时 VM 还在运行,因此快照的 “恢复” 按钮不能操作。
  4. 在 “存储”-“卷快照内容” 中可以看到和 VM 对应的快照。
  5. 再次进入 “fedora-1” 虚拟机的控制台,然后执行以下命令创建 bbb 文件。
$ echo bbb>bbb
  1. 在停止 “fedora-1” 虚拟机运行后,此时创建的快照的 “恢复” 按钮可以操作。点击 “恢复” 后 VM 会被恢复。
  2. 再次启动 “fedora-1” 虚拟机,在 “控制台” 中确认 bbb 文件已经不在了。这说明 VM 已经被快照恢复到以前的状态了。
  3. 查看 VM 的 Disks,确认 rootdisk 对应的已经是从快照恢复的 PVC 了。注意:但是 feidora-1 快照恢复前使用的 PVC 和 PV 并没有被自动删除,如需要可手动删除。
  4. 删除 “fedora-1” 虚拟机的快照,确认在 “存储”-“卷快照内容” 中该快照也将被删除。

在节点之间实施迁移VM

注意:虚拟机必须具有一个采用共享 ReadWriteMany(RWX)访问模式的 PVC 才能实时迁移。

  1. 在 “fedora-1” 虚拟机的 “控制台” 中运行以下命令,以证明 VM 一直是处于连续运行状态。
$ while sleep 1; do date; done

FT2000系列处理器虚拟化管理 虚拟化 ft_kubernetes_09

  1. 查看 “fedora-1” 虚拟机所在的节点,然后在菜单中点击 “从节点到节点迁移”。
  2. FT2000系列处理器虚拟化管理 虚拟化 ft_虚拟机_10

  3. 此时再查看 “fedora-1” 虚拟机的状态,确认虚拟机已经运行在其它节点上。另外,在此过程中可以通过虚拟机的控制台可以确认命令还在持续运行,这说明虚拟机没有停。
  4. FT2000系列处理器虚拟化管理 虚拟化 ft_kubernetes_11


  5. FT2000系列处理器虚拟化管理 虚拟化 ft_虚拟机_12

  6. 可以在 “fedora-1” 虚拟机的 “事件” 栏目中看到虚拟机被迁移的事件。
  7. FT2000系列处理器虚拟化管理 虚拟化 ft_kubernetes_13

用命令访问虚拟机

  1. 查看 VM 和 VMI 对象。其中 VM 为定制的虚拟机模板,VMI 是根据 VM 创建的虚拟机实例。
$ oc get vm
NAME       AGE    STATUS    READY
fedora-1   100m   Running   True
fedora-2   53m    Running   True
 
$ oc get vmi
NAME       AGE   PHASE     IP            NODENAME   READY
fedora-1   17m   Running   10.128.2.67   worker-2   True
fedora-2   61m   Running   10.128.2.65   worker-2   True
  1. 执行命令下载并安装 virtctl 工具。
$ curl -k -o - https://hyperconverged-cluster-cli-download-openshift-cnv.apps.${cluster_name}.${cluster_domain}/amd64/linux/virtctl.tar.gz | sudo tar -xvzf - -C /usr/local/bin/
  1. 执行命令停止和运行“fedora-1”虚拟机。
[lab-user@provision ~]$ virtctl stop fedora-1
VM fedora-1 was scheduled to stop
[lab-user@provision ~]$ oc get vm
NAME       AGE    STATUS    READY
fedora-1   104m   Stopped   False
fedora-2   57m    Running   True
[lab-user@provision ~]$ virtctl start fedora-1
VM fedora-1 was scheduled to start
[lab-user@provision ~]$ oc get vm
NAME       AGE    STATUS    READY
fedora-1   106m   Running   True
fedora-2   59m    Running   True
  1. 进入“fedora-1”虚拟机控制台,可以通过 “CTRL+]” 退出虚拟机控制台。
$ virtctl console fedora-1
Successfully connected to fedora-1 console. The escape sequence is ^]
[fedora@fedora-1 ~]$ ll
total 4
-rw-r--r--. 1 fedora fedora 4 Apr 30 17:20 aaa
  1. 执行命令迁移虚拟机。
$ virtctl migrate fedora-1

指定 VM 的运行节点

  1. 查看 fedora-1 虚拟机当前运行在 work-2 节点上。
$ oc get vmi fedora-1
NAME       AGE    PHASE     IP            NODENAME   READY
fedora-1   22m    Running   10.128.2.69   worker-2   True
  1. 为 worker-0 节点添加标签 “cpu=fast”
$ oc label node worker-0 cpu=fast
node/worker-0 labeled
$ oc get node -L cpu
NAME       STATUS   ROLES    AGE   VERSION           CPU
master-0   Ready    master   10d   v1.23.5+9ce5071
master-1   Ready    master   10d   v1.23.5+9ce5071
master-2   Ready    master   10d   v1.23.5+9ce5071
worker-0   Ready    worker   10d   v1.23.5+9ce5071   fast
worker-1   Ready    worker   10d   v1.23.5+9ce5071
worker-2   Ready    worker   10d   v1.23.5+9ce5071
  1. 修改 vm/fedora-1,为其指定 “nodeSelector”。
$ oc patch vm/fedora-1 --type merge -p '{"spec":{"template":{"spec":{"nodeSelector":{"cpu":"fast"}}}}}'
virtualmachine.kubevirt.io/fedora-1 patched
  1. 删除 vmi/fedora-1 虚拟机。
$ oc delete vmi/fedora-1
virtualmachineinstance.kubevirt.io "fedora-1" deleted
  1. 确认 fedora-1 虚拟机会在 worker-0 节点上重新运行。
$ oc get vmi fedora-1
NAME       AGE   PHASE     IP            NODENAME   READY
fedora-1   61s   Running   10.129.2.66   worker-0   True

演示视频

在OpenShift上运行容器化虚拟机

参考

https://access.redhat.com/documentation/zh-cn/openshift_container_platform/4.10/html-single/virtualization/index https://cloud.redhat.com/blog/your-first-vm-with-openshift-virtualization-using-the-web-console https://github.com/rdoxenham/openshift-virt-labs https://developer.ibm.com/blogs/a-declarative-coexistence-of-virtual-machines-and-containers/