最常用、最可靠的方式是执行kubectl get nodes查看status列是否为ready;若为notready或为空则节点异常,可进一步用kubectl describe node排查原因。

直接用 kubectl get nodes 查状态,看 STATUS 列是否为 Ready 就行。这是最常用、最可靠的方式,不需要写复杂条件判断脚本。
检查节点 Ready 状态的命令写法
终端执行以下命令:
kubectl get nodes -o wide
输出中 STATUS 列显示 Ready 表示节点正常;若为 NotReady 或为空,则说明节点异常(如 kubelet 未运行、网络插件故障、资源不足等)。
在 Shell 脚本中做条件判断
如果需要自动化判断,可用如下逻辑:
- 用
kubectl get nodes -o jsonpath='{.items[*].status.conditions[?(@.type=="Ready")].status}'提取所有节点的 Ready 状态值 - 配合
grep -q "True"检查是否存在就绪节点 - 或统计就绪节点数:
kubectl get nodes --no-headers | grep "Ready" | wc -l
例如判断是否所有节点都就绪:
[[ $(kubectl get nodes --no-headers | grep -c "Ready") -eq $(kubectl get nodes --no-headers | wc -l) ]] && echo "全部就绪" || echo "存在异常节点"
结合 describe 排查 NotReady 原因
发现 NotReady 后,立刻查详细信息:
kubectl describe node <node-name></node-name>
重点关注 Conditions 部分中的 Ready 条目,以及 Events 区域最近的报错(如 NetworkPluginNotReady、KubeletNotReady、磁盘压力等)。
注意几个常见干扰项
某些情况节点看似就绪但实际不可用:
- 节点
STATUS是Ready,但ROLES为空或为control-plane,需确认是否被cordon过 - 节点有
Taints(如node.kubernetes.io/unreachable),可能导致 Pod 无法调度 - 使用
kubectl get nodes -o wide时,INTERNAL-IP为空也常预示网络配置失败











