tkestack / galaxy

Providing high-performance network for Kubernetes
Other
109 stars 39 forks source link

将release-policy设置为never时,删除POD 重建后,IP 并不能固定 #136

Closed huangzhuxing closed 3 years ago

huangzhuxing commented 3 years ago

之前我在同样的环境试过是能够固定 ip 的,请问下大佬,这个问题该如何定位?会不会是 etcd 的数据错乱导致?

实验步骤和环境信息见下图:

第一次删除(ip 从 251 变成 253): image

测试 demo: image

第二次删除(ip 从 253 变成 200): image

我开始认为与s tke.cloud.tencent.com/eni-ip:“1” 有关,但我重试将该参数加上,最后的验证结果依然是一样的(如下图): (ip 从 202 变成 204) image

环境信息如下(galaxy 的 image 我重新 build 过,主要是将 macvlan copy 进去): galaxy 是 1.0.8 k8s 是 1.19.11 docker 是19.03.12 all-in-one 单节点环境

image

macvlan配置如下:

[root@rhl7base yaml]# cat /etc/cni/net.d/20-macvlan.conf { "cniVersion": "0.2.0", "type": "macvlan", "name": "galaxy-k8s-macvlan", "master": "eno16777736", "mode": "bridge", "ipam": { "type": "host-local", "ranges": [ [ { "subnet": "172.16.49.0/24", "rangeStart": "172.16.49.200", "rangeEnd": "172.16.49.253", "gateway": "172.16.49.2" } ] ] } }

我试过使用 ipvlan,同样是以上效果。

chenchun commented 3 years ago
  1. tke.cloud.tencent.com/eni-ip:"1" 是需要配置的。
  2. 固定IP功能仅支持underlay网络,不支持overlay网络,你应该将CNI配置中ipam部分删掉(不删掉也没关系)。需要配置floatingip池 Configmap https://github.com/tkestack/galaxy/blob/master/doc/galaxy-ipam-config.md#float-ip-configuration

你的问题原因是没有配置floatingip池,配置后应该是调度器插件galaxy-ipam在调度阶段分配ip,写入pod的annotation中

huangzhuxing commented 3 years ago
  1. tke.cloud.tencent.com/eni-ip:"1" 是需要配置的。
  2. 固定IP功能仅支持underlay网络,不支持overlay网络,你应该将CNI配置中ipam部分删掉(不删掉也没关系)。需要配置floatingip池 Configmap https://github.com/tkestack/galaxy/blob/master/doc/galaxy-ipam-config.md#float-ip-configuration

感谢大佬在百忙之中答复我的疑问。

抱歉,在之前没完全说清楚我的环境信息,关于“floatingip池”,我是有配置的,但我没有单独创建kind: FloatingIP这个资源,如图: image

后面我又发现了新的情况,用pod的annotation中的 ip 跟实际的 POD IP 不是一致的(之前我试过用galaxy-bridge,是可以保持一致并且能一直重建成功固定的,近期是重建了 k8s 环境后用galaxy-bridge也无法固定),建如下图: image

我也摘取了 galaxy 的日志(为自己方便 debug,加了一下自己的日志代码,逻辑没动): 获取出来的 IP 是172.16.49.244,传入给 cni.go --> DelegateAdd 执行,调用invoke.ExecPluginWithResult的函数执行返回的是172.16.49.251 IP,本来计划将 cni 的 0.6.0 升级到0.8.1 尝试排除下,发现编译的时候多个地方报错,有部分函数 api的参数结构发生调整,就暂搁这个思路了。

image

galaxy-ipam 的日志: 一直是172.16.49.244这个 IP image

关于您说的“固定IP功能仅支持underlay网络,不支持overlay网络”,这块我不是特别理解我当前的网络环境是 underlay 还是 overlay 的,我主要是通过虚拟机的网卡eno16777736设置我的 macvlan 网络的(通过 galaxy 创建的 macvlan 也能正常使用),不知道是否跟这个有关,还望大佬提供一下排查思路,继续指引一下,感谢!

chenchun commented 3 years ago

我看你用的自己的macvlan的cni,需要修改下cni以支持从pod的annotation中获取ip,https://github.com/tkestack/galaxy/blob/dbc3522b3c42b31b49a224599c42e6229d5efe03/pkg/galaxy/server.go#L268-L285 https://github.com/tkestack/galaxy/blob/master/cni/ipam/ipam.go#L44-L58

huangzhuxing commented 3 years ago

感谢大佬指引。 macvlan 一直没有固定 ip 的问题大概已经弄清楚,我简单总结下:

1、我开始以为 bin 目录下的 macvlan 是 galaxy 编译出来的,后来发现是在 make 编译时,从下载的cni-plugins 解压出来,所以这块如果需要原生的macvlan实现 ip 固定,可能需要改动一下。

2、之前使用galaxy-k8s-vlan验证通过,后来出现问题是因为我更新了 float ip,但 galaxy-ipam 没有读取到最新的配置导致。

3 、目前验证 galaxy-k8s-vlan没有问题,但galaxy-flannel和galaxy-bridge一直不能固定,发现两种现象: 3.1:如果floatingip-config配置中,指定一个节点可以用多个网段时(如下配置代码),galaxy-flannel(172.20.x.x) 在 Annotation.args.commo.ipinfos设置的 ip 一直是第一个网段 ip,并且跟 pod ip 无法对应上(如下图),而 vlan(10.20.30.x) 则是正常的 3.2:尝试过将floatingip-config只保留galaxy-flannel(172.20.x.x)的 IP 段,仍然无法对应上,但Annotation.args.commo.ipinfos与galaxy-flannel(172.20.x.x)会变成同网段,例如 pod ip 是 172.20.0.10,而 pod 的 args 可能是172.20.0.20 这种奇怪现象, 这块可能是我还有某些地方没有正确配置导致?

kind: ConfigMap
apiVersion: v1
metadata:
 name: floatingip-config
 namespace: kube-system
data:
  floatingips: '[ {
    "routableSubnet": "172.16.49.131/32",
    "ips":["10.20.30.3~10.20.30.253"],
    "subnet":"10.20.30.0/24",
    "gateway":"10.20.30.1"
}, {
    "routableSubnet": "172.16.49.131/32",
    "ips":["172.20.0.0~172.20.253.253"],
    "subnet":"172.20.0.0/16",
    "gateway":"172.20.0.0"
},{
    "routableSubnet": "172.16.49.131/32",
    "ips":["172.16.49.3~172.16.49.253"],
    "subnet":"172.16.49.0/24",
    "gateway":"172.16.49.2"
}]'

image

chenchun commented 3 years ago

galaxy-flannel、galaxy-bridge不支持固定IP 支持固定IP的是这里的https://github.com/tkestack/galaxy/blob/master/doc/supported-cnis.md underlay network plugin

huangzhuxing commented 3 years ago

收到,感谢大佬的耐性指导。