如何使用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:
解决方案
方案一:替换默认节点组为自定义节点组(推荐)
CDK的默认节点组设计本身不支持直接修改版本,最稳妥的长期方案是用自定义节点组替代它:
- 将集群配置中的
defaultCapacity设为0,禁用默认节点组的自动创建 - 调用
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
相关产品推荐
相关产品推荐

