“「K8S 生态周报」内容主要包含我所接触到的 K8S 生态相关的每周值得推荐的一些信息。欢迎订阅知乎专栏「k8s生态」[1]。
”
大家好,我是张晋涛。
这是 2023 年的第一篇『K8S 生态周报』,在上个月的月中之后我因为阳了就停止更新了,一直在修养身体。生病相关的内容我在上一篇文章 张晋涛:我的 2022 总结 | MoeLove有做介绍。愿大家都注意身体,保持健康。
这篇中的内容同样也包含了近一个月中值得关注的内容。
containerd v1.6.15 发布
尽管 containerd 的 1.7.0-beta.2 也已经于近期发布,但正式版发布还需要一段时间。现在 containerd 使用最多的还是 v1.6 和 v1.5 这两个主要版本, 这次发布的 v1.6.15 中有一个非常关键的变更,是 #7845 - CRI: Fix no CNI info for pod sandbox on restart by dcantah
我主要也是想聊一下这个,从 v1.6.9 开始的最近几个 containerd 版本中都受到了此问题影响。
简单来说就是 containerd 重启后,Sandbox IP 没能保留,最终导致 kubelet 将会重启 Pod (如果重启 kubelet)。
具体现象如下,在 Node 上通过 crictl 工具查看任意未使用 HostNetwork 的 Pod 的 .status.network
字段,可以看到如下结果:
(MoeLove) ➜ crictl -r unix:///run/containerd/containerd.sock inspectp e03077da768e6 | jq .status.network
{
"additionalIps": [],
"ip": "10.244.1.5"
在重启 containerd 后,再次重复操作,就会发现 .status.network.ip
字段为空了:
(MoeLove) ➜ crictl -r unix:///run/containerd/containerd.sock inspectp e03077da768e6 | jq .status.network
{
"additionalIps": [],
"ip": ""
不过次是如果在 Kubernetes 集群中通过 kubectl 查看该 Pod 的状态,会发现 Pod 的 IP 还在。