K8s 1.18 单节点集群完整搭建排错全过程日志
K8s 1.18 单节点集群完整搭建排错全过程日志(2026-08-09~10)
一、环境信息
- 操作系统:CentOS Linux 7 (Core)
- Docker 版本:20.10.24(官方未验证兼容版本,为后续报错埋下伏笔)
- Kubernetes 版本:v1.18.20
- 节点 IP:192.168.1.20
- 部署模式:单 Master 节点(允许 Master 调度业务 Pod)
二、最初问题起因
最开始尝试拉取 calico 镜像搭建网络插件,出现 docker.io 超时:
|
Plain Text |
问题根源:国内无法正常访问 docker.io、calico 镜像源不稳定、阿里云旧 calico 镜像源已下线。
决策:放弃 calico,改用 flannel 网络插件,彻底规避镜像墙问题。
三、第一次集群初始化报错(端口残留、旧集群未清理干净)
首次执行 kubeadm init 报错:6443、2379、10257、10259 全部端口占用、etcd 目录残留、静态清单文件残留。
原因:kubeadm reset 默认清理不彻底,不会清空 etcd、iptables、cni 目录、k8s 残留容器。
执行完整强制清理命令:
|
Plain Text |
四、第二次 kubeadm init 初始化成功
使用阿里云官方镜像源、指定本机 IP、指定 pod 网段,初始化成功:
|
Plain Text |
初始化成功后配置 kubeconfig、解除 master 污点:
|
Plain Text |
五、第一波核心故障:节点 NotReady、coredns 持续 Pending
现象
- master 节点状态:NotReady
- etcd、apiserver、controller、scheduler、kube-proxy 全部正常 Running
- coredns 两个 Pod 一直 Pending
- flannel Pod 看似 Running,但网络不生效
关键报错(kubelet 日志)
|
Plain Text |
终极根因(全网最隐蔽坑)
/etc/cni/net.d/10-flannel.conflist 配置文件存在,但是 宿主机 /opt/cni/bin 缺少 flannel 二进制插件。
flannel 的 install-cni 初始化容器挂载异常、复制失败,导致:
有配置、无程序 → kubelet 识别配置但是无法执行插件 → 网络永远未就绪 → 节点 NotReady → coredns 无法调度。
六、手动根治修复过程(核心解决步骤)
1. 手动补齐 flannel CNI 二进制插件
|
Plain Text |
2. 彻底废弃旧 kube-system 命名空间 flannel
旧版本 flannel 挂载有问题,替换为官方最新版独立命名空间 flannel。
|
Plain Text |
3. 解决 ghcr.io 镜像拉取慢问题
新版 flannel 使用 ghcr.io 镜像,国内卡顿,耐心等待镜像拉取完成,最终全部容器启动成功。
4. 重启 kubelet 重新加载 CNI 网络
|
Plain Text |
七、最终集群全部就绪状态
节点状态
|
Plain Text |
全部 Pod 状态(全部 Running)
|
Plain Text |
八、收尾清理(消除双 flannel 冲突)
清理 kube-system 残留旧 flannel,避免双网络冲突:
|
Plain Text |
九、本次排错核心总结(永久存档)
- kubeadm reset 清理不彻底,生产重建必须手动清端口、iptables、etcd、cni、残留容器
- flannel 最经典坑:有 CNI 配置、无二进制插件,肉眼极难排查,只能看 kubelet 日志
- Docker20.10 高于 k8s1.18 官方验证版本,会有隐性兼容问题
- ghcr.io、docker.io 国内极慢,自建集群必须换国内镜像源
- 节点 NotReady 90% 概率都是 CNI 网络层问题,而非控制平面问题
十、最终集群能力验证
控制平面健康、网络插件就绪、DNS 服务就绪、节点就绪,K8s v1.18 单节点集群 100% 可用,可正常调度所有业务 Pod。
更多推荐

所有评论(0)