文本已在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 项目中。
用默认配置创建 HyperConverged 对象。
安装完 HyperConverged 可在开发者视图的拓扑中看到安装的资源。
安装 HyperConverged 完成后刷新管理员视图,可看到新的“虚拟化”菜单。
创建 VM
通过模板创建 VM
- 新建一个项目:
$ oc new-project my-vm
- 通过菜单进入“虚拟机器”,然后点击页面中“创建”下的“使用向导”创建虚拟机。
- 在模板中选中 Fedora,然后点击“下一个”。
- 点击“定制虚拟机”。
- 在“常规设置”中将名称设为 “fedora-1”。
- 无需修改“网络”配置。
- 在“存储”中编辑“rootdisk”。
- 在“编辑磁盘”窗口中去除“应用优化的存储配置集设置”,并确认“访问模式”为“共享的访问”。
- 在“高级”中修改操作系统的“用户名”、“密码”和“主机名”。
- 经确认后创建虚拟机。查看 fedora-1 虚拟机的状态为 “Running”,并且“客户机代理”为“OK” 状态。
- 在 fedora-1 虚拟机的“控制台”栏目中可登陆该虚拟机。然后在 “fedora-1” 虚拟机中执行以下命令创建一个文件:
$ echo aaa>aaa
12. 在 OpenShift 的开发者视图中也可看到 fedora-1 的拓扑。
基于已有 KVM 虚机镜像创建 VM
在创建 VM的时候,在“常规设置” 页面中除去 “将可用操作系统源克隆到此虚拟机” 选项。然后确认“引导源” 为 “URL(creates PVC)”,并在 “URL” 中提供一个已有 KVM 虚机镜像的有效地址,例如下图的 “http://10.20.0.254/download/Fedora35.qcow2”。
后续配置同以前的说明。在创建VM的时候可以看到 “Importing (CDI)” 的状态和执行情况。
了解 VM 和 Pod 、PVC关系
- 进入 “虚拟化” 的 “概述”,查看虚拟机的资源监控。
- 查看“存储”的“持久性卷声明”,确认其对应了 “fedora-1” 虚拟机的 “rootdisk” 磁盘。
- 在“工作负载”的“Pod” 中进入 “fedora-1” 虚拟机对应的 Pod。
- 在 Pod 中的“终端中”执行 “top” 命令,确认有 “qemu-kvm” 的进程。这说明在 Pod 运行的是基于 KVM 的虚拟机。
- 在 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
- 然后删除该 Pod,可以确认 “fedora-1” 虚拟机也会被删除。不过虚拟机会随着 Pod 的恢复也会被恢复。
- 再次进入 “fedora-1” 虚拟机的控制台,确认 “aaa” 文件依然存在。
操作管理 VM
为 VM 添加 CDROM
- 确认 “fedora-1” 虚拟机为 “停止” 状态。
- 进入 “fedora-1” 虚拟机的 “磁盘” 栏目,然后添加 “磁盘”。在 “添加磁盘” 窗口中在 URL 中提供可以访问的 ISO 文件、以及磁盘的 “名称”、“大小”、“类型”、“接口”和“存储类”,最后 “添加”。
- 在 “fedora-1” 虚拟机的 “详情” 栏目中进入 “引导顺序”。
- 将前面创建的 CDROM 作为引导源,并将其调整为第一个引导源。
- 再次启动 “fedora-1” 虚拟机,可以看到使用 CDROM 启动了虚拟机。
- 另外存储的“持久性卷声明”中也加载的 CDROM。
VM 快照/恢复
- 进入 “fedora-1” 虚拟机的 “快照” 栏目,然后点击 “进行快照”。
- 在 “进行快照” 窗口中确认 “我已经了解了这个警告,并希望继续”,然后 “保存”。
- 确认快照创建的状态。注意:由于此时 VM 还在运行,因此快照的 “恢复” 按钮不能操作。
- 在 “存储”-“卷快照内容” 中可以看到和 VM 对应的快照。
- 再次进入 “fedora-1” 虚拟机的控制台,然后执行以下命令创建 bbb 文件。
$ echo bbb>bbb
- 在停止 “fedora-1” 虚拟机运行后,此时创建的快照的 “恢复” 按钮可以操作。点击 “恢复” 后 VM 会被恢复。
- 再次启动 “fedora-1” 虚拟机,在 “控制台” 中确认 bbb 文件已经不在了。这说明 VM 已经被快照恢复到以前的状态了。
- 查看 VM 的 Disks,确认 rootdisk 对应的已经是从快照恢复的 PVC 了。注意:但是 feidora-1 快照恢复前使用的 PVC 和 PV 并没有被自动删除,如需要可手动删除。
- 删除 “fedora-1” 虚拟机的快照,确认在 “存储”-“卷快照内容” 中该快照也将被删除。
在节点之间实施迁移VM
注意:虚拟机必须具有一个采用共享 ReadWriteMany(RWX)访问模式的 PVC 才能实时迁移。
- 在 “fedora-1” 虚拟机的 “控制台” 中运行以下命令,以证明 VM 一直是处于连续运行状态。
$ while sleep 1; do date; done
- 查看 “fedora-1” 虚拟机所在的节点,然后在菜单中点击 “从节点到节点迁移”。
- 此时再查看 “fedora-1” 虚拟机的状态,确认虚拟机已经运行在其它节点上。另外,在此过程中可以通过虚拟机的控制台可以确认命令还在持续运行,这说明虚拟机没有停。
- 可以在 “fedora-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
- 执行命令下载并安装 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/
- 执行命令停止和运行“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
- 进入“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
- 执行命令迁移虚拟机。
$ virtctl migrate fedora-1
指定 VM 的运行节点
- 查看 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
- 为 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
- 修改 vm/fedora-1,为其指定 “nodeSelector”。
$ oc patch vm/fedora-1 --type merge -p '{"spec":{"template":{"spec":{"nodeSelector":{"cpu":"fast"}}}}}'
virtualmachine.kubevirt.io/fedora-1 patched
- 删除 vmi/fedora-1 虚拟机。
$ oc delete vmi/fedora-1
virtualmachineinstance.kubevirt.io "fedora-1" deleted
- 确认 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
演示视频
参考
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/