自研 CNI 插件固定 IP 带来的问题,求助一下各位 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zhangtao
V2EX    Kubernetes

自研 CNI 插件固定 IP 带来的问题,求助一下各位

  •  
  •   zhangtao 2020-09-21 14:48:09 +08:00 3908 次点击
    这是一个创建于 1846 天前的主题,其中的信息可能已经有所发展或是发生改变。
    由于我司业务和运维环境等多方面要求,我们使用了 CNI 插件 + macvlan 这种方式,实现了 pod ip 的固定。
    可以这样理解:即一个服务我们会给它分配好一个 IP range ( 10.0.0.1 ~ 10.0.0.10 ),这个服务的 pod ip 始终是在这个范围内。

    正常情况下,pod 正常关闭即可释放 ip 资源。但是遇到异常情况(例如 k8s node 宕机)则会导致 ip 资源无法释放,需要人工跟进手工处理。

    不知有没有什么好的办法解决此类问题?
    20 条回复    2020-09-21 20:28:29 +08:00
    yuzhiquan
        1
    yuzhiquan  
       2020-09-21 14:54:44 +08:00
    在 ipam 里维护一个固定 ip 和 pod 的对应状态,异常状态下的未释放 ip,这边是集群里部署一个 cronjob 定期清理...
    rrfeng
        2
    rrfeng  
       2020-09-21 15:02:46 +08:00
    node 宕机自然 pod 也不存在了啊,或者迁移了。pod 不存在了 controller 自然可以更新 ipam 。
    感觉你逻辑设计的有漏洞。
    yuzhiquan
        3
    yuzhiquan  
       2020-09-21 15:07:38 +08:00
    @rrfeng node 突然挂掉的话,cri 没办法调用 cni 走一遍 del 流程,可能会造成 pod ip 没释放
    FabricPath
        4
    FabricPath  
       2020-09-21 16:40:16 +08:00
    写个 controller 去定期全量同步
    zhangtao
        5
    zhangtao  
    OP
       2020-09-21 17:04:27 +08:00
    @rrfeng node 挂掉之后,这台 node 上的 kubelet 是无法正常工作的,所以没法调用 CNI 的二进制
    menyakun
        6
    menyakun  
       2020-09-21 17:06:14 +08:00
    CNI 的 CmdDel 其实不能完全信任,我遇到过 Pod 被删除,但这个函数没被调用的情况。
    最好是在 controller 里面处理 Pod 和 IP 的绑定关系,CNI plugin 这层只是等待 Pod 的 IP 被分配好。
    关于这些异常 IP 的清理,还是要每个节点一个 Daemon 来处理。
    zhangtao
        7
    zhangtao  
    OP
       2020-09-21 17:10:53 +08:00
    @FabricPath 这个方案我们考虑过,但是感觉不是很优雅,所以想看看有没有更好的办法
    zhangtao
        8
    zhangtao  
    OP
       2020-09-21 17:13:41 +08:00
    @menyakun 请问下 如何在 conroller 中处理 Pod 和 IP 的绑定关系,能否说的详细些
    choury
        9
    choury  
       2020-09-21 17:26:51 +08:00
    你们没有 node 故障处理流程吗,就算这个 node 挂掉了,这个 ip 也是绑定在这个 node 上的啊,下架 node 的时候清理掉上面的 ip 不就行了
    zhangtao
        10
    zhangtao  
    OP
       2020-09-21 17:33:14 +08:00
    @choury 下架 node 没问题,现在的问题是 node 异常宕机,我们不希望人工介入处理,希望 node 异常宕机整个过程是全自动化 不影响业务的
    choury
        11
    choury  
       2020-09-21 17:38:29 +08:00
    @zhangtao #10 你们是 ip 太少,所以要快速回收吗?按照我的理解,node 异常宕机,如果能自动修复,kubelet 肯定已经起来了,就会调用 cni 的删除操作,如果 node 起不来了,走下架 node 流程,清理掉这个 node 绑定的所有资源
    还是你们遇到的是 node 起来了,但是 kubelet 并没有调用 cni 的释放 ip 操作?
    zhangtao
        12
    zhangtao  
    OP
       2020-09-21 17:51:43 +08:00
    @choury 不是 ip 多少的问题,是 ip 数量固定了;比如业务 A 需要 10 个 pod,因此就配置了一个有 10 个 ip 的 ip 段

    由于 ip 未正常释放,即使 pod 重新调度之后也拿不到可用 ip,导致 pod 一直在 pending 状态
    choury
        13
    choury  
       2020-09-21 17:56:21 +08:00
    @zhangtao #12 这个配置本来就有问题,需要给点余量的,包括滚动更新什么的也需要多余的 ip,而且不管用什么流程,node 异常后的处理都是要时间的,这段时间难道 pod 就不运行了吗
    defunct9
        14
    defunct9  
       2020-09-21 18:14:20 +08:00
    信也科技 https://github.com/ppdaicorp 说是把改造过的 Macvlan 插件进行了开源
    yuzhiquan
        15
    yuzhiquan  
       2020-09-21 18:14:34 +08:00
    @zhangtao 额,你们的 ipam 的 backend 用的啥? host-local ?
    zhangtao
        16
    zhangtao  
    OP
       2020-09-21 18:19:36 +08:00
    @yuzhiquan etcd
    yuzhiquan
        17
    yuzhiquan  
       2020-09-21 18:35:00 +08:00
    @zhangtao 哦,如果需要固定 ip,那 ip 就是服务的一种状态,就建议使用 statefulset 来部署,这样发布过程中保持 podname 不变,ip 就不变,就不用担心上面的情况了
    menyakun
        18
    menyakun  
       2020-09-21 19:30:20 +08:00
    @zhangtao 把 IP 当作一个单独的 CRD 就行了,Pod 的 ownerReference 是 IP ;然后加个 MutationWebhook 在 Pod 这个资源上,处理 Pod 与 IP 的绑定关系
    andyangyu
        19
    andyangyu  
       2020-09-21 19:53:00 +08:00
    @menyakun 学习了
    zhangtao
        20
    zhangtao  
    OP
       2020-09-21 20:28:29 +08:00
    @menyakun 感谢
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1153 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 56ms UTC 17:48 PVG 01:48 LAX 10:48 JFK 13:48
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86