You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

kubeadm初始化containerd/cri-dockerd失败的问题排查求助

kubeadm初始化containerd/cri-dockerd失败的问题排查求助

我来帮你分析这两个容器运行时的初始化失败问题,逐个拆解原因和对应的修复方案:

一、containerd初始化失败的原因与修复

错误原因

你遇到的unknown service runtime.v1.RuntimeService错误,核心问题是Kubernetes 1.24+版本要求容器运行时必须支持CRI v1 API,但默认安装的containerd大概率没有启用CRI v1配置,仅开启了旧版的v1alpha2 API,导致kubeadm无法正常调用。

修复步骤

  1. 编辑containerd的核心配置文件:
    sudo nano /etc/containerd/config.toml
    
  2. 定位到[plugins."io.containerd.grpc.v1.cri"]区块,确保以下关键配置正确设置(如果没有就手动添加):
    [plugins."io.containerd.grpc.v1.cri"]
      enable_selinux = false
      sandbox_image = "registry.k8s.io/pause:3.9" # 镜像版本需匹配K8S 1.28,3.9是兼容版本
      [plugins."io.containerd.grpc.v1.cri".containerd]
        default_runtime_name = "runc"
        [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
          runtime_type = "io.containerd.runc.v2"
      [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
        SystemdCgroup = true # 如果你用systemd管理cgroup,必须开启此项
    
    同时确保配置文件中没有注释掉CRI相关插件,保证v1 API通路正常。
  3. 保存配置后重启containerd服务:
    sudo systemctl restart containerd
    
  4. 验证CRI API可用性:
    crictl --runtime-endpoint unix:///var/run/containerd/containerd.sock info
    
    若输出包含完整的运行时信息,说明CRI v1 API已正常启用。

二、cri-dockerd初始化失败的原因与修复

错误原因

kubelet-check连接10248端口被拒绝,本质是kubelet没有正确配置使用cri-dockerd作为容器运行时。因为你同时安装了containerd和cri-dockerd,kubelet默认会指向containerd的socket,导致无法和cri-dockerd建立通信。

修复步骤

  1. 配置kubelet绑定cri-dockerd的socket:
    编辑kubelet的默认配置文件:
    sudo nano /etc/default/kubelet
    
    添加以下内容:
    KUBELET_EXTRA_ARGS="--container-runtime=remote --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock"
    
  2. 重载系统配置并重启kubelet:
    sudo systemctl daemon-reload
    sudo systemctl restart kubelet
    
  3. 彻底清理之前的初始化残留:
    kubeadm reset -f
    sudo rm -rf /etc/cni/net.d
    sudo rm -rf /var/lib/etcd
    
  4. 重新执行kubeadm初始化:
    kubeadm init --v=5 --cri-socket=unix:///var/run/cri-dockerd.sock
    
  5. 验证kubelet健康状态:
    curl -sSL http://localhost:10248/healthz
    
    返回ok则说明kubelet已正常运行。

额外建议

  • 尽量只保留一个容器运行时:同时安装containerd和cri-dockerd容易引发配置冲突,建议卸载其中一个,避免后续出现选择混乱问题。
  • 检查VPN与NAT配置:确保WireGuard VPN没有拦截kubelet、容器运行时之间的本地通信,NAT规则正确转发集群内部流量。

备注:内容来源于stack exchange,提问作者Hardware noob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 14:04:35