安装Kubernetes时Flannel启动失败求助:Docker与kube-apiserver异常
解决Flannel启动超时引发的Docker与kube-apiserver启动失败问题
看了你的日志,问题根源很明确——Flannel在启动时无法从etcd获取到指定路径的网络配置,报错failed to retrieve network config: 100: Key not found (/atomic.io),这直接导致flanneld启动超时,进而拖垮了依赖Flannel网络的Docker和kube-apiserver。下面是一步步的解决方法:
1. 先确认etcd服务是否正常运行
Flannel依赖etcd存储网络配置,首先得确保etcd本身是活的:
systemctl status etcd
如果etcd没启动,先把它拉起来并设置开机自启:
systemctl start etcd systemctl enable etcd
2. 手动向etcd写入Flannel网络配置
Flannel需要在etcd的/atomic.io/network前缀下有对应的网络配置,你现在缺失这个配置,所以得手动写入。执行这条命令(子网可以根据你的集群需求调整,10.244.0.0/16是Flannel常用的默认值):
etcdctl set /atomic.io/network/config '{ "Network": "10.244.0.0/16", "Backend": { "Type": "vxlan" } }'
要是你用的是etcdctl v3版本,记得加上端点参数,命令改成:
etcdctl --endpoints=http://127.0.0.1:2379 put /atomic.io/network/config '{ "Network": "10.244.0.0/16", "Backend": { "Type": "vxlan" } }'
3. 重启Flannel服务并验证状态
配置写入后,重启flanneld:
systemctl restart flanneld
然后检查状态,确认它已经正常启动:
systemctl status flanneld
4. 重启Docker和kube-apiserver
Flannel正常运行后,把依赖它的服务也重启一遍:
systemctl restart docker systemctl restart kube-apiserver
分别检查这两个服务的状态,确保它们都能正常启动:
systemctl status docker systemctl status kube-apiserver
额外排查提示
- 如果写入配置后还是报错,检查flanneld启动参数里的
-etcd-endpoints=http://127.0.0.1:2379是否和etcd实际监听的地址一致。 - 可以查看etcd的实时日志,排查是否有连接或权限问题:
journalctl -u etcd -f
内容的提问来源于stack exchange,提问作者Guldo




