You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS EKS节点误删后如何恢复?Pod调度失败求助

解决EKS节点删除后Pod无法调度、ELB异常的问题

我来帮你搞定这个EKS的节点恢复问题,你的情况是典型的**kubectl delete node仅移除了K8s控制平面的节点记录,但实际EC2 Worker节点并未被销毁**,而重新创建的节点又没正确注册到集群,才导致Pod一直Pending、ELB手动添加实例无效的问题。下面是分步解决方案:

一、恢复仍在运行的原有EC2 Worker节点

既然你的原EC2实例还正常,我们可以让它们重新加入EKS集群:

  1. 登录到每个EC2 Worker节点(可用SSH或者AWS Session Manager)
  2. 检查kubelet服务状态:
    sudo systemctl status kubelet
    
    如果服务未运行,启动并设置开机自启:
    sudo systemctl start kubelet
    sudo systemctl enable kubelet
    
  3. 验证节点的kubeconfig配置:
    查看/var/lib/kubelet/kubeconfig文件,确认server字段指向你的EKS集群API服务器地址。如果配置有误,用AWS CLI重新生成集群配置:
    aws eks update-kubeconfig --name <你的EKS集群名称> --region <集群所在AWS区域>
    
  4. 重启kubelet让配置生效:
    sudo systemctl restart kubelet
    
  5. 等待3-5分钟后,在本地执行kubectl get nodes,应该能看到原节点重新注册并变为Ready状态。

二、修复重新创建的Worker节点(若不想恢复原节点)

如果重新创建的节点一直无法加入集群,检查以下关键配置:

  • IAM角色权限:Worker节点的IAM角色必须关联这三个托管策略:AmazonEKSWorkerNodePolicy、AmazonEC2ContainerRegistryReadOnly、AmazonEKS_CNI_Policy,缺少的话及时添加。
  • 启动脚本正确性:创建Worker节点时必须使用EKS官方的启动脚本,确保脚本中正确指定了集群名称、区域和证书数据。
  • 网络连通性:Worker节点所在安全组必须允许出站访问EKS集群API服务器的443端口(可通过VPC端点或公网访问)。
  • 手动执行集群引导脚本:
    登录节点后运行以下命令,强制节点加入集群:
    sudo /etc/eks/bootstrap.sh <你的EKS集群名称> --region <集群所在AWS区域>
    
    完成后重启kubelet即可。

三、自动修复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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:03:10