问题描述

配置master节点时,执行kubeadm init --config kubeadm-config.yaml --v=5命令后,执行至初始化Pod步骤时报错:

[wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests". This can take up to 4m0s
[kubelet-check] Initial timeout of 40s passed.

Unfortunately, an error has occurred:
	timed out waiting for the condition
This error is likely caused by:
	- The kubelet is not running
	- The kubelet is unhealthy due to a misconfiguration of the node in some way (required cgroups disabled)
......

经过检查,host配置无误,cluster的IP地址也与本机相同

解决方案

报错后百度到几个可能有用的解决方法,但没能解决问题,最后发现是由于个人疏忽,忘记配置containerd

以下把几种方法列出供参考:


修改/lib/systemd/system/kubelet.service,添加kubelet启动参数如下:

[Service]
ExecStart=/usr/bin/kubelet --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/config.yaml

然后重启计算机,执行sudo kubeadm reset后重新执行sudo kubeadm init


到/etc/docker/daemon.json配置文件中,至少添加如下一段内容,修改docker的cgroup驱动:

{
	"exec-opts":["native.cgroupdriver=systemd"]
}

然后执行sudo systemctl restart docker重启docker,执行sudo kubeadm reset并重新sudo kubeadm init


将docker 的版本换成 19.03.9

kube* 版本换成 kubelet-1.17.3 kubeadm-1.17.3 kubectl-1.17.3


以上几种方法都没能解决问题,后来发现问题也许出在containerd上

以下是解决了我的问题的方案:

首先进行初始化:mkdir -p /etc/containerd,然后生成配置文件:containerd config default | sudo tee /etc/containerd/config.toml

然后编辑配置文件:sudo vi /etc/containerd/config.toml

[plugins."io.containerd.grpc.v1.cri"]
# k8s.gcr.io/pause:3.6改为"registry.aliyuncs.com/google_containers/pause:3.9" 
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
# SystemdCgroup,false改为true
SystemdCgroup = true
[plugins."io.containerd.grpc.v1.cri".registry]
# config_path,配置镜像加速地址(此目录之后手动创建)
config_path = "/etc/containerd/certs.d"
# 配置k8s拉取时的镜像
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
  endpoint = ["https://ok5mwqnl.mirror.aliyuncs.com","https://docker.1ms.run"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."k8s.gcr.io"]
  endpoint = ["registry.aliyuncs.com/google_containers"]

然后创建目录:mkdir /etc/containerd/certs.d/docker.io -pv,在docker.io中新建一个hosts.toml文件,文件中的镜像链接是配置docker时得到的镜像链接:

# hosts.toml
server = "https://docker.io"
[host."https://ok5mwqnl.mirror.aliyuncs.com"]
  capabilities = ["pull", "resolve"]

配置并加载containerd的内核模块:sudo vi /etc/modules-load.d/containerd.conf

# containerd.conf
overlay
br_netfilter

最后执行sudo modprobe overlaysudo modprobe br_netfilter即可

参考

历尽艰辛的问题:Waiting for the kubelet to boot up the control plane……This can take up to 4m0s

关于Kubernetes-v1.23.6-初始化时报错[kubelet-check] It seems like the kubelet isn’t running or healthy

k8s初始化master失败 Waiting for the kubelet to boot up the control plane asInitial timeout of 40s passed.

ubuntu20.04安装Kubernetes(k8s 1.27.4)

ubuntu系统安装k8s1.28精简步骤