【K8s】Kubernetes 虚拟机管理工具之 KubeVirt
本文内容均来自个人笔记并重新梳理,如有错误欢迎指正!
如果对您有帮助,烦请点赞、关注、转发、订阅专栏!
专栏订阅入口
| 精选文章 | Kubernetes | Docker | Linux | 羊毛资源 | 工具推荐 |
往期精彩文章
【Docker】(全网首发)Kylin V10 下 MySQL 容器内存占用异常的解决方法
【Docker】(全网首发)Kylin V10 下 MySQL 容器内存占用异常的解决方法(续)
【K8s】Helm Chart 方式部署 Sentry
目录
一、基本介绍
二、部署过程
1、获取最新版本
2、部署 KubeVirt Operator
3、部署 KubeVirt
4、查看状态
5、安装 Virtctl 客户端
6、虚拟机使用示例
一、基本介绍
KubeVirt 是一个用于在 Kubernetes 集群中管理、运行虚拟机的开源项目,旨在为 Kubernetes 上的虚拟化提供通用解决方案。
传统上,Kubernetes 擅长管理容器,而虚拟机则通常由其他工具(如 OpenStack)管理。KubeVirt 可以将容器和虚拟机作为统一的工作负载,在同一个平台上进行编排、部署和管理。
KubeVirt 的主要功能如下:
-
统一的 API
-
KubeVirt 引入了新的自定义资源定义(CRD),如 VirtualMachine、VirtualMachineInstance、VirtualMachineInstanceReplicaSet 等,因此可以通过 YAML 方式定义和管理虚拟机
-
-
生命周期管理
-
KubeVirt 会自动处理虚拟机的生命周期,包括其调度
-
-
存储集成
-
KubeVirt 与 Kubernetes 的存储卷(PersistentVolume)无缝集成,可以使用现有的 CSI(Container Storage Interface)驱动为虚拟机分配存储,如 Ceph、NFS 或本地存储
-
-
网络集成
-
KubeVirt 虚拟机可以使用 Kubernetes 的网络模型,并利用 CNI(Container Network Interface)插件来连接到集群网络,实现虚拟机与 Pod 在同一个网络中互相通信
-
-
实时迁移
-
KubeVirt 支持虚拟机在集群节点之间的不停机迁移,这对于维护和升级集群节点非常重要,可以确保服务的高可用性
-
-
高可用性
-
借助 Kubernetes 的调度和自愈能力,KubeVirt 也能提供虚拟机的容错。如果一个节点上的虚拟机出现故障,Kubernetes 会自动将其重新调度到健康的节点上
-
KubeVirt 的架构设计利用了 Kubernetes 的可扩展性,将虚拟机管理功能作为附加组件集成进来。其核心组件及示意图如下:
-
virt-api
-
是一个在 Kubernetes 集群中运行的 API Server 扩展,负责处理所有与 KubeVirt 相关的 API 请求(如创建 VirtualMachine 资源),并将它们写入 ETCD 数据库
-
-
virt-controller
-
是一个 Kubernetes 控制器,负责监控 KubeVirt 的自定义资源,并根据这些资源的期望状态来管理实际的虚拟机状态
-
-
virt-handler
-
是一个运行在每个 Kubernetes 节点上的 DaemonSet,负责管理其所在节点上的虚拟机,其角色类似于 kubelet
-
-
virt-launcher
-
是一个特殊的 Pod,负责托管和运行虚拟机,每个虚拟机实例都对应一个 virt-launcher
-
virt-launcher 内部包含 QEMU 等虚拟机进程,并负责将虚拟机的计算、网络和存储资源映射到 Pod 的资源上
-
GitHub 地址:https://github.com/kubevirt/kubevirt
官方指南地址:https://kubevirt.io/user-guide/
二、部署过程
1、获取最新版本
export KUBEVIRT_VERSION=$(curl -s https://api.github.com/repos/kubevirt/kubevirt/releases/latest | jq -r .tag_name)
echo $KUBEVIRT_VERSION
2、部署 KubeVirt Operator
kubectl create -f https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/kubevirt-operator.yaml# 输出如下
namespace/kubevirt created
customresourcedefinition.apiextensions.k8s.io/kubevirts.kubevirt.io created
priorityclass.scheduling.k8s.io/kubevirt-cluster-critical created
clusterrole.rbac.authorization.k8s.io/kubevirt.io:operator created
serviceaccount/kubevirt-operator created
role.rbac.authorization.k8s.io/kubevirt-operator created
rolebinding.rbac.authorization.k8s.io/kubevirt-operator-rolebinding created
clusterrole.rbac.authorization.k8s.io/kubevirt-operator created
clusterrolebinding.rbac.authorization.k8s.io/kubevirt-operator created
deployment.apps/virt-operator created
3、部署 KubeVirt
kubectl create -f https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/kubevirt-cr.yaml# 输出如下
kubevirt.kubevirt.io/kubevirt created
4、查看状态
# 查看组件状态
kubectl get po -n kubevirt# 输出如下
NAME READY STATUS RESTARTS AGE
virt-api-dd4cc786-bct8l 1/1 Running 0 2m32s
virt-controller-b9bbc9458-2lrdp 1/1 Running 0 117s
virt-controller-b9bbc9458-j6pmn 1/1 Running 0 117s
virt-handler-5rghn 1/1 Running 0 117s
virt-operator-7b7bbf7c6f-g2q4c 1/1 Running 0 3m57s
virt-operator-7b7bbf7c6f-gh5t2 1/1 Running 0 3m57s======================================================================
# 查看服务状态
kubectl get kubevirt -n kubevirt# 输出如下
NAME AGE PHASE
kubevirt 7m25s Deployed
5、安装 Virtctl 客户端
wget -O virtctl https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/virtctl-${KUBEVIRT_VERSION}-linux-amd6
chmod +x virtctl🔔 virtctl 用于与虚拟机进行交互(启动/停止/控制台等)
6、虚拟机使用示例
1)部署虚拟机
kubectl apply -f https://kubevirt.io/labs/manifests/vm.yaml# 输出如下
virtualmachine.kubevirt.io/testvm created
2)查看虚拟机列表
可以看到虚拟机处于停止状态
kubectl get vms# 输出如下
NAME AGE STATUS READY
testvm 72s Stopped False
3)启动虚拟机
./virtctl start testvm# 输出如下
VM testvm was scheduled to start======================================================================
kubectl get vmis# 输出如下
NAME AGE PHASE IP NODENAME READY
testvm 8m15s Running 10.42.0.16 ubuntu True
4)访问虚拟机
./virtctl console testvm
5)停止虚拟机
./virtctl stop testvm
6)删除虚拟机
kubectl delete vms testvm