ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Kubernetes 集群部署:Flannel 镜像拉取失败导致 Node NotReady

2026/9/2 5:22:00 拓冰建站 浏览量
Kubernetes 集群部署:Flannel 镜像拉取失败导致 Node NotReady 一、问题背景在 Rocky Linux 9 上使用 kubeadm 部署 Kubernetes 集群。Master 节点主机名k8s-master IP10.0.0.13 系统Rocky Linux 9 Kubernetesv1.28.2 容器运行时containerdKubernetes 控制平面初始化成功kubectl cluster-info输出Kubernetes control plane is running at https://10.0.0.13:6443但是查看节点状态kubectl get nodes发现NAME STATUS ROLES AGE VERSION k8s-master NotReady control-plane 15m v1.28.2二、排查 Node 为什么 NotReady查看节点详细信息kubectl describe node k8s-master发现Ready False NetworkReadyfalse Network plugin returns error: cni plugin not initialized这说明Kubernetes 控制平面正常 etcd 正常 API Server正常 Scheduler正常 ControllerManager正常但是CNI 网络插件没有初始化Node NotReadyKubernetes 集群必须安装 CNI 网络插件才能让 Pod 网络正常通信。因此选择部署 Flannel。三、部署 Flannel 后出现新的问题执行 Flannel 部署kubectl apply -f kube-flannel.yml资源创建成功namespace/kube-flannel created serviceaccount/flannel created clusterrole.rbac.authorization.k8s.io/flannel created clusterrolebinding.rbac.authorization.k8s.io/flannel created configmap/kube-flannel-cfg created daemonset.apps/kube-flannel-ds created查看 Flannel Podkubectl get pods -n kube-flannel出现NAME READY STATUS kube-flannel-ds-xxxxx 0/1 Init:0/2等待后Init:1/2最终Init:ErrImagePull说明 Flannel 本身没有正常启动。四、定位问题镜像无法拉取查看 Flannel Podkubectl describe pod -n kube-flannel kube-flannel-ds-xxxxx可以看到 Kubernetes 正在拉取 Flannel 镜像。原始官方配置使用ghcr.io/flannel-io/flannel以及ghcr.io/flannel-io/flannel-cni-pluginFlannel 启动过程Flannel Pod │ ├── InitContainer 1 │ ↓ │ 下载 CNI Plugin 镜像 │ ├── InitContainer 2 │ ↓ │ 下载 Flannel 镜像 │ └── Flannel Container ↓ 启动 CNI但是 Master 节点在拉取 GHCR 镜像时卡住。使用crictl pull ghcr.io/flannel-io/flannel:v0.28.9发现镜像无法正常完成拉取。containerd 日志也出现PullImage failed context canceled因此可以确定问题核心是 containerd 无法正常拉取 Flannel 所需的 GHCR 镜像。五、解决方案更换可访问镜像源将 Flannel 镜像地址ghcr.io/flannel-io/替换为docker.io/flannel/例如原镜像 ghcr.io/flannel-io/flannel:v0.28.9 修改为 docker.io/flannel/flannel:0.28.9CNI Plugindocker.io/flannel/flannel-cni-plugin:v1.9.1-flannel3可以直接修改 YAMLsed -i s|ghcr.io/flannel-io/|docker.io/flannel/|g kube-flannel.yml然后重新部署kubectl apply -f kube-flannel.yml六、验证镜像是否能够正常拉取使用 crictl 测试crictl pull docker.io/flannel/flannel:0.28.9查看本地镜像crictl images | grep flannel如果能够看到docker.io/flannel/flannel docker.io/flannel/flannel-cni-plugin说明 containerd 已经可以正常拉取 Flannel 镜像。七、Flannel 启动成功重新查看kubectl get pods -n kube-flannel -o wide最终NAME READY STATUS RESTARTS kube-flannel-ds-c292x 1/1 Running 0