Kubernetes运维:版本升级引起的PLEG故障
文章目录
Kubernetes 版本从 1.17.9 –> 1.20.4 当Pod数目增加时集群Pod状态stuck,kubelet出现PLEG故障告警,一段时间后节点notready。 以下两个ISSUE描述的问题和我们完全一致:
- https://github.com/rancher/rancher/issues/31793
- https://github.com/kubernetes/kubernetes/issues/101056
目前没有发现社区对该问题有明确结论,经过测试目前可以得出:
- 当stuck发生时,下面的命令可以检查卡住的容器ID。通常这些容器是Created状态,无法执行docker inspect,并且可能是任意容器
|
|
- 在kubernetes 1.19.x 和 1.20.x 都有用户反映出现该问题
- 三个目前主流的docker版本 18.x、19.x、20.x 用户反映都有问题。实际验证中尝试了上述三个版本的 docker, 发现没有版本能保证 Kubernetes 1.20.4 在所有环境中都正常运行。
结论:
参考以下几个 issue 发现问题的根因是:1.0.0-rc93 版本的runc存在bug,导致执行runc init/create 操作时进程stuck,该bug在pull/2871 中被修复,但是很多二进制发行版中的runc-1.0.0-rc93 是有问题的。PS:在runc-1.0.0-rc94 release-note中能看到关于这个问题的修复
解决方案:
Centos7中 runc文件是 containerd.io 安装包提供的,当前aliyun的docker-ce镜像库提供(截至20210602)提供以下版本,这些版本都能和docker-ce适配。因此部署k8s之前要手动检查runc版本!!
- 1.4.6-3.1.el7 –> 1.0.0-rc95
- 1.4.4-3.1.el7 –> 1.0.0-rc93
- 1.4.3-3.2.el7 –> 1.0.0-rc93
- 1.4.3-3.1.el7 –> 1.0.0-rc92
|
|
文章作者 yoaz
上次更新 2021-10-26
许可协议 MIT