AWS EKS节点误删后如何恢复?Pod调度失败求助
解决EKS节点删除后Pod无法调度、ELB异常的问题
我来帮你搞定这个EKS的节点恢复问题,你的情况是典型的**kubectl delete node仅移除了K8s控制平面的节点记录,但实际EC2 Worker节点并未被销毁**,而重新创建的节点又没正确注册到集群,才导致Pod一直Pending、ELB手动添加实例无效的问题。下面是分步解决方案:
一、恢复仍在运行的原有EC2 Worker节点
既然你的原EC2实例还正常,我们可以让它们重新加入EKS集群:
- 登录到每个EC2 Worker节点(可用SSH或者AWS Session Manager)
- 检查kubelet服务状态:
如果服务未运行,启动并设置开机自启:sudo systemctl status kubeletsudo systemctl start kubelet sudo systemctl enable kubelet - 验证节点的kubeconfig配置:
查看/var/lib/kubelet/kubeconfig文件,确认server字段指向你的EKS集群API服务器地址。如果配置有误,用AWS CLI重新生成集群配置:aws eks update-kubeconfig --name <你的EKS集群名称> --region <集群所在AWS区域> - 重启kubelet让配置生效:
sudo systemctl restart kubelet - 等待3-5分钟后,在本地执行
kubectl get nodes,应该能看到原节点重新注册并变为Ready状态。
二、修复重新创建的Worker节点(若不想恢复原节点)
如果重新创建的节点一直无法加入集群,检查以下关键配置:
- IAM角色权限:Worker节点的IAM角色必须关联这三个托管策略:
AmazonEKSWorkerNodePolicy、AmazonEC2ContainerRegistryReadOnly、AmazonEKS_CNI_Policy,缺少的话及时添加。 - 启动脚本正确性:创建Worker节点时必须使用EKS官方的启动脚本,确保脚本中正确指定了集群名称、区域和证书数据。
- 网络连通性:Worker节点所在安全组必须允许出站访问EKS集群API服务器的443端口(可通过VPC端点或公网访问)。
- 手动执行集群引导脚本:
登录节点后运行以下命令,强制节点加入集群:
完成后重启kubelet即可。sudo /etc/eks/bootstrap.sh <你的EKS集群名称> --region <集群所在AWS区域>
三、自动修复LoadBalancer关联问题
你之前手动添加EC2实例到ELB之所以显示OutOfService,是因为EKS的LoadBalancer服务是由**Cloud Controller Manager(CCM)**自动管理的,手动添加的实例不在K8s节点池中,会被CCM标记为无效。
当节点恢复Ready状态后,CCM会自动将节点注册到ELB的目标组,等待5-10分钟后,运行kubectl get services查看nginx服务的状态,ELB目标组中的实例会自动变为InService,此时访问LoadBalancer URL就能正常访问nginx了。
四、清理Pending状态的Pod
如果之前创建的Pending Pod一直存在,可执行以下命令删除,让K8s重新调度到Ready节点:
kubectl delete pods --field-selector status.phase=Pending
内容的提问来源于stack exchange,提问作者Jagdish0886
相关产品推荐
相关产品推荐

