首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Kubernetes 节点管理及常见问题处理

Kubernetes 节点管理及常见问题处理

作者头像
用户11081884
发布2026-07-20 19:59:16
发布2026-07-20 19:59:16
360
举报

Kubernetes 集群中节点是承载工作负载(Pod)的物理机或虚拟机。节点的健康状态直接关系到整个集群的稳定性和应用的可用性。本文将介绍 Kubernetes 节点的核心管理概念,并深入探讨节点“未就绪”(NotReady)这一常见问题的处理流程。

一、Kubernetes 节点管理

1.1 节点状态与生命周期

Kubernetes 节点控制器会持续监控节点状态,并将其报告给 API Server。节点主要存在以下几种状态:

  • Ready: 节点运行正常,可以调度 Pod
  • NotReady: 节点存在问题,无法调度 Pod
  • SchedulingDisabled: 节点被管理员手动封锁(Cordon),禁止调度新 Pod
  • Unknown: 节点完全不可达,通常由网络故障或节点宕机导致。

1.2 核心管理操作

查看节点信息
代码语言:javascript
复制
# 查看所有节点及其状态
kubectl get nodes

# 查看节点详细信息,包括IP地址、角色等
kubectl get nodes -o wide

# 获取特定节点的详细描述信息,包含事件、资源使用情况等
kubectl describe node <node-name>
节点调度管理
代码语言:javascript
复制
# 封锁节点,停止在该节点上调度新Pod(现有Pod不受影响)
kubectl cordon <node-name>

# 驱逐节点上所有Pod(结合cordon使用,用于维护)
kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data

# 解除节点封锁,恢复调度
kubectl uncordon <node-name>

二、节点“未就绪”(NotReady)问题处理

2.1 常见问题与原因

节点进入“NotReady”状态是运维中常见的问题,通常由以下原因导致:

1、系统资源耗尽CPU、内存或磁盘空间不足。

2、核心组件故障:节点上的 kubelet kube-proxy 进程异常退出或停止响应。

3、网络连接问题:节点与控制平面(Control Plane)之间的网络中断或不稳定。

4、操作系统或硬件问题:内核崩溃、硬件故障等。

2.2 问题排查与处理步骤

以下是一个系统性的排查流程,适用于大多数“NotReady”场景。

步骤 1:确认节点状态与基本信息

首先,确认节点确实处于“NotReady”状态,并获取其基本信息。

代码语言:javascript
复制
# 确认节点状态
kubectl get nodes
# 输出示例:
# NAME          STATUS     ROLES           AGE   VERSION
# node-worker1  NotReady   <none>          15d   v1.28.4
# node-master   Ready      control-plane   30d   v1.28.4

# 获取节点详细描述,重点关注 `Conditions` 和 `Events` 部分
kubectl describe node node-worker1

describe 命令的输出中, Conditions 部分会显示 MemoryPressureDiskPressurePIDPressure 等条件,这些是判断资源是否耗尽的关键。 Events 部分则记录了节点状态变化的相关事件。

步骤 2:连接到问题节点进行诊断

通过 SSH 等方式登录到问题节点,进行现场排查。

代码语言:javascript
复制
ssh user@node-worker1-ip-address
步骤 3:检查核心组件服务状态

在节点上,检查 kubelet kube-proxy (如果以系统服务形式运行)的状态。

代码语言:javascript
复制
# 检查 kubelet 服务状态(适用于 systemd 系统)
sudo systemctl status kubelet

# 查看 kubelet 服务日志
sudo journalctl -u kubelet -f --since "10 minutes ago"

# 检查 kube-proxy 状态(通常以 Pod 形式运行,但服务模式也需检查)
sudo systemctl status kube-proxy  # 如果以服务形式存在

如果服务处于 inactivefailed 状态,尝试重启服务。

代码语言:javascript
复制
sudo systemctl restart kubelet
sudo systemctl restart kube-proxy  # 如果适用
步骤 4:检查系统资源与日志

检查节点的资源使用情况和系统日志,寻找异常。

代码语言:javascript
复制
# 查看实时资源使用情况(CPU、内存)
top

# 查看磁盘空间使用情况
df -h

# 查看系统日志,过滤 kubelet 相关错误
sudo tail -100f /var/log/syslog | grep kubelet
# 或使用 journalctl 查看内核和系统日志
sudo journalctl -xe | grep -E "(kubelet|Out of memory|Killed process)"
步骤 5:检查网络连通性

从控制平面节点或集群内部其他 Pod,测试到问题节点的网络连通性。

代码语言:javascript
复制
# 首先获取问题节点的内部IP
kubectl get node node-worker1 -o wide | awk '{print $6}'

# 在控制平面节点或一个工具Pod中,测试连通性
# 使用 kubectl run 创建一个临时调试 Pod
kubectl run -it --rm debug-pod --image=busybox --restart=Never -- sh
# 进入 Pod 后,ping 问题节点IP
ping <node-worker1-internal-ip>
# 测试到 kubelet 端口(默认10250)的连通性
telnet <node-worker1-internal-ip> 10250
步骤 6:检查 kube-system 命名空间组件

有时问题可能源于控制平面组件,如 kube-proxy Pod 异常。

代码语言:javascript
复制
# 检查 kube-system 命名空间中所有 Pod 的状态
kubectl get pods -n kube-system -o wide

# 查看异常的 kube-proxy Pod 日志
kubectl logs -n kube-system <kube-proxy-pod-name-on-node-worker1>
步骤 7:高级诊断与修复

如果以上步骤未能定位问题,可以进行更深入的诊断。

  • 检查容器运行时kubelet 依赖容器运行时(如 containerd、Docker)。
代码语言:javascript
复制
sudo systemctl status containerd
sudo ctr --address /run/containerd/containerd.sock version
  • 检查证书kubelet 客户端证书可能过期。
代码语言:javascript
复制
sudo openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -dates
  • 重置节点(最后手段):如果问题无法解决,可以考虑将节点从集群中移除并重新加入。
代码语言:javascript
复制
# 在控制平面节点上,驱逐并删除节点
kubectl drain node-worker1 --ignore-daemonsets --delete-emptydir-data
kubectl delete node node-worker1

# 在问题节点上,重置 kubeadm 加入状态(如果使用 kubeadm)
sudo kubeadm reset -f
# 然后根据集群初始化时的命令重新加入
# sudo kubeadm join ...

2.3 预防“NotReady”

1、资源监控与告警:部署 Prometheus 和 Grafana 等监控工具,对节点的 CPU、内存、磁盘使用率设置告警阈值。

2、合理的资源规划与请求/限制:为 Pod 设置合理的 requests limits ,防止单个 Pod 耗尽节点资源。

代码语言:javascript
复制
apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  containers:
  - name: app
    image: my-app:latest
    resources:
      requests:
        memory: "256Mi"
        cpu: "250m"
      limits:
        memory: "512Mi"
        cpu: "500m"

3、使用节点自动伸缩:在云环境中,配置 Cluster Autoscaler,在资源不足时自动添加新节点。

4、保持 Kubernetes 组件版本一致:确保集群内 kubelet kube-proxy 等组件版本与控制平面兼容,并及时升级到稳定版本。

5、定期维护与健康检查:通过 CronJob 定期执行节点健康检查脚本。

代码语言:javascript
复制
apiVersion: batch/v1
kind: CronJob
metadata:
  name: node-health-check
spec:
  schedule: "0 */6 * * *" # 每6小时运行一次
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: check
            image: curlimages/curl
            command:
            - /bin/sh
            - -c
            - |
              # 这里可以编写检查节点核心服务、磁盘、网络的脚本
              echo "Performing node health check..."
          restartPolicy: OnFailure

Kubernetes 节点管理是集群稳定运行的基石。熟练掌握 kubectl 节点管理命令,理解节点状态的含义,是日常运维的基础。当遇到节点“NotReady”问题时,遵循从状态确认、服务检查、资源诊断到网络验证的系统性排查流程,可以高效地定位并解决大多数故障。同时,通过实施监控告警、资源规划等预防性最佳实践,能显著降低此类问题的发生频率,保障业务应用的持续可用性。

“无他,惟手熟尔”!有需要的用起来!

如果你觉得这篇文章有用,欢迎点赞、转发、收藏、留言、推荐❤!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-02-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Nicholas与Pypi 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、Kubernetes 节点管理
    • 1.1 节点状态与生命周期
    • 1.2 核心管理操作
      • 查看节点信息
      • 节点调度管理
  • 二、节点“未就绪”(NotReady)问题处理
    • 2.1 常见问题与原因
    • 2.2 问题排查与处理步骤
      • 步骤 1:确认节点状态与基本信息
      • 步骤 2:连接到问题节点进行诊断
      • 步骤 3:检查核心组件服务状态
      • 步骤 4:检查系统资源与日志
      • 步骤 5:检查网络连通性
      • 步骤 6:检查 kube-system 命名空间组件
      • 步骤 7:高级诊断与修复
    • 2.3 预防“NotReady”
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档