一 背景
传统的虚拟机管理平台已经不能适应云原生应用的需求。为了在Kubernetes上运行虚拟机,社区开发了KubeVirt项目。KubeVirt使得在Kubernetes集群上运行虚拟机变得简单高效。
二 概述
KubeVirt利用Kubernetes底层资源,将虚拟机暴露为原生的Kubernetes对象,比如Pod。它为虚拟机提供了生命周期管理、监控、配置等服务。用户可以用kubectl或其他Kubernetes工具来管理虚拟机。
KubeVirt技术满足了已经采用或想要采用Kubernetes的开发团队的需求,但现有的基于虚拟机的工作负载无法轻松容器化。更具体地说,该技术提供了一个统一的开发平台,开发人员可以在这个平台上构建、修改和部署驻留在应用程序容器中的应用程序,也可以在一个公共的、共享的环境中部署虚拟机。
三 相关概念
- 虚拟机(VirtualMachine):在KubeVirt中,虚拟机是一个自定义资源对象(CRD)。
- 虚拟机控制器(VirtualMachineController):控制虚拟机的生命周期。
- 虚拟机实例(VirtualMachineInstance):代表运行中的虚拟机。
- 数据卷(DataVolume):为虚拟机提供存储。
- 网络(Network):定义虚拟机网络配置。
四 实操
4.1 部署
- 部署cli
export KUBEVIRT_VERSION=$(curl -s https://api.github.com/repos/kubevirt/kubevirt/releases/latest | jq -r .tag_name)
echo $KUBEVIRT_VERSION
- 部署operator
部署KubeVirt Operator命令如下:
kubectl create -f https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/kubevirt-operator.yaml
- 创建crd
kubectl create -f https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/kubevirt-cr.yaml
- 安装Virtctl
wget -O virtctl https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/virtctl-${KUBEVIRT_VERSION}-linux-amd64
chmod +x virtctl
kubectl -n kubevirt get kubevirt
4.2 部署虚拟机
kubectl apply -f https://kubevirt.io/labs/manifests/vm.yaml
我们正在创建一个虚拟机,就像我们在我们的环境中创建任何其他Kubernetes资源一样,感谢KubeVirt操作符。现在我们有了一个虚拟机作为Kubernetes资源。
虚拟机资源创建完成后,可以使用标准的'kubectl'命令对虚拟机进行管理。
kubectl get vms
kubectl get vms -o yaml testvm | grep -E 'running:.*|$'
目前虚拟机停止
4.3 启动虚拟机
- 开启k8s api
kubectl proxy --port=8080
- 启动虚拟机
./virtctl start testvm
kubectl get vms
kubectl get vmis
4.4 访问虚拟机
./virtctl console testvm
4.5 清理
# 停止虚拟机
./virtctl stop testvm
# 删除虚拟机
kubectl delete vms testvm
五 总结
KubeVirt使在Kubernetes上运行虚拟机像运行容器一样简单。它提供了管理虚拟机的云原生方法。KubeVirt解决了虚拟机和容器统一管理的难题,有效地融合了二者的优势
参考链接
- kubevirt.io/
- github.com/kubevirt/ku…