K8s 1.18 单节点集群完整搭建排错全过程日志
K8s 1.18 单节点集群完整搭建排错全过程日志2026-08-0910一、环境信息操作系统CentOS Linux 7 (Core)Docker 版本20.10.24官方未验证兼容版本为后续报错埋下伏笔Kubernetes 版本v1.18.20节点 IP192.168.1.20部署模式单 Master 节点允许 Master 调度业务 Pod二、最初问题起因最开始尝试拉取 calico 镜像搭建网络插件出现 docker.io 超时Plain TextError response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection问题根源国内无法正常访问 docker.io、calico 镜像源不稳定、阿里云旧 calico 镜像源已下线。决策放弃 calico改用 flannel 网络插件彻底规避镜像墙问题。三、第一次集群初始化报错端口残留、旧集群未清理干净首次执行 kubeadm init 报错6443、2379、10257、10259 全部端口占用、etcd 目录残留、静态清单文件残留。原因kubeadm reset 默认清理不彻底不会清空 etcd、iptables、cni 目录、k8s 残留容器。执行完整强制清理命令Plain Textsystemctl stop kubeletsystemctl disable kubeletrm -rf /etc/kubernetes/manifests/*docker rm -f $(docker ps -a | grep -E k8s_|etcd | awk {print $1}) 2/dev/nullrm -rf /var/lib/etcdrm -rf /etc/cni/net.d/*rm -rf $HOME/.kubeiptables -F iptables -t nat -F iptables -t mangle -F iptables -Xipvsadm --clear 2/dev/nullkubeadm reset -f四、第二次 kubeadm init 初始化成功使用阿里云官方镜像源、指定本机 IP、指定 pod 网段初始化成功Plain Textkubeadm init --apiserver-advertise-address192.168.1.20 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.20 --pod-network-cidr10.244.0.0/16初始化成功后配置 kubeconfig、解除 master 污点Plain Textmkdir -p $HOME/.kubecp -i /etc/kubernetes/admin.conf $HOME/.kube/configchown $(id -u):$(id -g) $HOME/.kube/configkubectl taint nodes --all node-role.kubernetes.io/master-五、第一波核心故障节点 NotReady、coredns 持续 Pending现象master 节点状态NotReadyetcd、apiserver、controller、scheduler、kube-proxy 全部正常 Runningcoredns 两个 Pod 一直 Pendingflannel Pod 看似 Running但网络不生效关键报错kubelet 日志Plain Textfailed to find plugin flannel in path [/opt/cni/bin]Unable to update cni config: no valid networks found in /etc/cni/net.druntime network not ready: NetworkReadyfalse reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized终极根因全网最隐蔽坑/etc/cni/net.d/10-flannel.conflist 配置文件存在但是宿主机 /opt/cni/bin 缺少 flannel 二进制插件。flannel 的 install-cni 初始化容器挂载异常、复制失败导致有配置、无程序 → kubelet 识别配置但是无法执行插件 → 网络永远未就绪 → 节点 NotReady → coredns 无法调度。六、手动根治修复过程核心解决步骤1. 手动补齐 flannel CNI 二进制插件Plain Textcd /opt/cni/binwget https://mirror.ghproxy.com/https://github.com/flannel-io/cni-plugin/releases/download/v1.5.1/flannelchmod x flannel2. 彻底废弃旧 kube-system 命名空间 flannel旧版本 flannel 挂载有问题替换为官方最新版独立命名空间 flannel。Plain Textkubectl delete daemonset kube-flannel-ds -n kube-systemkubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml3. 解决 ghcr.io 镜像拉取慢问题新版 flannel 使用 ghcr.io 镜像国内卡顿耐心等待镜像拉取完成最终全部容器启动成功。4. 重启 kubelet 重新加载 CNI 网络Plain Textsystemctl restart kubelet七、最终集群全部就绪状态节点状态Plain Textmaster Ready master 38m v1.18.0全部 Pod 状态全部 RunningPlain Textcoredns-7ff77c879f-db66s 1/1 Runningcoredns-7ff77c879f-zc6xf 1/1 Runningetcd-master 1/1 Runningkube-apiserver-master 1/1 Runningkube-controller-manager-master 1/1 Runningkube-flannel-ds-4bm99 1/1 Runningkube-proxy-7gltm 1/1 Runningkube-scheduler-master 1/1 Running八、收尾清理消除双 flannel 冲突清理 kube-system 残留旧 flannel避免双网络冲突Plain Textkubectl delete daemonset kube-flannel-ds -n kube-system九、本次排错核心总结永久存档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。