K3s server 卡在等待 containerd socket 就绪,需检查其进程、socket 文件存在性与权限、系统 containerd 冲突、cgroup 驱动一致性及日志报错,必要时临时跳过等待诊断。

这个问题通常不是 containerd 启动失败,而是 K3s server 在等待 containerd 的 API socket 就绪,但实际 containerd 进程可能已运行、却未正确暴露或权限异常。重点排查 containerd 是否真在运行、socket 文件是否存在且可访问、以及是否被其他进程(如系统 containerd)抢占端口或路径。
检查 containerd 进程和 socket 状态
K3s 内置的 containerd 默认不使用系统全局服务,而是以独立进程运行,并监听 /var/lib/rancher/k3s/agent/containerd/containerd.sock。执行以下命令确认:
- 运行
ps aux | grep containerd,确认有类似k3s-containerd或带--config /var/lib/rancher/k3s/agent/etc/containerd/config.toml的进程 - 检查 socket 文件:
ls -l /var/lib/rancher/k3s/agent/containerd/containerd.sock—— 若不存在或权限为 root:root 且非 0600,K3s server 主进程无法连接 - 手动测试连通性:
sudo crictl -r unix:///var/lib/rancher/k3s/agent/containerd/containerd.sock info(需安装crictl),若报 “connection refused” 或 “no such file”,说明 containerd 未就绪或配置错位
确认无系统 containerd 冲突
如果宿主机已安装并启用了 systemd 的 containerd.service(如 Ubuntu 默认安装),K3s 可能因路径冲突或 cgroup 驱动不一致卡住:
- 运行
sudo systemctl is-active containerd,若返回active,先停用:sudo systemctl stop containerd && sudo systemctl disable containerd - 检查 K3s 日志中是否有
cgroup driver: "systemd" vs "cgroupfs"类似警告 —— 可通过启动参数统一:--container-runtime-endpoint unix:///var/lib/rancher/k3s/agent/containerd/containerd.sock --kubelet-arg="cgroup-driver=systemd"(需匹配 containerd config 中的disabled_plugins和plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options.SystemdCgroup = true)
查看 K3s 容器运行时日志定位根因
K3s 启动时会拉起 containerd 子进程,其日志直接输出到 K3s 主日志中:
- 执行
sudo journalctl -u k3s -n 200 -f(systemd)或sudo cat /var/lib/rancher/k3s/server/logs/k3s.log | tail -n 100(裸机),搜索关键词:containerd、failed to load plugin、failed to create containerd client、address already in use - 常见报错示例:
failed to load plugin io.containerd.grpc.v1.cri: invalid version "v1": unknown version→ 表明 containerd 版本与 K3s 不兼容(如 K3s v1.28+ 要求 containerd ≥ 1.7);此时应升级 K3s 或降级 containerd(不推荐),更稳妥的是重装匹配版本的 K3s
临时绕过等待(仅用于诊断)
若需快速验证是否为等待逻辑本身导致卡顿(而非 containerd 故障),可加启动参数跳过健康检查:
sudo k3s server --disable-agent --no-deploy servicelb,traefik --wait-control-plane=false- 此模式下 K3s 不阻塞在 containerd 就绪检查,但仅适用于调试 —— 正常部署必须确保 containerd 可用










