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

如何使用CDK升级Amazon EKS默认节点组版本?

如何通过CDK升级EKS默认节点组的Kubernetes版本

问题背景

注意:本问题与自定义EKS节点组的升级场景不同——自定义节点组由用户定义并暴露可修改的配置项,而本文特指默认节点组:这类节点组是通过CDK创建集群时自动生成的,没有提供可直接修改的props配置项。

我通过以下CDK代码创建了EKS集群:

this.cluster = new eks.Cluster(this, 'eks-cluster', {
  vpc: props.vpc,
  clusterName: props.clusterName,
  version: eks.KubernetesVersion.V1_22,
  albController: {
    version: eks.AlbControllerVersion.V2_4_1,
  },
  defaultCapacity: 5,
});

目前已将集群版本及自定义节点组升级至v1.22,但默认节点组仍停留在v1.21:
EKS默认节点组版本截图

解决方案

方案一:替换默认节点组为自定义节点组(推荐)

CDK的默认节点组设计本身不支持直接修改版本,最稳妥的长期方案是用自定义节点组替代它:

  1. 将集群配置中的defaultCapacity设为0,禁用默认节点组的自动创建
  2. 调用addNodegroupCapacity创建自定义节点组,其版本会自动匹配集群版本(也可手动指定)

示例代码:

this.cluster = new eks.Cluster(this, 'eks-cluster', {
  vpc: props.vpc,
  clusterName: props.clusterName,
  version: eks.KubernetesVersion.V1_22,
  albController: {
    version: eks.AlbControllerVersion.V2_4_1,
  },
  defaultCapacity: 0, // 关闭默认节点组自动创建
});

// 创建自定义节点组,配置与原默认节点组一致的容量
this.cluster.addNodegroupCapacity('CustomDefaultNodeGroup', {
  instanceType: new ec2.InstanceType('t3.medium'), // 默认节点组的实例类型,可根据实际调整
  desiredCapacity: 5,
  minSize: 1,
  maxSize: 10,
  // 可选:手动指定版本,不指定则自动匹配集群版本
  // version: eks.KubernetesVersion.V1_22,
});

部署完成后,需手动驱逐原默认节点组上的Pod,再删除该节点组。

方案二:修改底层CloudFormation资源(临时方案)

如果需要保留默认节点组的结构,可以通过CDK访问其底层CloudFormation资源来修改版本:

// 获取默认节点组的底层CfnNodegroup资源
const defaultNodegroup = this.cluster.defaultNodegroup! as eks.CfnNodegroup;
// 将节点组版本设置为与集群版本一致
defaultNodegroup.kubernetesVersion = this.cluster.version.version;

注意:这种方式属于绕过CDK封装直接操作底层资源,若CDK的默认节点组实现发生变更,可能会出现兼容性问题,仅建议作为临时过渡方案使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 07:30:49