kubeadm init 报错如下

kubeadm init --control-plane-endpoint "vip:6443" --upload-certs  --image-repository registry.aliyuncs.com/google_containers  --pod-network-cidr=10.244.0.0/16 --kubernetes-version 1.23.5
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)

        If you are on a systemd-powered system, you can try to troubleshoot the error with the following commands:
                - 'systemctl status kubelet'
                - 'journalctl -xeu kubelet'

        Additionally, a control plane component may have crashed or exited when started by the container runtime.
        To troubleshoot, list all containers using your preferred container runtimes CLI.

        Here is one example how you may list all Kubernetes containers running in docker:
                - 'docker ps -a | grep kube | grep -v pause'
                Once you have found the failing container, you can inspect its logs with:
                - 'docker logs CONTAINERID'

error execution phase wait-control-plane: couldn't initialize a Kubernetes cluster
To see the stack trace of this error execute with --v=5 or higher

根据报错提示,使用给的docker journalctl 的日志均无法追踪到错误原因。创建单点 master 集群没有这个问题,且正常执行。但是创建高可用多master 就会init 失败。

#创建单点 master 集群没有这个问题,命令如下
kubeadm init \ --kubernetes-version v1.23.5 \ --image-repository registry.aliyuncs.com/google_containers \ --pod-network-cidr=10.244.0.0/16

#创建高可用集群时就会出现如上问题,命令如下:

kubeadm init --control-plane-endpoint "vip:6443" --upload-certs  --image-repository registry.aliyuncs.com/google_containers  --pod-network-cidr=10.244.0.0/16 --kubernetes-version 1.23.5

解决方法:
使用如下探测更详细更灵敏日志,增加–v=6 参数

kubeadm init --control-plane-endpoint "vip:6443" --upload-certs --v=6 --image-repository registry.aliyuncs.com/google_containers  --pod-network-cidr=10.244.0.0/16 --kubernetes-version 1.23.5 

得到如下日志:

GET https://192.168.0.22:6443/healthz?timeout=10s  in 4 milliseconds

原因是健康检查时连接 control-plane-endpoint 地址超时了,知道问题原因,那问题就迎刃而解了,–control-plane-endpoint参数,要么不加端口,要么加6443端口,否则都会报这个错,你可curl -I 下GET 后的链接,只要能正常访问则ok。
知道https://192.168.0.22:6443/healthz链接超时,则排查你的haproxy的配置,说明未转发成功

Logo

开源、云原生的融合云平台

更多推荐