Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

kubevirt使用kube-ovn固定虚机IP和热迁移相关问题 #1376

Closed
hurdonkey opened this issue Mar 11, 2022 · 13 comments
Closed

kubevirt使用kube-ovn固定虚机IP和热迁移相关问题 #1376

hurdonkey opened this issue Mar 11, 2022 · 13 comments
Assignees
Labels
bug Something isn't working

Comments

@hurdonkey
Copy link

hurdonkey commented Mar 11, 2022

kubevirt使用kube-ovn固定虚机IP和热迁移相关问题
kubevrit版本0.49,kube-ovn版本1.9.0

  1. kubevrit使用kubeovn固定IP,测试热迁移失败
    VM配置如下,给multus网卡分配kubeovn子网并固定IP,开启迁移选项allow_live_migration
  template:
    metadata:
      annotations:
        attachnet-kubeovn.kubevirt-demo.ovn.kubernetes.io/logical_switch: attachnet-kubeovn-subnet
        attachnet-kubeovn.kubevirt-demo.ovn.kubernetes.io/allow_live_migration: 'true'    # allow_live_migration 则不做地址冲突检查
        attachnet-kubeovn.kubevirt-demo.ovn.kubernetes.io/default_route: 'true'           # 为非默认网卡指定默认路由
        attachnet-kubeovn.kubevirt-demo.ovn.kubernetes.io/ip_address: 172.17.0.203
        attachnet-kubeovn.kubevirt-demo.ovn.kubernetes.io/mac_address: '00:00:00:53:6B:B6'
    spec:
      evictionStrategy: LiveMigrate
      domain:
        cpu:
          cores: 1
        resources:
          requests:
            memory: 1024M

        devices:
          disks:
          - disk:
              bus: virtio
            name: disk-system

          - cdrom:
              bus: sata
              readonly: true
            name: cloudinitdisk

          interfaces:
          - name: attachnet-kubeovn
            bridge: {}

      networks:
        - multus:
            networkName: kubevirt-demo/attachnet-kubeovn
          name: attachnet-kubeovn

如图,创建的虚机成功获取到了固定IP
image

执行热迁移命令,新创建的launcher Pod无法启动

virtctl migrate img-centos-7-cloudimage-v4-vm

image

应该是在multus网卡获取IP处报错了
image

  1. 另外当虚机中只加固定MAC的注解不加固定IP的注解时,发现并没有使用指定的MAC地址,和文档第三条说明不符
    https://github.com/kubeovn/kube-ovn/wiki/Pod-%E5%9B%BA%E5%AE%9A-IP-%E5%92%8C-Mac
        attachnet-kubeovn.kubevirt-demo.ovn.kubernetes.io/logical_switch: attachnet-kubeovn-subnet
        attachnet-kubeovn.kubevirt-demo.ovn.kubernetes.io/allow_live_migration: 'true'    # allow_live_migration 则不做地址冲突检查
        attachnet-kubeovn.kubevirt-demo.ovn.kubernetes.io/default_route: 'true'           # 为非默认网卡指定默认路由
        # attachnet-kubeovn.kubevirt-demo.ovn.kubernetes.io/ip_address: 172.17.0.203
        attachnet-kubeovn.kubevirt-demo.ovn.kubernetes.io/mac_address: '00:00:00:53:6B:B6'

如图,VMI的上有MAC相关注解
image

但是launcher Pod 注解和 虚机内部并没有使用该MAC地址
image

image

  1. 请问OVN是否可以设置根据MAC地址来绑定IP地址,这样是否可以在固定IP的同时 也能够用ovn的dhcp分配的IP
@oilbeater
Copy link
Collaborator

  1. 热迁移的子网需要将子网的 disableGatewayCheck 设置为 true,关闭启动期间的连通性检查
  2. 和 3. 我们需要进一步验证一下
    十分感谢!

@hurdonkey
Copy link
Author

hurdonkey commented Mar 14, 2022

设置了该参数验证迁移成功了,非常感谢!

我们是希望kubevirt虚机在创建后IP保持不变,因为重启迁移等场景launcher Pod重新创建会导致IP会重新分配,目前看kube-ovn可以满足我们的需要。但是另一方面我们对创建虚机没有手动指定IP要求,注解需要我们在创建虚机时手动指定,也就是需要实现类似DHCP的逻辑,比如先获取ovn的ip列表再手动分配。我们觉得如果能从子网的DHCP获取ip,之后就能够固定下来就最好了。请教一下是否有好的建议,谢谢~

我们也尝试过先创建虚机,再将分配的IP写入注解的方式😂 ,迁移成功并且虚机内的IP没有变化。但是用get ips查看,ovn给新的launcher Pod分配了新的ip,而且迁移后无法从外部访问虚机内部的IP了,大概原因是Pod的IP发生了变化但是虚机内的IP没有变化。

@oilbeater
Copy link
Collaborator

我们目前在 master 做了类似 statefulset 的生命周期内ip固定的功能,可以参考 #1297 看看是否满足需求 @hurdonkey

@hurdonkey
Copy link
Author

hurdonkey commented Mar 29, 2022

我们目前在 master 做了类似 statefulset 的生命周期内ip固定的功能,可以参考 #1297 看看是否满足需求 @hurdonkey

我们用v1.9.1的版本验证, 在 kube-ovn-controller 设置了 --keep-vm-ip=true, vm重启是有一定几率会保持IP, 先stop再start的情况无法保持IP..

@hurdonkey hurdonkey reopened this Mar 29, 2022
@hurdonkey
Copy link
Author

hurdonkey commented Mar 29, 2022

在开启keep-vm-ip后, 我创建VirtualMachineInstanceReplicaSet会报错, 只是反馈一下, 我们实际没有使用这个资源的场景. 原本是想测试同个provider-networks下能否添加多个subnet(考虑到后续网段扩容的场景), 想通过VirtualMachineInstanceReplicaSet 创建多个vmi以观察IP分配. 你们可以确认一下.
image

我们验证结果是provider-networks中可以使用多个子网,子网间跨网段访问也没问题, 我们将这些子网通过BGP和外部网络打通,目前也是可以的. 不过添加了多个subnet后vm重启完全无法保持IP了.

@hongzhen-ma
Copy link
Collaborator

我们目前在 master 做了类似 statefulset 的生命周期内ip固定的功能,可以参考 #1297 看看是否满足需求 @hurdonkey

我们用v1.9.1的版本验证, 在 kube-ovn-controller 设置了 --keep-vm-ip=true, vm重启是有一定几率会保持IP, 先stop再start的情况无法保持IP..

我们这没有环境,复现起来比较困难。
这个先stop再start的操作,stop之后,vm本身应该是还存在吧?是只有vmi删除了,是这样吗?

@hurdonkey
Copy link
Author

hurdonkey commented Mar 31, 2022

我们目前在 master 做了类似 statefulset 的生命周期内ip固定的功能,可以参考 #1297 看看是否满足需求 @hurdonkey

我们用v1.9.1的版本验证, 在 kube-ovn-controller 设置了 --keep-vm-ip=true, vm重启是有一定几率会保持IP, 先stop再start的情况无法保持IP..

我们这没有环境,复现起来比较困难。 这个先stop再start的操作,stop之后,vm本身应该是还存在吧?是只有vmi删除了,是这样吗?

是的, stop后vmi和对应的launcher pod会被删除, vm对象是存在的, start会重新创建pod和vmi, 我们没有发现和restart动作的实际区别... 环境您不介意的话我这边可以提供临时的远程.

@oilbeater oilbeater added the bug Something isn't working label Apr 1, 2022
@hongzhen-ma
Copy link
Collaborator

@hurdonkey 方便加一下微信吗?13120485118,可以加我下

@hurdonkey
Copy link
Author

@hurdonkey 方便加一下微信吗?13120485118,可以加我下

您好 已添加

@hurdonkey
Copy link
Author

使用了v1.9.1最新的镜像, 虚机重启可以保持IP了, 但似乎被删除的Pod的IP信息没有回收, 非常感谢!

image

@hongzhen-ma
Copy link
Collaborator

查看配置后确认,使用的镜像,为3.16编的版本,还有一个pod删除的bug修复未包含。替换镜像后,问题解决。

另外在kube-ovn-controller pod创建IP crd资源之后,在测试环境上出现虚拟机 pod创建两个IP crd 的情况,需要定位解决下。

@hongzhen-ma
Copy link
Collaborator

ip crd重复的问题,已经确认,提交PR #1425 修改

@dwx3044
Copy link

dwx3044 commented Feb 20, 2024

@hurdonkey 大佬您好,我刚接触kubevirt,问下kubevirt创建出的虚机IP是一样的,pod IP是不一样的,这个合理吗?网络插件是kube-ovn

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

4 participants