【云原生 · Kubernetes】KubeVirt热迁移
在控制台登录提示符中提到了默认用户“cirros”及其密码,请使用它们登录。是KubeVirt支持的一个常见虚拟化特性,在这个特性中,运行在一个集群节点上的虚拟机可以移动到另一个集群节点上,而不需要关闭来宾操作系统或其应用程序。注意,原始的virt启动器吊舱已经进入Completed状态,虚拟机现在正在minikube节点上运行。及其密码,请使用它们登录。将正在运行的虚拟机从一个节点移动到另一个节
【云原生 · Kubernetes】KubeVirt热迁移
热迁移
是KubeVirt支持的一个常见虚拟化特性,在这个特性中,运行在一个集群节点上的虚拟机可以移动到另一个集群节点上,而不需要关闭来宾操作系统或其应用程序。
要在Kubernetes测试环境中试验KubeVirt实时迁移,需要进行一些设置。
启动Kubernetes集群,要求如下:
- 两个或多个节点
- CNI插件:Flannel是概念环境证明的好选择。
- 嵌套或模拟虚拟化
- KubeVirt
关于使用Minikube的简单测试环境,请参考本网站的Minikube快速入门。
检查节点和kubevirt状态
查询节点及其IP范围。
kubectl get nodes -o wide
这将返回一个类似于
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
minikube Ready control-plane,master 2m43s v1.20.7 192.168.39.240 <none> Buildroot 2020.02.12 4.19.182 docker://20.10.6
minikube-m02 Ready <none> 118s v1.20.7 192.168.39.245 <none> Buildroot 2020.02.12 4.19.182 docker://20.10.6
检查kubevirt是否已完全部署:
kubectl -n kubevirt get kubevirt
NAME AGE PHASE
kubevirt 3m20s Deployed
启用热迁移
在撰写本文时,动态迁移还不是KubeVirt的标准特性。要启用该特性,请在“kubevirt”
命名空间中创建一个名为“kubevirt-config”
的ConfigMap
。
kubectl apply -f - <<EOF
apiVersion: v1
kind: ConfigMap
metadata:
name: kubevirt-config
namespace: kubevirt
labels:
kubevirt.io: ""
data:
feature-gates: "LiveMigration"
EOF
创建虚拟机
接下来,创建虚拟机。请参考创建虚拟机章节。
kubectl apply -f https://kubevirt.io/labs/manifests/vm.yaml
virtctl start testvm
在多节点环境中,了解在哪个节点上运行pod是很有帮助的。使用-o wide查看其节点:
kubectl get pod -o wide
注意在这个例子中,pod显示为运行在NODE " minikube-m02 "上:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
virt-launcher-testvm-c8nzz 2/2 Running 0 32s 10.244.1.12 minikube-m02 <none> <none>
在虚拟机上启动一个服务
使用virtctl
,公开两个端口进行测试,ssh/22
和http/8080
:
virtctl expose vmi testvm --name=testvm-ssh --port=22 --type=NodePort
virtctl expose vmi testvm --name=testvm-http --port=8080 --type=NodePort
首先登录控制台,使用netcat运行一个简单的web服务器:
virtctl console testvm
在控制台登录提示符中提到了默认用户“cirros”及其密码,请使用它们登录。接下来,运行下面的while循环,连续响应任何http连接尝试,并发送测试消息:
while true; do ( echo "HTTP/1.0 200 Ok"; echo; echo "Migration test" ) | nc -l -p 8080; done
在控制台登录提示符中提到了默认用户“cirros”
及其密码,请使用它们登录。接下来,运行下面的while循环,连续响应任何http连接尝试,并发送测试消息:
IP=$(minikube ip)
PORT=$(kubectl get svc testvm-http -o jsonpath='{.spec.ports[0].nodePort}')
现在使用curl从简单的web服务中读取数据:
curl ${IP}:${PORT}
这将输出Migration test
。如果一切正常,就应该将虚拟机迁移到另一个节点。
迁移虚拟机
将testvm vmi
从一个节点迁移到另一个节点,执行以下命令:
virtctl migrate testvm
为了确保迁移发生,在“宽”视图下观察豆荚:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
virt-launcher-testvm-8src7 0/2 Completed 0 5m 10.244.1.14 minikube-m02 <none> <none>
virt-launcher-testvm-zxlts 2/2 Running 0 21s 10.244.0.7 minikube <none> <none>
注意,原始的virt启动器吊舱已经进入Completed状态,虚拟机现在正在minikube节点上运行。测试之前启动的服务是否仍在运行:
curl ${IP}:${PORT}
同样,这应该输出迁移测试。
总结
这个示例现在结束了。这个练习演示了KubeVirt Live Migration
将正在运行的虚拟机从一个节点移动到另一个节点的能力,而不需要重新启动正在运行的应用程序。
更多推荐
所有评论(0)