crictl info连不上containerd需按顺序排查三要素:检查/etc/crictl.yaml中runtime-endpoint路径是否正确;确认/run/containerd/containerd.sock文件存在且为socket类型;验证containerd服务active(running)并启用cri插件。

直接上手就能跑通,但必须严格按顺序做对三件事:禁用 swap、加载 br_netfilter 模块、用 containerd 1.7.x(不是 2.x)。其他步骤出错还能救,这三点任一漏掉,kubeadm init 会卡在 “Container runtime is not running” 或直接崩溃。
为什么 containerd 1.7.x 是硬性门槛
Kubernetes v1.28 的 kubelet 不支持 containerd 2.x 默认生成的 config v3 格式。实测 containerd 2.2.x 启动后,kubelet 会反复报错退出,日志里固定出现:failed to load kubeconfig: invalid configuration: no configuration has been provided —— 实际是底层 runtime 连接失败导致配置加载中断。
- 必须安装
containerd1.7.28(Ubuntu 24.04 下 apt 安装默认是 2.x,得手动降级或换源) -
/etc/containerd/config.toml必须是 v2 格式,检查第一行是否为version = 2 - 执行
sudo containerd config default | sudo tee /etc/containerd/config.toml前,先确认 containerd 版本:containerd --version
kubeadm init 失败时最该查的三处
初始化卡住或报错,别急着重装,先盯住这三个点:
-
systemctl status containerd—— 确保 active (running),且无 “failed to start” 类提示 -
sudo crictl ps -a—— 如果报 “connection refused”,说明 containerd socket 没通,大概率是 config.toml 里disabled_plugins错误禁用了cri插件 -
journalctl -u kubelet -n 100 --no-pager—— 最常见错误是cgroup driver: "systemd" is not supported,此时需在kubeadm init加参数--cgroup-driver=systemd,并确保 containerd config 中[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]下也设为SystemdCgroup = true
Calico 安装后 Pod 一直 ContainerCreating
现象是 kubectl get pods -A 里 calico-node 一直在 ContainerCreating,kubectl describe pod -n kube-system calico-node-xxx 显示 FailedCreatePodSandBox。这不是镜像拉取问题,而是 Calico 配置和节点网卡不匹配:
- 默认 Calico YAML 假设节点主网卡是
eth0,但 Ubuntu 24.04 默认可能是enp3s0或ens33,必须改calico.yaml里IP_AUTODETECTION_METHOD的值 - 搜索 YAML 文件中
IP_AUTODETECTION_METHOD,改成interface=ens33(替换成你实际网卡名) - 如果节点有多 IP,还要加
CALICO_IPV4POOL_CIDR显式指定 Pod 网段,比如192.168.0.0/16,否则 Calico 可能选错网段导致路由不通
真正容易被忽略的是 containerd 的 config.toml 里 SystemdCgroup 开关和 kubelet 的 cgroup driver 是否一致——两者不匹配时,节点连 Ready 状态都进不去,但错误日志藏得很深,只在 kubelet 的 journal 里滚动几行就刷过去了。











