快速入门云原生虚拟化kubevirt创建VM
KubeVirt介绍:基于k8s添加了vm的crd插件,像k8s管理pod一样,管理虚拟机vm。解决采用Kubernetes但拥有现有基于虚拟机的工作负载的开发团队的需求,这些工作负载不容易被容器化。更具体地说,该技术提供了一个统一的开发平台,开发人员可以在该平台上构建、修改和部署驻留在两个应用程序容器中的应用程序,以及公共共享环境中的虚拟机。官网:https://kubevirt.i
KubeVirt介绍:
基于k8s添加了vm的crd插件,像k8s管理pod一样,管理虚拟机vm。
解决采用Kubernetes但拥有现有基于虚拟机的工作负载的开发团队的需求,这些工作负载不容易被容器化。更具体地说,该技术提供了一个统一的开发平台,开发人员可以在该平台上构建、修改和部署驻留在两个应用程序容器中的应用程序,以及公共共享环境中的虚拟机。
官网:https://kubevirt.io/
架构图:
下面带大家一起体验一下kubevirt
前置条件:
已经部署好了K8S集群,无论是单机还是集群,都可以。
1、查看最新版的kubevirt版本
export KUBEVIRT_VERSION=$(curl -s https://api.github.com/repos/kubevirt/kubevirt/releases/latest | jq -r .tag_name)
echo $KUBEVIRT_VERSION
2、在k8s上添加kubevirt相关的资源对象
kubectl create -f https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/kubevirt-operator.yaml
kubectl create -f https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/kubevirt-cr.yaml
3、重要:启用仿真模拟,虽然会影响VM的性能 。
如果不启用,后边可能vm会启动不起来,但是开启后只能在本机访问,不能通过nodePort远程访问,此处建议执行,运行成功后可以尝试修改为false,然后再删除vm,重新创建vm。
kubectl -n kubevirt patch kubevirt kubevirt --type=merge --patch '{"spec":{"configuration":{"developerConfiguration":{"useEmulation":true}}}}'
4、查看当前创建资源,可以看到如下列表的pod,如果只看到operater的话是有问题的。
# kubectl get pods -n kubevirt
NAME READY STATUS RESTARTS AGE
virt-api-6677fb87c6-2mphk 1/1 Running 0 93m
virt-api-6677fb87c6-62mc2 1/1 Running 0 93m
virt-controller-5dd87c95c4-c4s2v 1/1 Running 0 92m
virt-controller-5dd87c95c4-wglhh 1/1 Running 0 92m
virt-handler-7rtdq 1/1 Running 0 92m
virt-operator-85b8997768-sldpt 1/1 Running 0 94m
virt-operator-85b8997768-zx7m6 1/1 Running 0 94m
5、安装virtctl
wget -O virtctl https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/virtctl-${KUBEVIRT_VERSION}-linux-amd64
chmod +x virtctl
cp virtctl /usr/local/bin/virtctl
6、 查看virtctl 版本,说明安装成功
# virtctl version
Client Version: version.Info{GitVersion:"v0.52.0", GitCommit:"836afc8c556206fc7715615ddb6516d76f4240db", GitTreeState:"clean", BuildDate:"2022-04-08T16:25:37Z", GoVersion:"go1.17.5", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{GitVersion:"v0.52.0", GitCommit:"836afc8c556206fc7715615ddb6516d76f4240db", GitTreeState:"clean", BuildDate:"2022-04-08T16:25:37Z", GoVersion:"go1.17.5", Compiler:"gc", Platform:"linux/amd64"}
7、 根据官方给的例子,创建一个vm
kubectl apply -f https://kubevirt.io/labs/manifests/vm.yaml
8、 查看创建的vm,此时状态是Stopped
kubectl get vms
kubectl get vmis
9、启动vm,再查看状态已经是Running,这里如果显示UnSchedule,请按照第3步的设置。
# virtctl start testvm
VM testvm was scheduled to start
10、进入vm
# virtctl console testvm
Successfully connected to testvm console. The escape sequence is ^]
login as 'cirros' user. default password: 'gocubsgo'. use 'sudo' for root.
testvm login: cirros
Password:
$ sudo su -
# pwd
/root
#
11、通过暴露服务,供外部程序访问
target-port:容器内的端口
port:集群内通过ClusterIp访问的端口
virtctl expose virtualmachine testvm --name vmiservice --target-port 22 --port 8022 --type NodePort
# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
vmiservice NodePort 10.233.28.141 <none> 8022:31536/TCP 40m
恭喜,通过kube-virt成功创建vm,有问题一起留言讨论。
欢迎关注+收藏,一起学习更多精彩内容。
————————————————
更多推荐
所有评论(0)