KubeVirt 热迁移零中断!Kube-OVN 如何实现无感热迁移?

在虚拟机的使用场景中,热迁移可以将虚拟机从一个节点迁移到另一个节点,以便进行诸如节点维护、系统升级和故障转移等操作。然而,KubeVirt 在热迁移过程中面临以下挑战:

  • KubeVirt 默认不支持Bridge网络模式虚拟机进行热迁移。

  • KubeVirt 本身仅处理内存和磁盘迁移,没有针对网络迁移进行特定优化。

  • 若虚拟机的 IP 在迁移过程中发生变化,则无法实现无感热迁移。

  • 若网络在迁移过程中中断,则无法实现无感热迁移。

Kube-OVN 通过在虚拟机迁移过程中针对上述问题进行了专门处理,用户能够实现无感知的热迁移。经过测试,网络中断时间可以控制在 0.5 秒以内,且不会出现 TCP 链接中断。

使用方法

用户只需在 VM Spec 中添加注解 kubevirt.io/allow-pod-bridge-network-live-migration: "true" annotation,Kube-OVN 将在网络迁移过程中自动处理。

1、创建VM

    kubectl apply -f - <<EOFapiVersion: kubevirt.io/v1kind: VirtualMachinemetadata:  name: testvmspec:  runStrategy: Always   template:    metadata:      labels:        kubevirt.io/size: small        kubevirt.io/domain: testvm      annotations:        kubevirt.io/allow-pod-bridge-network-live-migration: "true"    spec:      domain:        devices:          disks:            - name: containerdisk              disk:                bus: virtio            - name: cloudinitdisk              disk:                bus: virtio          interfaces:          - name: default            bridge: {}        resources:          requests:            memory: 64M      networks:      - name: default        pod: {}      volumes:        - name: containerdisk          containerDisk:            image: quay.io/kubevirt/cirros-container-disk-demo        - name: cloudinitdisk          cloudInitNoCloud:            userDataBase64: SGkuXG4=EOF

    2 SSH 进入虚拟机,并测试网络联通性

      # password: gocubsgovirtctl ssh cirros@testvmping 8.8.8.8

      3、在另一个终端中执行迁移,并观察虚拟机的网络联通性

        virtctl migrate testvm

        可以观察到,在虚拟机热迁移过程中,SSH 连接保持不中断,且ping 只是偶尔出现丢包的情况。

        热迁移原理

        Kube-OVN在热迁移过程中借鉴了《实时迁移--通过多机箱端口绑定减少停机时间》的灵感。

        为确保迁移过程中源虚拟机和目标虚拟机的网络一致,在迁移过程中网络中会同时存在两个相同的IP 地址。在这个过程中需要处理网络冲突和流量混乱的问题。具体步骤如下:

        1、KubeVirt 发起迁移,并在目标机器上创建相应的 Pod

        图片

        2、Kube-OVN 检测到该 Pod 是热迁移的目标 Pod,并复用源 Pod 的网络端口信息。

        图片

        3、Kube-OVN 设置流量复制,以便网络流量会同时复制到源 Pod 和目标 Pod。以减少网络切换时带来的中断时间。同时将目标 Pod 的网络端口暂时禁用,因此目标 Pod 实际上不会接收复制的流量,避免流量混乱。

        图片

        4、KubeVirt 进行VM内存同步。

        图片

        5、KubeVirt 完成内存同步并停用源Pod。此时,源 Pod 将不再处理网络流量。

        图片

        6、KubeVirt 激活目标 Pod。此时,libvirt 发送 RARP 以激活目标 Pod 的网络端口,目标 Pod 开始处理流量。

        图片

        7、KubeVirt 删除源 Pod,完成热迁移。Kube-OVN 通过Watch Migration CR监听迁移完成事件,并在迁移完成后停止流量复制。

        图片

        在这个过程中,网络中断主要发生在步骤 5  6 之间。网络中断时间主要取决于 libvirt 发送 RARP 所需的时间。经过测试,网络中断时间可以控制在 0.5 秒以内,且由于 TCP 重试机制,TCP 连接不会中断。

        参考资源链接:[Kube-OVN云原生网络的全能之选,极致性能与易用性兼备](https://wenku.csdn.net/doc/87k0zoimux?utm_source=wenku_answer2doc_content) 在云原生环境中,网络性能对于大规模容器集群至关重要。Kube-OVN结合Cilium集成,利用eBPF技术,可以极大地提升网络性能和可观察性。首先,Cilium提供的eBPF功能可以优化数据平面的处理,减少系统调用和上下文切换,从而降低延迟并提升吞吐量。eBPF程序在内核空间运行,能够快速处理网络请求,这对于大规模集群中的多节点和多Pod环境尤其重要。 其次,通过eBPF,Kube-OVN能够实现更细粒度的流量管理,比如精细化的网络策略和流量镜像,这对于网络故障排查和性能监控提供了极大的帮助。此外,Cilium集成了多种安全策略,可以用于加强集群内部和跨集群之间的安全通信。 为了进一步优化资源管理,Kube-OVN提供了一键安装脚本,支持快速部署,简化了操作流程。同时,它的架构设计允许高效地处理大规模集群,确保网络性能不会随着集群规模的扩大而下降。 如果想要更深入地理解Kube-OVN的性能优化和资源管理策略,以及如何利用Cilium提升网络性能,建议阅读《Kube-OVN云原生网络的全能之选,极致性能与易用性兼备》。这本书详细介绍了Kube-OVN的架构和优势,包括其对eBPF的集成,以及在不同场景下的部署和管理方法,是进一步研究和应用Kube-OVN不可或缺的资源。 参考资源链接:[Kube-OVN云原生网络的全能之选,极致性能与易用性兼备](https://wenku.csdn.net/doc/87k0zoimux?utm_source=wenku_answer2doc_content)
        评论
        添加红包

        请填写红包祝福语或标题

        红包个数最小为10个

        红包金额最低5元

        当前余额3.43前往充值 >
        需支付:10.00
        成就一亿技术人!
        领取后你会自动成为博主和红包主的粉丝 规则
        hope_wisdom
        发出的红包
        实付
        使用余额支付
        点击重新获取
        扫码支付
        钱包余额 0

        抵扣说明:

        1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
        2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

        余额充值