K3S 因为镜像过大而导致无法启动容器的解决方法

当尝试在 K3S 中使用一些超大的镜像的时候,比如 3GB+ 大的镜像,K3S 在启动的时候,会报一个 "CreateContainerError: context deadline exceeded", 如果这个镜像采用 docker 或者 containerd 单独运行没有问题的话,K3S 本身也能正常启动 POD 的话,那可能就是 镜像太大导致 kubelet request 超时而导致 POD/container 无法启动的原因。

这个问题,实际上不好解决,不太容易在互联网上找到解决方案,所以这里,记录一下相关的解决方法。参考了如下的内容

解决方法,就是通过设置 kubelet 的 runtime-request-timeout 参数为更长的时间即可。

对于 K3S 来说就是 k3s server 中的 --kubelet-arg 参数中,指定 runtime-request-timeout。 具体的来说,在安装 K3S 的时候,在 K3S_EXEC 环境变量里面添加设个时长设置,例如 K3S_EXEC="--kubelet-arg=runtime-request-timeout=1h1m1s" 就是把超时的时间设置为了 1小时1分钟1秒。或者在 K3S 的 systemd 配置的文件中,或者其他类似的地方 (k3s.service 或者 k3s-agent.service) 中添加一个命令行参数 --kubelet-arg=runtime-request-timeout=1h1m1s