• 【云原生 · Kubernetes】KubeVirt热迁移



    热迁移是KubeVirt支持的一个常见虚拟化特性,在这个特性中,运行在一个集群节点上的虚拟机可以移动到另一个集群节点上,而不需要关闭来宾操作系统或其应用程序。

    要在Kubernetes测试环境中试验KubeVirt实时迁移,需要进行一些设置。

    启动Kubernetes集群,要求如下:

    • 两个或多个节点
    • CNI插件:Flannel是概念环境证明的好选择。
    • 嵌套或模拟虚拟化
    • KubeVirt

    关于使用Minikube的简单测试环境,请参考本网站的Minikube快速入门。

    检查节点和kubevirt状态

    查询节点及其IP范围。

    kubectl get nodes -o wide
    
    • 1

    这将返回一个类似于

    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
    
    • 1
    • 2
    • 3

    检查kubevirt是否已完全部署:

    kubectl -n kubevirt get kubevirt
    NAME       AGE     PHASE
    kubevirt   3m20s   Deployed
    
    • 1
    • 2
    • 3

    启用热迁移

    在撰写本文时,动态迁移还不是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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    创建虚拟机

    接下来,创建虚拟机。请参考创建虚拟机章节。

    kubectl apply -f https://kubevirt.io/labs/manifests/vm.yaml
    virtctl start testvm
    
    • 1
    • 2

    在多节点环境中,了解在哪个节点上运行pod是很有帮助的。使用-o wide查看其节点:

    kubectl get pod -o wide
    
    • 1

    注意在这个例子中,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>
    
    • 1
    • 2

    在虚拟机上启动一个服务

    使用virtctl,公开两个端口进行测试,ssh/22http/8080:

    virtctl expose vmi testvm --name=testvm-ssh --port=22 --type=NodePort
    virtctl expose vmi testvm --name=testvm-http --port=8080 --type=NodePort
    
    • 1
    • 2

    首先登录控制台,使用netcat运行一个简单的web服务器:

    virtctl console testvm
    
    • 1

    在控制台登录提示符中提到了默认用户“cirros”及其密码,请使用它们登录。接下来,运行下面的while循环,连续响应任何http连接尝试,并发送测试消息:

    while true; do ( echo "HTTP/1.0 200 Ok"; echo; echo "Migration test" ) | nc -l -p 8080; done
    
    • 1

    在控制台登录提示符中提到了默认用户“cirros”及其密码,请使用它们登录。接下来,运行下面的while循环,连续响应任何http连接尝试,并发送测试消息:

    
    IP=$(minikube ip)
    PORT=$(kubectl get svc testvm-http -o jsonpath='{.spec.ports[0].nodePort}')
    
    • 1
    • 2
    • 3

    现在使用curl从简单的web服务中读取数据:

    curl ${IP}:${PORT}
    
    • 1

    这将输出Migration test。如果一切正常,就应该将虚拟机迁移到另一个节点。

    迁移虚拟机

    testvm vmi从一个节点迁移到另一个节点,执行以下命令:

    virtctl migrate testvm
    
    • 1

    为了确保迁移发生,在“宽”视图下观察豆荚:

    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>
    
    • 1
    • 2
    • 3

    注意,原始的virt启动器吊舱已经进入Completed状态,虚拟机现在正在minikube节点上运行。测试之前启动的服务是否仍在运行:

    curl ${IP}:${PORT}
    
    • 1

    同样,这应该输出迁移测试。

    总结
    这个示例现在结束了。这个练习演示了KubeVirt Live Migration将正在运行的虚拟机从一个节点移动到另一个节点的能力,而不需要重新启动正在运行的应用程序。

  • 相关阅读:
    提升群辉AudioStation音乐体验,实现公网音乐播放
    HI3519DV500快速启动
    手把手教你自定义自己SpringBoot Starter组件源码剖析
    2022.11.4 英语背诵
    tomcat架构概览
    [Mybatis-Plus笔记] MybatisPlus-05-id生成策略,多数据操作,逻辑删除
    一文详细拆解Agent工作原理
    FTP命令不同系统之间传输文件
    如何快速搭建自己的查题公众号教程
    Spring Boot和Spring MVC常用注解
  • 原文地址:https://blog.csdn.net/qq_52716296/article/details/127436026