
. 背景在一个单 Master 节点的 Kubernetes 集群基础上计划添加一个新的 Worker 节点名为 database以进行扩容。. 初始问题节点加入失败.问题1在 database 节点上执行 kubeadm join 命令后节点能够短暂连接到集群但随后 kubelet 报告 TLS 证书握手错误并最终变为 NotReady 状态。2.2 分析与解决通过分析journalctl -u kubelet -f输出的日志发现kubelet在尝试与containerd通信时失败connection refused并且在后续步骤中请求证书时被拒绝Unauthorized。这通常是由于 CNI容器网络接口插件未能正确启动导致 Pod 网络不可用进而影响了kubelet与 API Server 的通信。经过排查后原因是swap没有被禁用虽然之前的kubeadm join预检提到了 swap 警告但kubelet实际启动时却将其视为致命错误直接导致其退出。3. 问题2Flannel Pod 拉取镜像超时3.1 现象在 Master 节点上检查 Flannel 相关 Pod 的状态3.2 问题分析错误明确指出kubelet尝试拉取registry.k8s.io/pause:3.6镜像时超时。在中国大陆访问registry.k8s.io域名通常需要翻墙或使用代理这是导致超时的根本原因。4. 解决方案更换镜像源并配置修改containerd配置文件中的镜像源后重启containerd在 Master 节点上删除旧的 Pod触发重新创建kubectl delete pod kube-flannel-ds-7fbxv -n kube-flannel然后查看节点状态依然在拉去旧的镜像源kubectl describe pod kube-flannel-ds-tzsbx -n kube-flannel继续排查后发现是config.toml中有默认配置明确指定了containerd使用registry.k8s.io/pause:3.6作为 Pod Sandbox 的基础镜像。这个配置比kubelet命令行参数--pod-infra-container-image的优先级更高或者直接由containerd层面处理导致kubelet在尝试创建沙箱时总是去找registry.k8s.io/pause:3.6[rootdatabase ~]# cat /etc/containerd/config.toml |grep pause pause_threshold 0.02 sandbox_image registry.k8s.io/pause:3.6 You have new mail in /var/spool/mail/root修改此项配置sudo cp /etc/containerd/config.toml /etc/containerd/config.toml.bak sudo vim /etc/containerd/config.toml sandbox_image registry.aliyuncs.com/google_containers/pause:3.9 #修改配置项 重启worker节点的服务 sudo systemctl restart containerd sudo systemctl restart kubelet 在Master 节点删除当前失败的 Flannel Pod kubectl delete pod kube-flannel-ds-lpzzl -n kube-flannel等待几秒钟后查看节点状态都显示正常问题解决[rootiZ2ze6sn544ngzrbbprfmcZ ~]# kubectl get pods -n kube-flannel NAME READY STATUS RESTARTS AGE kube-flannel-ds-hghg6 1/1 Running 0 24h kube-flannel-ds-tzsbx 1/1 Running 0 37m