跳转到内容

Kubernetes节点问题

来自代码酷

Kubernetes节点问题[编辑 | 编辑源代码]

Kubernetes节点问题是指在Kubernetes集群中,工作节点(Node)因硬件故障、资源不足、配置错误或其他原因导致无法正常调度或运行Pod的情况。节点是Kubernetes集群的基本工作单元,负责运行容器化应用。节点故障会影响集群的稳定性和可用性,因此排查和解决节点问题是运维和开发人员的核心技能之一。

常见节点问题类型[编辑 | 编辑源代码]

以下是Kubernetes节点可能遇到的典型问题:

1. 节点不可用(NotReady)[编辑 | 编辑源代码]

当节点因网络中断、kubelet服务崩溃或资源耗尽而无法与控制平面通信时,其状态会变为NotReady

# 查看节点状态
kubectl get nodes

输出示例:

NAME       STATUS     ROLES    AGE   VERSION
node-01    NotReady   <none>   5d    v1.24.3

2. 资源不足[编辑 | 编辑源代码]

节点可能因CPU、内存或存储资源不足而无法调度新Pod:

# 查看节点资源使用情况
kubectl describe node node-01

关键输出片段:

Conditions:
  MemoryPressure   True
  DiskPressure     False
  PIDPressure      False

3. 网络问题[编辑 | 编辑源代码]

节点间网络不通或DNS解析失败会导致Pod无法通信。

4. 存储问题[编辑 | 编辑源代码]

持久卷(PV)挂载失败或存储空间不足。

诊断工具与方法[编辑 | 编辑源代码]

基础检查[编辑 | 编辑源代码]

使用以下命令获取节点基本信息:

kubectl get nodes -o wide
kubectl describe node <node-name>

日志分析[编辑 | 编辑源代码]

检查kubelet日志:

journalctl -u kubelet -n 50 --no-pager

资源监控[编辑 | 编辑源代码]

使用tophtop查看实时资源使用:

htop

实际案例[编辑 | 编辑源代码]

案例1:节点因内存压力变为NotReady[编辑 | 编辑源代码]

现象:节点状态显示NotReady,Pod调度失败。

排查步骤: 1. 检查节点事件:

kubectl describe node node-01 | grep -A 10 Events

发现MemoryPressure警告。

2. 登录节点检查内存:

free -h

确认可用内存不足1%。

解决:清理不需要的进程或扩容节点内存。

案例2:节点间网络不通[编辑 | 编辑源代码]

现象:跨节点Pod无法互相ping通。

排查步骤: 1. 检查Calico(或其他CNI插件)日志:

kubectl logs -n kube-system calico-node-abcde

发现防火墙阻止了BGP端口。

解决:调整防火墙规则允许节点间通信。

高级诊断[编辑 | 编辑源代码]

使用mermaid绘制节点状态图[编辑 | 编辑源代码]

graph TD A[Node Status] --> B{Ready?} B -->|Yes| C[正常调度Pod] B -->|No| D[检查kubelet] D --> E[服务运行中?] E -->|是| F[检查资源] E -->|否| G[重启kubelet]

资源计算公式[编辑 | 编辑源代码]

判断节点是否可调度新Pod需计算剩余资源: 可分配CPU=总CPU(运行中Pod的CPU请求)

预防措施[编辑 | 编辑源代码]

  • 设置合理的Pod资源请求(requests/limits)
  • 定期监控节点健康状态
  • 实现节点自动修复(如AWS EC2 Auto Healing)

参见[编辑 | 编辑源代码]