找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

578

积分

0

好友

77

主题
发表于 5 天前 | 查看: 21| 回复: 0

原因

节点状态显示为 NotReady,其核心原因通常是 CNI(容器网络接口)配置未初始化

具体的报错信息可能如下:

container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized。

简单来说,这意味着你的 K8S 集群缺少必要的网络插件,导致节点无法完成网络初始化并进入就绪状态。没有网络插件,Pod 之间就无法通信,集群自然无法正常工作。

解决方案(完整可操作步骤)

1. 先确认集群中未部署任何网络插件

首先,我们需要验证问题是否确实源于网络插件的缺失。可以通过以下命令检查 kube-system 命名空间下是否存在主流的网络插件 Pod:

kubectl get pods -n kube-system | grep -E 'calico|flannel|cilium|weave'

如果这条命令没有任何输出,那么就确认了集群中确实没有部署 CNI 网络插件,这正是导致节点 NotReady 的根源。

2. 部署主流的 Calico 网络插件(推荐)

Calico 是 Kubernetes 生态中最常用、功能强大的网络插件之一,其性能与安全性表现优异,兼容性也很好。推荐使用以下命令进行一键部署:

# 部署 Calico 网络插件(适配 K8S 1.24+ 版本)
kubectl apply -f https://docs.projectcalico.org/v3.28/manifests/calico.yaml

# 验证 Calico Pod 是否启动
kubectl get pods -n kube-system -l k8s-app=calico-node

正常情况下,所有 calico-node Pod 会在 1-2 分钟内启动并进入 Running 状态,这表明 CNI插件 已成功部署。

3. 备选方案:部署 Flannel 网络插件

如果你在部署 Calico 时遇到问题,或者需要一个更轻量级的方案,可以尝试部署 Flannel。Flannel 配置简单,是许多入门级集群的选择。

# 先删除已部署的 Calico(如果之前部署过)
kubectl delete -f https://docs.projectcalico.org/v3.28/manifests/calico.yaml

# 部署 Flannel 插件
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/v0.25.0/Documentation/kube-flannel.yml

# 验证 Flannel Pod 状态
kubectl get pods -n kube-system -l app=flannel

4. 验证节点状态恢复

部署完网络插件后,请等待 2-3 分钟,让插件完成初始化并配置节点网络。之后,执行以下关键命令检查节点状态:

kubectl get nodes

如果一切顺利,所有节点的 STATUS 都应该从 NotReady 变为 Ready。这是判断问题是否解决的最直接标志。

5. 特殊情况:如果网络插件 Pod 启动失败

偶尔,网络插件 Pod 本身可能因为系统环境问题而无法启动。如果遇到这种情况,请按以下步骤排查:

  1. 检查网络连通性:网络插件需要从镜像仓库拉取镜像,并需要节点间网络互通。

    # 检查节点是否能访问外网(拉取镜像需要)
    ping -c 2 registry.cn-hangzhou.aliyuncs.com
    
    # 检查节点间网络互通(在 master 节点 ping node 节点)
    ping -c 2 192.168.0.xxx  # 请替换为你的 node 节点 IP
  2. 检查防火墙和 SELinux:它们可能会阻断 Pod 网络所需的端口和流量。

    # 临时关闭防火墙(生产环境请谨慎配置安全组或防火墙规则)
    systemctl stop firewalld && systemctl disable firewalld
    
    # 临时关闭 SELinux(使其处于 Permissive 模式)
    setenforce 0

    完成这些检查并调整后,再次观察网络插件 Pod 的状态。

总结

遇到 K8S集群 节点 NotReady 时,可以遵循以下思路:

  1. 核心问题定位:绝大多数情况下,原因是 K8S 集群未部署 CNI 网络插件,导致节点网络初始化失败。
  2. 解决关键步骤:部署如 Calico 或 Flannel 等主流 CNI 插件,这是 Kubernetes 集群能够正常运行的基础组件,负责 Pod 的网络通信。
  3. 验证标准:成功的标志有两个:一是部署的网络插件(Calico/Flannel)的所有 Pod 处于 Running 状态;二是执行 kubectl get nodes 命令显示所有节点状态为 Ready

在云原生技术实践中,理解和正确配置容器网络是至关重要的一环。如果你在部署过程中遇到其他复杂问题,欢迎在 云栈社区 的技术论坛中与其他开发者交流探讨。




上一篇:Transformers库核心技巧:详解AutoModel与AutoTokenizer自动加载机制
下一篇:2026年AI开发者生存指南:从码农到架构师的转型路径
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-24 02:48 , Processed in 0.295849 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表