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

如何强制替换EKS托管节点组中的旧版本节点?

解决EKS托管节点组残留旧版本节点的问题

问题背景

升级EKS集群到1.22版本(先控制平面,再节点)后,托管节点组显示版本为1.22,但集群中出现一个运行1.21版本的节点。执行kubectl get nodes可见:

NAME                                              STATUS   ROLES    AGE     VERSION
ip-10-13-10-186.ap-northeast-1.compute.internal   Ready    <none>   4h39m   v1.22.12-eks-ba74326
ip-10-13-26-91.ap-northeast-1.compute.internal    Ready    <none>   3h3m    v1.21.14-eks-ba74326
ip-10-13-40-42.ap-northeast-1.compute.internal    Ready    <none>   4h33m   v1.22.12-eks-ba74326

通过eksctl get nodegroup default-20220901053307980400000010 --cluster mycluster-dev -o yaml查看节点组,确认版本为1.22:

- AutoScalingGroupName: eks-default-20220901053307980400000010-f8c17xc4-f750-d608-d166-113925c1g9c5
  Cluster: mycluster-dev
  CreationTime: "2022-09-01T05:33:11.484Z"
  DesiredCapacity: 3
  ImageID: AL2_x86_64
  InstanceType: t3.large
  MaxSize: 3
  MinSize: 3
  Name: default-20220901053307980400000010
  NodeInstanceRoleARN: arn:aws:iam::XXXXXXXXXXX:role/eks_node_group_dev_role-20220901052135822100000004
  StackName: ""
  Status: ACTIVE
  Type: managed
  Version: "1.22"

手动删除旧节点后,集群未自动重建节点,当前仅剩余2个节点,需要强制替换旧版本节点以使用正确的kubelet版本。

解决方案

方法1:通过eksctl强制刷新节点组实例

执行以下命令触发节点组滚动更新,强制替换所有不符合版本的实例:

eksctl upgrade nodegroup --cluster mycluster-dev --name default-20220901053307980400000010 --kubernetes-version 1.22 --force

该命令会分批替换节点,保证集群可用性,最终所有节点都会更新到1.22版本。

方法2:手动触发Auto Scaling Group(ASG)实例刷新

  1. 登录AWS控制台,找到对应节点组的ASG(即eks-default-20220901053307980400000010-f8c17xc4-f750-d608-d166-113925c1g9c5)。
  2. 进入实例刷新标签页,点击开始实例刷新。
  3. 设置参数:
    • 最小健康百分比:建议设为67%(3节点集群保留2个健康节点)
    • 实例终止策略:选择OldestInstance,优先替换旧版本节点
  4. 启动刷新后,ASG会逐步替换旧实例为符合节点组配置的1.22版本实例。

方法3:调整ASG容量触发重建

如果手动删除节点后ASG未自动补全,可通过临时调整容量触发新节点创建:

  1. 临时将ASG期望容量调至4:
aws autoscaling update-auto-scaling-group --auto-scaling-group-name eks-default-20220901053307980400000010-f8c17xc4-f750-d608-d166-113925c1g9c5 --desired-capacity 4
  1. 待新的1.22版本节点加入集群后,删除旧的1.21版本节点:
kubectl delete node ip-10-13-26-91.ap-northeast-1.compute.internal
  1. 再将ASG期望容量调回3:
aws autoscaling update-auto-scaling-group --auto-scaling-group-name eks-default-20220901053307980400000010-f8c17xc4-f750-d608-d166-113925c1g9c5 --desired-capacity 3

方法4:检查并更新启动模板

如果节点组关联的启动模板仍指向旧版本镜像,需更新模板后触发更新:

  1. 查看节点组关联的启动模板:
eksctl get nodegroup default-20220901053307980400000010 --cluster mycluster-dev -o json | jq '.[].LaunchTemplate'
  1. 查询EKS 1.22对应的AL2镜像ID:
aws ssm get-parameter --name /aws/service/eks/optimized-ami/1.22/amazon-linux-2/recommended/image_id --region ap-northeast-1 --query Parameter.Value --output text
  1. 更新启动模板至最新版本,然后触发节点组更新:
eksctl update nodegroup --cluster mycluster-dev --name default-20220901053307980400000010 --launch-template-version '$Latest'

内容的提问来源于stack exchange,提问作者AlexW

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 20:36:38