pod running 且始终没有重启过,但是无 ip, 有什么排查思路?

130 天前
 cinlen

如下所示:

root@node1:~/cxl# kg po -A -l app=redis -o wide
NAME                    READY   STATUS    RESTARTS   AGE   IP     
redis-84dbddc47-77nsl   1/1     Running   0          4d    <none>

pod 自然一开始是有 ip 的,但是有一天发现突然这个 pod running 但是 ip 消失了。

cni 使用的是 multus + calico :

一切 ok , 唯独 pod.status.podIP 不见了。

目前怀疑是 kubelet 更新 pod status 的时候把 ip 弄丢了(期间有重启过 kubelet ),但是没有复现,目前不清楚如何复现,暂时也没啥思路了。

大佬们有遇到这个问题吗?或者有什么排查思路吗?

1279 次点击
所在节点    Linux
7 条回复
duanjiong
130 天前
你这思路没问题啊, 就看看 kubelet 日志吧, 看看 kubelet 那部分更新状态的代码
saka0609
130 天前
这种问题我也没碰到过
multus 我用的不多, 这里有什么报错么?
查出来了麻烦 @我下
cinlen
130 天前
@duanjiong 日志没有太多可用线索, 所以思路断掉了
guanzhangzhang
129 天前
pod 内的 ip ,本机和其他节点能否 ping 通
发生频率高不高,是否是固定的节点
是否升级过啥东西后出现的,例如 cni plugin ,或者更改过啥配置参数
crictl inspect 从 CRI 协议去看看,对比看看
cinlen
127 天前
@guanzhangzhang
@saka0609

错怪 kubelet 了,复现步骤是:

1. 重启 containerd(cri) ,所有 pod 的网络信息被清理(通过 `crictl inspectp <pod id> | jq .info.cniResult` 查看)
2. 重启 kubelet, kubelet 会去找 containerd 要所有 pod 的最新一手信息,containerd 此时会重新调用 cni 去要所有 pod 的网络信息
3. 从 containerd 日志看, 所有 pod 都重新要到了 ip 唯独 redis 这个 pod 压根没有去要, 于是 kubelet 就把 redis 的 pod.status.podIP 更新为空了

第 3 步暂时查不下去了,网络这块看的脑壳晕。
saka0609
127 天前
@cinlen 这个 pod 为啥会没去要, 还是要到了发现这个 ip 并不可用而置空.
debug 过程有记录吗, 我也想看看
guanzhangzhang
124 天前
@cinlen #5 这个和网络无关阿,看着是 containerd 的问题,调试看看,我要是有你这个问题环境,说不定我还能混个开源 pr 修复下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1057780

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX