云服务器K8s节点不可达与调度失败排查手册
文章分类:售后支持 /
创建时间:2025-09-18
K8s云服务器运行中,节点不可达、调度失败是运维人员常遇到的两类典型故障。这类问题不仅影响业务连续性,还可能因排查效率低导致额外损失。本文将围绕“现象-诊断-解决”主线,结合实际运维经验,详细拆解故障排查要点。
节点不可达:从现象到根源定位
典型表现
通过kubectl get nodes命令查看集群状态时,部分节点显示为NotReady;应用日志频繁报错“无法连接节点”;关键服务因节点不可用出现中断。这些现象通常伴随集群整体性能下降,需优先处理。
分步诊断
1. 网络连通性检测:使用ping命令测试节点间IP可达性,若丢包率超20%或完全不通,需检查防火墙规则(重点关注K8s组件通信端口如6443、10250)、路由表配置及物理网络设备状态。
2. kubelet(节点核心代理组件)运行状态:执行systemctl status kubelet查看服务状态,若显示failed或activating,需进一步通过journalctl -u kubelet查看日志,常见问题包括配置文件错误(如cgroup驱动不匹配)、证书过期。
3. 资源水位检查:通过top命令观察CPU使用率是否长期超85%,free -h查看内存剩余是否低于10%,df -h检查根分区使用率(K8s默认要求小于85%)。曾遇某节点因日志文件未清理导致磁盘占满,最终触发节点不可达。
针对性解决
- 网络问题:调整防火墙策略开放10250(kubelet API)、6443(API Server)等端口;若为路由问题,联系网络团队修正集群VPC路由表。
- kubelet异常:手动重启服务systemctl restart kubelet;若反复崩溃,检查/etc/kubernetes/kubelet.conf配置,确认cgroup - driver与Docker/Containerd一致(如均为systemd)。
- 资源耗尽:紧急清理无效日志/临时文件释放磁盘;长期方案可部署Prometheus + Grafana监控,设置资源水位告警(如内存剩余<15%时触发)。
调度失败:Pod卡在Pending的深层原因
现象特征
创建Pod后长时间处于Pending状态,执行kubectl describe pod [podname]查看事件,常见提示如“0/3 nodes are available: 2 Insufficient memory”(内存不足)、“node(s) didn't match pod affinity/anti - affinity”(亲和性不匹配)。
排查关键点
1. 资源配额验证:通过kubectl describe node [nodename]查看节点Allocatable(可分配资源),对比Pod的requests(资源请求值)。例如某节点可分配内存2Gi,但Pod请求3Gi,必然调度失败。
2. 调度策略匹配度:检查Pod是否设置nodeAffinity(节点亲和性)、tolerations(容忍度)。曾遇到业务方误配置nodeAffinity要求“disk=ssd”,但集群中无该标签节点,导致Pod一直Pending。
3. 调度器健康检查:调度器(kube - scheduler)异常会导致全局调度停滞。通过systemctl status kube - scheduler确认服务状态,日志路径/var/log/kubernetes/scheduler.log,常见问题包括API Server连接超时、并发调度参数(--max - concurrent - reconciles)设置过低。
解决方案
- 资源不足:临时扩展节点资源(如升级云服务器配置);长期可启用HPA(Horizontal Pod Autoscaler)根据负载自动扩缩Pod;若为节点资源分配不均,可通过kubectl cordon标记旧节点为不可调度,引导新Pod到资源充足节点。
- 策略不匹配:调整Pod的nodeAffinity规则(如修改matchExpressions中的key/operator);若需容忍节点污点(taint),在Pod spec中添加tolerations字段,设置effect为NoSchedule。
- 调度器故障:重启调度器服务;若频繁异常,检查集群API Server响应时间(可通过kubectl get --raw /healthz查看),必要时调整调度器参数(如--leader - election - lease - duration设置为40s)。
实际运维中曾遇到某K8s云服务器集群同时出现节点不可达与调度失败:3个节点因iptables规则错误无法与API Server通信(显示NotReady),剩余节点因业务高峰内存耗尽,导致新Pod无法调度。通过修复防火墙规则恢复节点通信,同时临时扩容2台云服务器分担负载,30分钟内解决问题。
通过系统排查现象、定位问题根源、针对性解决,K8s云服务器的节点不可达与调度失败问题通常能得到有效处理。日常运维中建议开启集群监控(如Prometheus),设置节点状态、资源使用率、调度事件等告警,将故障处理从“被动响应”转为“主动预防”,最大程度保障业务稳定运行。