0.kubevirt install
kubevirt安装¶
KubeVirt是Kubernetes的一个虚拟化插件。官方安装文档
配置清单¶
- 主机列表
| 主机名 | OS | 内核 | 管理网(NAT-eth0) | 业务网(仅主机-eth1) | 存储网(LAN区段-eth2) | 默认网关 | 硬件配置 |
|---|---|---|---|---|---|---|---|
| ha01 | openEuler release 22.03 (LTS-SP1) | 5.10.0-136.12.0.86.oe2203sp1.x86_64 | 192.168.59.238/24 | 192.168.61.238/24 | 10.168.61.238/24 | 192.168.59.2 | 1C2G 1*200GB |
| ha02 | openEuler release 22.03 (LTS-SP1) | 5.10.0-136.12.0.86.oe2203sp1.x86_64 | 192.168.59.239/24 | 192.168.61.239/24 | 10.168.61.239/24 | 192.168.59.2 | 1C2G 1*200GB |
| test-kubevirt.demo.com | - | - | 192.168.59.240/24 | - | - | - | |
| k8s01/ceph01 | openEuler release 22.03 (LTS-SP1) | 5.10.0-136.12.0.86.oe2203sp1.x86_64 | 192.168.59.241/24 | 192.168.61.241/24 | 10.168.61.241/24 | 192.168.59.2 | 4C12G 2*300GB |
| k8s02/ceph02 | openEuler release 22.03 (LTS-SP1) | 5.10.0-136.12.0.86.oe2203sp1.x86_64 | 192.168.59.242/24 | 192.168.61.242/24 | 10.168.61.242/24 | 192.168.59.2 | 4C12G 2*300GB |
| k8s03/ceph03 | openEuler release 22.03 (LTS-SP1) | 5.10.0-136.12.0.86.oe2203sp1.x86_64 | 192.168.59.243/24 | 192.168.61.243/24 | 10.168.61.243/24 | 192.168.59.2 | 4C12G 2*300GB |
| k8s04 | openEuler release 22.03 (LTS-SP1) | 5.10.0-136.12.0.86.oe2203sp1.x86_64 | 192.168.59.244/24 | 192.168.61.244/24 | 10.168.61.244/24 | 192.168.59.2 | 4C12G 2*300GB |
| registry.demo.com | CentOS Linux release 7.9.2009 | 5.4.225-1.el7.elrepo.x86_64 | 192.168.59.251/24 | 192.168.61.251/24 | 10.168.61.251/24 | 192.168.59.2 | 2C6G 1*300GB |
Pod和Service网络规划: POD网络:12.244.0.0/16; Service网络:12.96.0.0/12
- 主要软件清单
| 名称 | 版本 | 来源 |
|---|---|---|
| docker | 20.10.23 | github |
| cri-containerd | 1.7.2 | github |
| docker-compose | v2.18.1 | github |
| harbor | v2.8.1-offline | github |
| ceph | 17.2.7 quincy(stable) | quay.io |
| haproxy | haproxy-2.6.6-9.oe2203sp1.x86_64 | yum源 |
| keepalived | keepalived-2.2.4-2.oe2203sp1.x86_64 | yum源 |
| kubeadm | kubeadm-1.27.6-0.x86_64 | 本地编译 |
| kubelet | kubelet-1.27.6-0.x86_64 | yum源 |
| kubectl | kubectl-1.27.6-0.x86_64 | yum源 |
| kube-ovn | v1.11.13 | github |
| multus-cni | v3.9.2-thick | github |
| metallb | v0.13.12 | github |
| ceph-csi | v3.9.0 | github |
| external-snapshotter | v6.3.3 | github |
| kubevirt | v1.1.1 | github |
| cdi | v1.58.1 | github |
| kubevirt-manager | 1.3.1 | github |
| kube-prometheus | release-0.13 | github |
k8s高可用拓扑图¶

组网规划¶
# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
# HA
192.168.59.238 ha01
192.168.59.239 ha02
192.168.59.240 test-kubevirt.demo.com
# public network
192.168.61.241 ceph01
192.168.61.242 ceph02
192.168.61.243 ceph03
# cluster network
10.168.61.241 ceph01-cl
10.168.61.242 ceph02-cl
10.168.61.243 ceph03-cl
# manage network
# k8s eth0
192.168.59.241 k8s01
192.168.59.242 k8s02
192.168.59.243 k8s03
192.168.59.244 k8s04
# rgw
192.168.61.241 rgw.testgw images.demo.com dl.demo.com
# harbor
192.168.59.251 harbor registry.demo.com
安装前提条件¶
- 已有本地harbor镜像仓库【可选】。
- 已安装好ceph,能为kubernetes提供持久化的块存储,参考0-ceph-quincy部署.md【必须】。
- 已安装好kubernetes集群,参考0-k8s-1.27.6-高可用部署.md【必须】。
- kubernetes 的apiserver 已开启了
--allow-privileged=true,默认已开启【必须】。 - 有 kubectl 工具【必须】。
支持的容器运行时Container Runtime¶
- docker
- crio(with runv)
- 其他不使用虚拟化特性的容器运行时也应该也支持,只是没有经过测试。
硬件虚拟化支持¶
- 使用
virt-host-validate命令来确保你的主机能够运行虚拟化工作负载(该命令需要安装libvirt-client) - 如果cpu不支持虚拟化,则可以使用模拟虚拟化 模拟虚拟化
- 开启IOMMU(生产环境需要使用vGPU节点开启,实验环境可忽略该步骤)
## 启用 VT-d 的iommu功能和SR-IOV # vi /etc/default/grub GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="crashkernel=auto spectre_v2=retpoline rd.lvm.lv=vg00/root rd.lvm.lv=vg00/swap rhgb quiet intel_iommu=on iommu=pt pci=realloc" GRUB_DISABLE_RECOVERY="true" ## 注:如果是amd的cpu,则需要修改成 amd_iommu=on ## 更新grub并重启生效 # grub2-mkconfig -o /boot/grub2/grub.cfg # reboot ## 如果系统是UEFI启动,则要执行以下命令(在这折腾了半天功夫) # grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg # reboot ## 检查是否生效 #cat /proc/cmdline BOOT_IMAGE=/vmlinuz-3.10.0-1160.59.1.el7.x86_64 root=/dev/mapper/vg00-root ro crashkernel=auto spectre_v2=retpoline rd.lvm.lv=vg00/root rd.lvm.lv=vg00/swap rhgb quiet intel_iommu=on iommu=pt pci=realloc ## 注:启用iommu和SR-IOV功能需要重启!另外,还需要确认已经在服务器BIOS中开启 VT和SR-IOV
在kubernetes中安装kubevirt¶
建议 为保证安装过程丝滑,建议先搭建本地harbor镜像仓库,然后将依赖到的镜像下载到本地私有镜像仓库中,避免安装过程中镜像拉取失败或安装时间过长。
# wget https://github.com/kubevirt/kubevirt/releases/download/v1.1.1/kubevirt-operator.yaml
# wget https://github.com/kubevirt/kubevirt/releases/download/v1.1.1/kubevirt-cr.yaml
# wget https://github.com/kubevirt/kubevirt/releases/download/v1.1.1/virtctl-v1.1.1-linux-amd64
- 修改kubevirt-cr.yaml,具体修改内容可参考修改后的kubevirt-cr.yaml, 新增的相关属性在feature_gates特性开关。修改后,执行安装:
- 安装涉及到的镜像列表:
注 上述镜像可正常拉取,无需科学上网,可从红帽镜像仓库检索拉取。
quay.io/kubevirt/virt-api:v1.1.1 quay.io/kubevirt/virt-controller:v1.1.1 quay.io/kubevirt/virt-handler:v1.1.1 quay.io/kubevirt/virt-launcher:v1.1.1 quay.io/kubevirt/virt-operator:v1.1.1 quay.io/kubevirt/virt-exportproxy:v1.1.1 quay.io/kubevirt/conformance:v1.1.1
- 检查kubevirt是否部署成功
# kubectl get pods -n kubevirt NAME READY STATUS RESTARTS AGE virt-api-5467f666c8-tdd5m 1/1 Running 0 3m46s virt-api-5467f666c8-vdz8q 1/1 Running 0 3m46s virt-controller-6dd68f7489-pn6q8 1/1 Running 0 3m21s virt-controller-6dd68f7489-v9gmh 1/1 Running 0 3m21s virt-exportproxy-55794c5496-jw5zm 1/1 Running 0 3m21s virt-exportproxy-55794c5496-ztt4r 1/1 Running 0 3m21s virt-handler-2b4zb 1/1 Running 0 3m21s virt-handler-brwbm 1/1 Running 0 3m21s virt-operator-7fbd96fb78-hzmjp 1/1 Running 0 8m59s virt-operator-7fbd96fb78-zkxcl 1/1 Running 0 8m59s - 将virtctl命令拷贝到/usr/bin
镜像上传服务 Containerized-Data-Importer 安装¶
Containerized-Data-Importer(CDI)是kubernetes的持久化存储管理插件,它的主要目标是提供一种声明式的方式来为Kubevirt虚拟机在PVC上构建虚拟机镜像(磁盘)。 CDI 与Kubernetes 资源一起工作并且与存储设备无关, 虽然它的主要是为 Kubevirt 构建磁盘映像,但它在 Kubevirt 之外也很有用,可用于数据初始化 Kubernetes 卷。
CDI安装
- 修改cdi-operator.yaml,只需要修改镜像地址为本地harbor镜像仓库地址。修改好后,执行安装 注意 cdi-operator.yaml文件中包括cdi相关的所有镜像的地址,不是在cdi-cr.yaml中指定镜像仓库的。
- 修改cdi-cr.yaml,具体修改内容可参考修改后的cdi-cr.yaml,修改后,执行安装:
- 安装涉及到的镜像列表: 注 上述镜像可正常拉取,无需科学上网。
安装ceph-csi¶
ceph-csi目前最新的版本是3.10.1,此处选择ceph-csi-3.9,支持的k8s版是:v1.25, v1.26, v1.27
ceph-csi的版本要与ceph的版本对应,具体支持矩阵
在k8s集成外部ceph时,有对应ceph-csi的yaml,需要修改集群fsid、clusterID、monitors、mon_host等。修改好执行yaml。
安装涉及到的镜像:# cd ceph-csi-3.9 # kubectl apply -f ceph-conf.yaml # cd rbd # kubectl apply -f . ## 创建pvc进行测试,如果pvc状态是Bound,则说明安装成功。 # cd test # kubectl apply -f . # kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE test-pvc-hdd Bound pvc-a04fe5c9-c51a-4fef-a945-65fe31264469 15Gi RWX ceph-hdd-block 6squay.io/cephcsi/cephcsi:v3.9.0 registry.cn-hangzhou.aliyuncs.com/google_containers/csi-attacher:v4.3.0 registry.cn-hangzhou.aliyuncs.com/google_containers/csi-node-driver-registrar:v2.8.0 registry.cn-hangzhou.aliyuncs.com/google_containers/csi-provisioner:v3.5.0 registry.cn-hangzhou.aliyuncs.com/google_containers/csi-resizer:v1.8.0 registry.cn-hangzhou.aliyuncs.com/google_containers/csi-snapshotter:v6.2.2
安装卷快照¶
卷快照程序
- 修改相关yaml中镜像地址、名称空间,具体可参考 external-snapshotter帮助文档external-snapshotter包含了3部分:卷快照CRD、卷快照控制器、CSI驱动程序。external-snapshotter目前最新版已是7.0.0,此处选择是`external-snapshotter-client-v6.3.3 - 下载安装涉及到的镜像:## 安装 external-snapshotter 卷快照CRD # cd external-snapshotter-6.3.3 kubectl kustomize client/config/crd |kubectl apply -f - customresourcedefinition.apiextensions.k8s.io/volumesnapshotclasses.snapshot.storage.k8s.io created customresourcedefinition.apiextensions.k8s.io/volumesnapshotcontents.snapshot.storage.k8s.io created customresourcedefinition.apiextensions.k8s.io/volumesnapshots.snapshot.storage.k8s.io created ## 安装卷 快照控制器 snapshot-controller # cd external-snapshotter-6.3.3 # kubectl -n kube-system kustomize deploy/kubernetes/snapshot-controller/ |kubectl create -f - ## 安装 CSI驱动程序 csi-snapshotter # cd external-snapshotter-6.3.3 # kubectl -n kube-system kustomize deploy/kubernetes/csi-snapshotter |kubectl create -f - ## 最后安装 卷快照类 VolumeSnapshotClass # kubectl apply -f snapshotclass.yaml ## 创建pvc并打快照进行验证 # kubectl apply -f 0-pvc-test.yaml # kubectl apply -f 1-snapshot.yaml # kubectl get volumesnapshot NAME READYTOUSE SOURCEPVC SOURCESNAPSHOTCONTENT RESTORESIZE SNAPSHOTCLASS SNAPSHOTCONTENT CREATIONTIME AGE pvc-snapshot-test101 true pvc-test101 1Gi csi-rbdplugin-snapclass snapcontent-db53791b-5d27-4165-be7e-5e0c2c7f4fcb 12s 12s # kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pvc-test101 Bound pvc-fd69eab9-e382-4184-87ba-abe7357848bc 1Gi RWX ceph-hdd-block 2m20s
安装kubevirt-manager(可选)¶
一款基于Angular开发的Web前端UI,来简化对Kubevirt的操作 github地址 kubevirt-manager 安装方式比较简单,根据readme.md中的步骤进行安装。 - 安装前置条件 1. CDI激活了特性
2. 默认使用的存储类HonorWaitForFirstConsumer,该特性默认在cdi-cr.yaml是开启的。StorageClass启用了卷扩展allowVolumeExpansion特性,这个默认也是开启的。注意 如果使用的是host-path或者local-storage,则需要在对应的存储类中配置apiVersion: storage.k8s.io/v1 kind: StorageClass ... ... allowVolumeExpansion: true volumeBindingMode: ImmediatevolumeBindingMode: WaitForFirstConsumer。WaitForFirstConsumer表示: 当用户创建PVC时,并不会立即为PVC绑定PV,需是等到有Pod使用这个PVC并被调度到某个节点上时,才会根据Pod所在的节点来动态绑定合适的PV,这种模式有利于避免预先分配存储资源。
- 开始安装kubevirt-manager
# cd kubevirt-manager ## 创建名称空间 # kubectl apply -f kubernetes/ns.yaml ## 创建服务帐户和RBAC授权 kubectl apply -f kubernetes/rbac.yaml ## 为前端nginx添加basic-auth认证,默认账户/密码:admin/admin # kubectl apply -f kubernetes/auth-secret.yaml # kubectl apply -f kubernetes/auth-config.yaml ## 部署服务 kubectl apply -f kubernetes/deployment.yaml ## 创建优先级类 kubectl apply -f kubernetes/pc.yaml ## 创建Service,修改为NodePort类型,例如端口为32000,便于外部访问 kubectl apply -f kubernetes/service.yaml # kubectl get pods -n kubevirt-manager NAME READY STATUS RESTARTS AGE kubevirt-manager-57d8ff6685-2ptj2 1/1 Running 0 73m # kubectl get svc -n kubevirt-manager NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubevirt-manager NodePort 12.108.203.213 <none> 8080:32000/TCP 97s - 访问kubevirt-manager 访问url: http://IP:32000 ,默认用户名/密码:admin/admin
安装涉及到的镜像:
安装VirtualVNC(可选)¶
修改yaml,调整nodeSelector的值为
node-role.kubernetes.io/control-plane;另外service类型改为NodePort,可以手工指定nodePort: 31002
导入镜像测试¶
使用
virtctl命令通过CDI上传镜像使用http方式导入镜像## --uploadproxy-url 取的是 cdi-uploadproxy svc的地址 virtctl image-upload dv dv-image-cirros2 --size 2Gi --insecure --uploadproxy-url=https://12.107.65.150 --image-path=./cirros-0.5.1-x86_64-disk.img virtctl image-upload pvc pvc-image-cirros2 --size 2Gi --insecure --uploadproxy-url=https://12.107.65.150 --image-path=./cirros-0.5.1-x86_64-disk.img virtctl image-upload pvc pvc-image-cirros3 \ --size 2Gi \ --access-mode=ReadWriteMany \ --volume-mode=block \ --insecure \ --uploadproxy-url=https://12.107.65.150 \ --image-path=./cirros-0.5.1-x86_64-disk.img注意 事先准备一个http服务,提供镜像下载,此处先用nginx,后期可以放在minio里面apiVersion: cdi.kubevirt.io/v1beta1 kind: DataVolume metadata: name: img-cirros namespace: default spec: source: http: url: http://192.168.59.241:10800/images/cirros-0.5.1-x86_64-disk.img pvc: storageClassName: "ceph-hdd-block" accessModes: - ReadWriteMany resources: requests: storage: 1Gi volumeMode: Block
创建vm测试¶
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: cirros-vm01
namespace: default
spec:
storageClassName: "ceph-hdd-block"
volumeMode: Block
accessModes:
- ReadWriteMany
dataSource:
kind: PersistentVolumeClaim
name: img-cirros
resources:
requests:
storage: 4Gi
---
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
name: cirros-vm01
namespace: default
spec:
running: true
template:
metadata:
labels:
kubevirt.io/size: small
kubevirt.io/domain: cirros-vm01
#annotations:
# ovn.kubernetes.io/ip_address: 10.244.10.203
spec:
domain:
cpu:
cores: 1
model: host-passthrough
memory:
guest: 2Gi
devices:
disks:
- name: root-disk
disk:
bus: virtio
interfaces:
- name: default
masquerade: {}
resources:
requests:
memory: 2048M
networks:
- name: default
pod: {}
volumes:
- name: root-disk
persistentVolumeClaim:
claimName: cirros-vm01
常用镜像下载地址 可从openstack镜像向导页进入
cirros: - https://download.cirros-cloud.net/ - http://download.cirros-cloud.net/0.5.1/cirros-0.5.1-x86_64-disk.img
centos: - https://cloud.centos.org/centos/7/images/ - https://cloud.centos.org/centos/8/x86_64/images/
ubuntu: - https://cloud-images.ubuntu.com/releases
KubeVirt 一致性测试(在安装好CDI、csi、snapshot等组件后,再做一致性测试)¶
运行Sonobuoy对kubevirt进行一致性测试。
KubeVirt在github上提供了conformance.yaml,该文件定义了一个Sonobuoy插件配置,目的是执行KubeVirt的一致性测试(Conformance Tests)。
Sonobuoy是vmware开源的一个k8s诊断工具,它被设计用来对k8s集群进行健康检查和一致性(conformance)验证。通过以一种可访问和非破坏性的方式运行一组k8s一致性测试插件,可以更容易地了解k8s集群的状态。
# wget https://github.com/kubevirt/kubevirt/releases/download/v1.1.1/conformance.yaml
# wget https://github.com/vmware-tanzu/sonobuoy/releases/download/v0.57.1/sonobuoy_0.57.1_linux_amd64.tar.gz
# tar -xvf sonobuoy_0.57.1_linux_amd64.tar.gz
# mv sonobuoy /usr/bin/
# sonobuoy run --plugin conformance.yaml
## 获取结果,并且会在当前目录生成tar.gz文件
# results=$(sonobuoy retrieve)
# ls
202402060444_sonobuoy_d8491ebc-c9a8-459a-99ca-440fa5b09134.tar.gz
## 获取测试失败的结果。将列出测试失败的数量及其名称,也可以直接解压获取文件的整个内容
# sonobuoy results $results
...
Errors:
4133 podlogs/kube-system/csi-rbdplugin-provisioner-7ff5d75499-hhjww/logs/csi-rbdplugin-controller.txt
1064 podlogs/kube-system/csi-rbdplugin-provisioner-7ff5d75499-pggqg/logs/csi-snapshotter.txt
...
## 删除Sonobuoy测试任务,需要删除其命名空间以及一些集群范围的资源。
# sonobuoy delete --wait
#conformance.yaml
sonobuoy-config:
driver: Job
plugin-name: kubevirt-conformance
result-format: junit
spec:
command:
- /usr/bin/conformance
image: quay.io/kubevirt/conformance:v1.1.1-amd64
imagePullPolicy: Always
name: plugin
conformance.yaml说明: sonobuoy-config 定义了Sonobuoy运行时使用的驱动器类型是Job,这意味着将会创建一个k8s Job来执行测试任务。同时指定了插件名称为kubevirt-conformance,表示这是针对KubeVirt组件的一致性测试插件。 而"result-format: junit"表示输出结果的格式为JUnit格式,这是一种常见的单元测试和集成测试结果报告格式,便于自动化测试工具和其他CI/CD系统解析和展示测试结果。 spec下的command 字段列出了容器内要执行的命令,这里指定的是 /usr/bin/conformance,即运行一个名为 conformance 的可执行文件,该文件应该包含执行KubeVirt一致性测试所需的脚本或程序。 image 指定使用的镜像为 quay.io/kubevirt/conformance:v1.1.1,这是一个包含了执行KubeVirt一致性测试所需环境和工具的容器镜像。 imagePullPolicy: Always 表示每次运行时都要从仓库拉取最新版本的镜像。 name: plugin 是这个Sonobuoy插件在Kubernetes资源中的名字。
各组件用途¶
- virt-api
virt-api是KubeVirt的API服务器,它提供了与KubeVirt相关的RESTful API端点,允许用户和其他组件与KubeVirt进行交互和通信。通过virt-api,用户可以管理虚拟机实例、虚拟机模板、存储和网络等资源。
- virt-controlller
virt-controller是KubeVirt的控制器,负责监视和管理KubeVirt中的虚拟机资源。它确保虚拟机的状态与定义的规范保持一致,并根据需要执行调谐操作,以满足预期状态。
- virt-handler
virt-handler负责在Kubernetes集群中创建和管理虚拟机实例(VMIs)。它与Kubernetes的调度器协作,确保VMIs被正确地调度到集群中的节点上,并负责监控和维护这些VMIs的运行状态。 Virt-handler会以Daemonset形式部署在每个节点上,负责监控节点上每个虚拟机实例状态变化,一旦检测到状态变化,会进行响应并确保相应操作能达到所需状态。
- virt-launcher
负责创建和管理虚拟机实例的生命周期,包括启动、停止、监控和维护。每个virt-lanuncher pod对应着一个VMI,也对应着一个libvirtd, kubelet只是负责virt-lanuncher pod运行状态,不会去关心VMI创建情况。 virt-lanuncher pod生命周期结束,virt-lanuncher也会通知VMI终止。 virt-lanuncher通过libvirtd去管理VM的生命周期,一个libvirtd只管理一个VM,而不像openstack那样,一个libvirtd管理多个VM。
- virt-operator
Kubevirt的运维组件,基于k8s的Operator模式,负责管理和操作KubeVirt的自定义资源(CRs)。virt-operator监视k8s集群中的CRs,包括但不限于 VirtualMachine(VM)、VirtualMachineInstance(VMI)、VirtualMachineInstanceReplicaSet(VMIRS)等。 virt-operator 监视 k8s 集群中与 KubeVirt 相关的自定义资源对象,并根据这些资源的状态和定义执行相应的操作, 比如安装、更新或卸载 KubeVirt 组件,以及确保 Kubevirt 所管理的虚拟机实例处于预期状态。 当用户创建、更新或删除了某个自定义资源时,virt-operator 将自动响应并采取相应措施来保持集群中 KubeVirt 环境的一致性和稳定性。
- virtctl
KubeVirt 提供的一个命令行工具,它允许用户与 k8s 集群中的虚拟化资源进行交互。通过 virtctl,您可以创建、删除、查看和管理 VirtualMachine、VirtualMachineInstance 以及 VirtualMachineInstanceReplicaSet 等资源。例如,您可以使用 virtctl 来启动或停止虚拟机实例、连接到虚拟机控制台、迁移虚拟机等操作。
- VirtualMachine (VM)
VM 是 KubeVirt 中提供的一种有状态的自定义资源对象,用于定义虚拟机的规范和配置,类似于虚拟机模板,描述了虚拟机的期望状态和属性。用户可以创建、更新和删除VM来定义虚拟机的规范和配置。 一个 VM 可以关联多个 VMI 实例,例如当希望在需要的时候能够恢复到某个已知的虚拟机状态时,可以通过 VM 这个高级抽象来实现。
- VirtualMachineInstance (VMI)
VMI 是Kubevirt中的自定义资源,代表了一个运行时的虚拟机实例。每个 VMI 对象描述了虚拟机实例的配置信息,包括镜像、内存大小、CPU核心数、存储大小、网络配置等。 当一个 VMI 被创建并调度至集群中的节点后,KubeVirt 将根据该配置启动实际的虚拟机,用户可以创建、更新和删除VMI。
- VirtualMachineInstanceReplicaSet (VMIRS)
VMIRS 类似于 k8s 中的 ReplicaSet 或 StatefulSet,用于管理一组相同配置的虚拟机实例集合。当创建一个 VMIRS 时,它将确保集群中始终保持指定数量且具有相同配置的 VMI 实例处于运行状态。 这种机制非常适合需要高可用性、负载均衡或者弹性伸缩的场景,可以根据需求自动调整 VMI 的副本数量。