购买VPS服务器后K8s节点NotReady修复指南
文章分类:更新公告 /
创建时间:2025-06-13
完成vps服务器购买并搭建Kubernetes(K8s)集群后,部分用户会遇到节点状态显示为NotReady的问题。这一异常状态会阻碍集群调度工作负载,本文将按“现象-诊断-解决”的逻辑,详细拆解常见诱因及修复方法。
现象:节点状态异常
执行`kubectl get nodes`命令时,若看到节点的STATUS列显示NotReady(正常应为Ready),说明该节点无法与K8s控制平面正常通信或自身功能异常。此时节点无法承接新的Pod调度,已运行的Pod也可能因资源不足等问题出现异常。
诊断:定位四大核心诱因
K8s节点NotReady的根源通常集中在网络、资源、服务状态、证书四个维度,需针对性排查。
1. 网络连通性异常
VPS服务器的网络配置直接影响K8s组件通信。可通过以下操作快速验证:
- 节点内执行`ping 8.8.8.8`测试公网连通性;
- 用`traceroute kube-apiserver-ip`追踪到控制平面的网络路径;
- 检查防火墙规则(如iptables或云厂商安全组),确认已放行K8s关键端口(6443/api-server、10250/kubelet、2379/etcd等)。
2. 资源过载
节点CPU、内存或磁盘空间不足会触发K8s的健康检查失败。建议通过以下命令定位:
# 查看节点资源使用概况
kubectl describe node | grep -A 10 "Allocated resources"
# 查看磁盘占用(重点关注/var/lib/docker、/var/log目录)
df -h / && du -sh /var/lib/docker /var/log
若输出显示资源使用率超过80%,需警惕NotReady风险。
3. 关键服务未运行
kubelet(节点代理)和containerd(容器运行时)是节点的核心组件。可通过`systemctl status`命令检查状态:
systemctl status kubelet --no-pager
systemctl status containerd --no-pager
若服务显示`Active: failed`,需进一步查看日志(如`journalctl -u kubelet -n 50`)定位崩溃原因。
4. 证书过期或损坏
K8s通过TLS证书保障通信安全。kubelet的客户端证书默认有效期1年,过期后会导致与apiserver通信失败。可通过以下命令检查证书有效期:
openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -text | grep "Not After"
解决:针对性修复策略
根据诊断结果,可采取以下修复措施:
网络问题处理
- 若因防火墙拦截,执行`iptables -A INPUT -p tcp --dport 6443 -j ACCEPT`放行关键端口(需根据实际环境调整);
- 若VPS服务器内网不通,联系服务商检查虚拟网络配置,或重启网络服务:`systemctl restart network`(CentOS)/`systemctl restart systemd-networkd`(Ubuntu)。
资源不足应对
- 短期方案:清理无效资源,如`kubectl delete pods --field-selector status.phase=Succeeded`删除完成态Pod;手动清理大日志文件:`find /var/log -name "*.log" -size +1G -delete`;
- 长期方案:升级VPS服务器配置(增加CPU/内存/磁盘),或通过K8s资源配额(ResourceQuota)限制单命名空间资源使用。
服务异常修复
- 尝试重启服务:`systemctl restart kubelet containerd`;
- 若服务反复崩溃,检查配置文件(如kubelet的`--config`参数指向的yaml文件)是否有语法错误,或容器运行时是否与K8s版本兼容(可通过`kubeadm upgrade`升级组件)。
证书问题处理
证书过期时,使用`kubeadm renew certificates`命令自动更新所有证书,完成后需重启kubelet:`systemctl restart kubelet`。若手动替换证书,需确保新证书的CN(Common Name)与节点名一致,避免认证失败。
通过以上步骤,可高效定位并解决购买VPS服务器后K8s节点NotReady问题。实际运维中建议结合Prometheus+Grafana搭建监控体系,提前预警资源过载;同时定期执行`kubeadm check health`检查集群健康状态,降低故障发生概率。