Kubernetes节点故障处理:Node状态异常排查方法

每日灵感集 +0/-0 0 0 正常 2025-12-24T07:01:19 Kubernetes · Node · DevOps

Kubernetes节点故障处理:Node状态异常排查方法

在Kubernetes集群运维过程中,节点状态异常是常见问题。本文将分享一套完整的节点故障排查流程和自动化处理方案。

常见节点状态异常类型

节点可能处于以下异常状态:

  • NotReady:节点无法正常工作
  • Unknown:监控系统无法获取节点状态
  • SchedulingDisabled:节点被标记为不可调度

排查步骤

1. 基础状态检查

# 查看节点状态
kubectl get nodes

# 详细节点信息
kubectl describe node <node-name>

2. 系统组件检查

# 检查kubelet服务状态
ssh <node-ip> "systemctl status kubelet"

# 查看系统日志
ssh <node-ip> "journalctl -u kubelet --no-pager"

3. 自动化故障恢复脚本

#!/bin/bash
# node-recovery.sh
NODE_NAME=$1

# 检查节点状态
if kubectl get node $NODE_NAME -o jsonpath='{.status.conditions[?(@.type=="Ready")].status}' | grep -q "False"; then
  echo "Node $NODE_NAME is NotReady, attempting recovery..."
  
  # 重启kubelet服务
  ssh $NODE_NAME "sudo systemctl restart kubelet"
  
  # 等待服务恢复
  sleep 30
  
  # 验证节点状态
  if kubectl get node $NODE_NAME -o jsonpath='{.status.conditions[?(@.type=="Ready")].status}' | grep -q "True"; then
    echo "Node $NODE_NAME recovered successfully"
  else
    echo "Node $NODE_NAME recovery failed"
    # 标记节点为不可调度并驱逐Pod
    kubectl cordon $NODE_NAME
    kubectl drain $NODE_NAME --ignore-daemonsets --delete-local-data
  fi
fi

4. CI/CD集成

在Jenkins流水线中集成节点监控:

pipeline {
  agent any
  stages {
    stage('Node Health Check') {
      steps {
        script {
          def nodes = sh(script: 'kubectl get nodes -o name', returnStdout: true).trim().split('\n')
          for (node in nodes) {
            def status = sh(script: "kubectl get ${node} -o jsonpath='{.status.conditions[?(@.type==\"Ready\")]}'", returnStdout: true)
            if (status.contains('False')) {
              echo "Node ${node} is unhealthy"
              sh "./node-recovery.sh ${node}" 
            }
          }
        }
      }
    }
  }
}

通过这套自动化流程,可以快速定位并恢复节点故障,提高集群稳定性。

推广
广告位招租

讨论

0/2000
开源世界旅行者
开源世界旅行者 · 2026-01-08T10:24:58
别把节点NotReady当成小事,我见过太多人只看状态码没深挖日志,结果小问题拖成大故障。建议加个健康检查钩子,提前发现问题。
RightLegend
RightLegend · 2026-01-08T10:24:58
自动化恢复脚本听着香,但别盲目上,我试过重启kubelet后节点直接宕机,得先确认是不是网络或存储问题再动手。
HotNina
HotNina · 2026-01-08T10:24:58
看到SchedulingDisabled状态就别急着驱逐Pod,很可能只是节点被手动标记了。排查前先看是否有运维操作记录,避免误伤。
Hannah770
Hannah770 · 2026-01-08T10:24:58
节点异常不是K8s的问题,而是底层环境不稳。建议从监控层面加个节点资源告警,比如内存/磁盘使用率超过90%就预警