K8s Master节点初始化失败求助:连接拒绝与Kubelet异常
解决Kubeadm初始化Master节点时kubelet启动失败及apiserver连接拒绝问题
问题根源分析
从日志可见两个核心问题:
- kubelet启动失败,报错
unable to load bootstrap kubeconfig: stat /etc/kubernetes/bootstrap-kubelet.conf: no such file or directory——该文件由kubeadm init生成,但kubelet提前启动时无法找到它,同时你的10-kubeadm.conf存在配置语法错误和重复参数问题。 - apiserver 6443端口连接拒绝——依赖kubelet的核心组件(如apiserver、etcd)未正常启动,根源是kubelet异常。
解决步骤
1. 清理初始化残留
彻底清理未完成的初始化环境,避免残留文件干扰:
kubeadm reset -f rm -rf /etc/kubernetes/ rm -rf /var/lib/kubelet/ systemctl stop kubelet containerd
2. 修正kubelet配置文件
编辑/etc/systemd/system/kubelet.service.d/10-kubeadm.conf,修正以下问题:
- 取消注释
KUBELET_CONFIG_ARGS行,移除重复的容器运行时参数(避免和KUBELET_CGROUP_ARGS冲突) - 修复
KUBELET_KUBECONFIG_ARGS行的语法错误(原行末尾直接拼接注释,导致环境变量解析失败)
修正后的完整配置:
# Note: This dropin only works with kubeadm and kubelet v1.11+ [Service] Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=systemd --container-runtime=remote --container-runtime-endpoint=unix:///run/containerd/containerd.sock" Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf" Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml" # This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env # This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use # the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file. EnvironmentFile=-/etc/default/kubelet ExecStart= ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS
3. 重启相关服务并重载配置
systemctl daemon-reload systemctl restart containerd systemctl enable containerd systemctl enable kubelet --now
4. 重新执行kubeadm初始化
kubeadm init --apiserver-advertise-address 172.21.103.8 --pod-network-cidr 10.244.0.0/16 --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --v=9
5. 配置kubectl客户端
初始化成功后,执行以下命令配置本地kubectl:
mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config
验证检查
- 确认containerd的cgroup驱动设置:
输出应为containerd config dump | grep SystemdCgroupSystemdCgroup = true - 检查kubelet状态:
确保服务处于systemctl status kubeletactive(running)状态 - 检查核心组件容器运行状态:
确认crictl pskube-apiserver、kube-controller-manager、kube-scheduler、etcd容器正常运行
内容的提问来源于stack exchange,提问作者Yinfei
相关产品推荐
相关产品推荐

