kubeadm init失败:kubelet-config.yaml文件缺失故障求助
解决CentOS 8下kubeadm init失败(kubelet-config.yaml缺失)问题
核心问题定位
kubelet启动失败是因为/var/lib/kubelet/kubelet-config.yaml文件缺失,导致kubeadm初始化时无法连接kubelet的10248健康检查端口。
具体解决步骤
1. 彻底清理Kubernetes残留文件
停止kubelet服务并清理相关目录、网络规则:
systemctl stop kubelet rm -rf /var/lib/kubelet/ /etc/kubernetes/ /var/lib/etcd/ iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X ipvsadm -C # 如果使用了ipvs作为kube-proxy模式,执行此命令
2. 确保容器运行时与kubelet的cgroup驱动一致
以Docker为例,修改配置使其使用systemd驱动:
创建或编辑/etc/docker/daemon.json:
{ "exec-opts": ["native.cgroupdriver=systemd"] }
重启Docker并设置开机自启:
systemctl daemon-reload systemctl restart docker systemctl enable docker
3. 生成kubelet配置文件并启动kubelet
先生成kubeadm初始化配置模板:
kubeadm config print init-defaults > kubeadm-config.yaml
按需修改kubeadm-config.yaml(比如添加podSubnet字段指定子网,例如podSubnet: 192.168.0.0/16),然后执行以下命令生成kubelet-config.yaml并启动kubelet:
kubeadm config images pull --config kubeadm-config.yaml kubeadm init phase kubelet-start --config kubeadm-config.yaml
验证kubelet状态:
systemctl status kubelet
确保kubelet处于active (running)状态。
4. 重新执行kubeadm初始化
使用自定义配置文件执行初始化:
kubeadm init --config kubeadm-config.yaml
如果需要忽略swap(CentOS 8默认开启swap,kubelet要求关闭),可以添加--ignore-preflight-errors=Swap参数。
额外注意事项
- 关闭SELINUX:
setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
- 关闭firewalld(测试环境可临时关闭,生产环境建议开放必要端口):
systemctl stop firewalld systemctl disable firewalld
内容的提问来源于stack exchange,提问作者noob_coder
相关产品推荐
相关产品推荐

