我有一个 k8s 集群,运行了一段时间,没有出现问题。几天前,它无法启动,当 kubelet 启动时,它会创建许多控制平面容器(明显是无限循环),所有容器都标记为已创建,Docker 和 kubelet 日志中每个创建的容器都出现以下错误:
Handler for POST /v1.40/containers/<ID>/start returned error: unable to find user 0: invalid argument
背景信息:
- 当我注意到 kubelet 版本为 v1.19.1 时,集群仍在运行 v1.19.0
- docker 在 Debian 上的版本是 19.03.12(在 Linux 5.7.0-3 和 5.8.0-1 上进行了测试)
- 我最初怀疑升级到 kubelet v1.19.1(从 v1.19.0)有问题,但撤销升级并没有解决问题
- 我尝试了几种
docker run -it <image> sh -i
不同的图像,但它们运行良好,包括使用命令行进行卷安装-v
和转发端口时;这些容器运行良好-p
- 重新安装docker并
apt purge ... && apt install ...
没有解决问题,即使/var/lib/{docker,kubelet}
在重新安装之前删除 - 也没有
kubeadm reset ... && kubeadm init
- docker 使用 overlay2 存储驱动程序和 systemd cgroup 驱动程序
- 我没有启动时的日志,因为我几天没有使用这个(开发)集群,随后的错误填满了日志
任何提示和建议都值得赞赏。遗憾的是,错误消息不足以帮助找出问题所在,甚至无法找出依赖链中的问题所在。
答案1
正如 @mdaniel 在评论中提到的,该问题可能与未安装的 docker 版本有关。
按照此 github 上的步骤解决了这个问题邮政按用户恩克雷斯韦尔。
好的,在 Debian 10 上运行良好,即使安装了 AppArmour 并强制执行策略。
我从 Docker 官方 Repo 安装了 Docker CE。 https://docs.docker.com/engine/install/debian/
请执行相同操作并恢复..请注意,在 Debian 11 发布为“稳定版”之前,我们不会提供任何支持。
顺便提一下,其他人也遇到了这个问题,并在这里向 Debian 维护人员报告:bugs.debian.org/cgi-bin/bugreport.cgi?bug=970525