kubectl get nodes可查看节点状态,Ready表示健康,NotReady说明kubelet未就绪或通信异常;需关注AGE、VERSION、OS-IMAGE;进一步用describe node、systemctl status kubelet、journalctl排查;维护时先cordon再drain,修复常见故障如网络不通、证书过期、磁盘耗尽、CRI异常;建议启用kubelet指标、Node Problem Detector及版本校验。

查看节点状态与基本信息
节点是否正常运行,第一步要看 kubectl get nodes 的输出。状态为 Ready 表示节点已注册且健康,NotReady 则说明 kubelet 未就绪或通信异常。注意观察 AGE(上线时间)、VERSION(Kubernetes 版本)和 OS-IMAGE(操作系统镜像),这些信息能快速定位版本不一致或系统老化问题。
进一步排查可用执行:
-
kubectl describe node
:查看 Conditions(如 MemoryPressure、DiskPressure、PIDPressure)、Allocatable 资源、已调度 Pod 列表及最近事件 - ssh 到节点后运行 systemctl status kubelet:确认 kubelet 进程是否活跃,日志中是否有 TLS 认证失败、cgroup 配置错误等关键报错
- journalctl -u kubelet -n 100 --no-pager:获取最近 100 行 kubelet 日志,重点关注 “failed to load”、“connection refused”、“certificate has expired” 类提示
节点临时下线与安全驱逐
维护前需让节点停止接收新 Pod,并迁移已有工作负载。直接关闭 kubelet 或重启机器会导致 Pod 意外终止,应使用 cordon + drain 组合操作。
标准流程如下:
-
kubectl cordon
:标记节点为不可调度,新 Pod 不会再被分配至此 -
kubectl drain
--ignore-daemonsets --delete-emptydir-data :优雅驱逐所有可迁移 Pod(跳过 DaemonSet 管理的 Pod;若 Pod 使用 emptyDir,需加 --delete-emptydir-data 显式允许清理) - 等待 drain 完成后再执行系统更新、磁盘扩容或硬件更换等操作
- 恢复时运行 kubectl uncordon
解除调度限制
常见节点故障场景与修复
节点长期处于 NotReady 或反复震荡,通常由以下几类原因引起:
-
网络不通:检查节点能否访问 API Server(curl -k https://
:6443/healthz ),确认防火墙是否放行 6443(API Server)、10250(kubelet metrics)、30000–32767(NodePort)端口 - 证书过期:kubelet 使用的 client 证书默认有效期为 1 年。若报 “x509: certificate has expired or is not yet valid”,需轮换证书 —— 可通过 kubeadm certs renew node(kubeadm 集群)或手动签发并重载 kubelet
- 磁盘或 inodes 耗尽:运行 df -h 和 df -i,重点检查 /var/lib/kubelet 和容器运行时根目录(如 /var/lib/containerd)。清理镜像(crictl rmi --prune)或旧容器日志可释放空间
- CRI 运行时异常:确认 containerd 或 dockerd 是否运行(systemctl is-active containerd),检查其日志(journalctl -u containerd),常见问题包括插件未加载、沙箱镜像拉取失败
节点资源监控与长期健康保障
被动排障不如主动监控。建议在节点上部署基础可观测能力:
- 启用 kubelet 的 --enable-server=true 和 --read-only-port=10255(或更安全的 10250 + TLS),供 Prometheus 抓取指标
- 配置 Node Problem Detector(NPD):监听系统日志(如 kernel oom-killer、disk full)并上报为 NodeCondition,便于 kubectl describe node 直观发现
- 定期校验节点组件版本一致性:kubectl get nodes -o wide 对比 VERSION 列,避免因 minor 版本跳跃(如 v1.26 → v1.28)引发兼容性问题
- 对关键节点启用 taints(如 node-role.kubernetes.io/control-plane:NoSchedule)防止误调度,同时为 worker 节点添加 label(如 env=prod)便于策略化管理









