Skip to content

Commit 8db9492

Browse files
authored
Use AmazonLinux2023 as default AMI instead of AmazonLinux2 for Kubernetes version >=1.33 (#8405)
When a nodegroup would be created with the AMI family AmazonLinux2 for a cluster that is version 1.33 or beyond, use AmazonLinux2023 instead. If a user specifically attempts to create a nodegroup on Kubernetes 1.33 with AL2, throw an error letting them know it's not supported.
1 parent 410b8b8 commit 8db9492

21 files changed

+492
-68
lines changed

go.mod

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,16 @@ require (
1111
github.com/aws/aws-sdk-go-v2 v1.36.3
1212
github.com/aws/aws-sdk-go-v2/config v1.29.14
1313
github.com/aws/aws-sdk-go-v2/credentials v1.17.67
14-
github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.4
14+
github.com/aws/aws-sdk-go-v2/service/autoscaling v1.53.0
1515
github.com/aws/aws-sdk-go-v2/service/cloudformation v1.59.2
16-
github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.48.4
17-
github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.48.0
16+
github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.49.0
17+
github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.50.0
1818
github.com/aws/aws-sdk-go-v2/service/cognitoidentityprovider v1.51.3
1919
github.com/aws/aws-sdk-go-v2/service/ec2 v1.210.1
20-
github.com/aws/aws-sdk-go-v2/service/eks v1.64.0
20+
github.com/aws/aws-sdk-go-v2/service/eks v1.65.0
2121
github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.29.3
2222
github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.45.2
23-
github.com/aws/aws-sdk-go-v2/service/iam v1.41.1
23+
github.com/aws/aws-sdk-go-v2/service/iam v1.42.0
2424
github.com/aws/aws-sdk-go-v2/service/kms v1.38.1
2525
github.com/aws/aws-sdk-go-v2/service/outposts v1.50.1
2626
github.com/aws/aws-sdk-go-v2/service/ssm v1.59.0

go.sum

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -124,28 +124,28 @@ github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 h1:bIqFDwgGXXN1Kpp99pDOdKMTTb5d
124124
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3/go.mod h1:H5O/EsxDWyU+LP/V8i5sm8cxoZgc2fdNR9bxlOFrQTo=
125125
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.33 h1:/frG8aV09yhCVSOEC2pzktflJJO48NwY3xntHBwxHiA=
126126
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.33/go.mod h1:8vwASlAcV366M+qxZnjNzCjeastk1Rt1bpSRaGZanGU=
127-
github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.4 h1:vzLD0FyNU4uxf2QE5UDG0jSEitiJXbVEUwf2Sk3usF4=
128-
github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.4/go.mod h1:CDqMoc3KRdZJ8qziW96J35lKH01Wq3B2aihtHj2JbRs=
127+
github.com/aws/aws-sdk-go-v2/service/autoscaling v1.53.0 h1:uYhWKm7FhOKF5chyd2QSVXWqchI+ikht+aIkDJUIg9U=
128+
github.com/aws/aws-sdk-go-v2/service/autoscaling v1.53.0/go.mod h1:CDqMoc3KRdZJ8qziW96J35lKH01Wq3B2aihtHj2JbRs=
129129
github.com/aws/aws-sdk-go-v2/service/cloudformation v1.59.2 h1:o9cuZdZlI9VWMqsNa2mnf2IRsFAROHnaYA1BW3lHGuY=
130130
github.com/aws/aws-sdk-go-v2/service/cloudformation v1.59.2/go.mod h1:penaZKzGmqHGZId4EUCBIW/f9l4Y7hQ5NKd45yoCYuI=
131-
github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.48.4 h1:pQpinmWv9jEisDR6/DccOf2cXdAf/CAwQ39nfJfJDlE=
132-
github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.48.4/go.mod h1:/BibEr5ksr34abqBTQN213GrNG6GCKCB6WG7CH4zH2w=
133-
github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.48.0 h1:1l8iJwFqWKyRMMT7gSIhp0f7FRL2M9BMBaeGIv5dWp8=
134-
github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.48.0/go.mod h1:uo14VBn5cNk/BPGTPz3kyLBxgpgOObgO8lmz+H7Z4Ck=
131+
github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.49.0 h1:RaAAMoGAns9TPioFYyvZBvMnNjw4fZCoAlud3MEWHv8=
132+
github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.49.0/go.mod h1:/BibEr5ksr34abqBTQN213GrNG6GCKCB6WG7CH4zH2w=
133+
github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.50.0 h1:t/xT0VNZUj9oQmzQjq7qoQYlX9Mz6a37O3PG0STymFM=
134+
github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.50.0/go.mod h1:uo14VBn5cNk/BPGTPz3kyLBxgpgOObgO8lmz+H7Z4Ck=
135135
github.com/aws/aws-sdk-go-v2/service/cognitoidentityprovider v1.51.3 h1:4U9dpQZTvJ0Mi1qn8L1hRJ4igFCQYEjwUuOmYkWM5tE=
136136
github.com/aws/aws-sdk-go-v2/service/cognitoidentityprovider v1.51.3/go.mod h1:ygltZT++6Wn2uG4+tqE0NW1MkdEtb5W2O/CFc0xJX/g=
137137
github.com/aws/aws-sdk-go-v2/service/ec2 v1.210.1 h1:+4A9SDduLZFlDeXWRmfQ6r8kyEJZQfK6lcg+KwdvWrI=
138138
github.com/aws/aws-sdk-go-v2/service/ec2 v1.210.1/go.mod h1:ouvGEfHbLaIlWwpDpOVWPWR+YwO0HDv3vm5tYLq8ImY=
139-
github.com/aws/aws-sdk-go-v2/service/eks v1.64.0 h1:EYeOThTRysemFtC6J6h6b7dNg3jN03QuO5cg92ojIQE=
140-
github.com/aws/aws-sdk-go-v2/service/eks v1.64.0/go.mod h1:v1xXy6ea0PHtWkjFUvAUh6B/5wv7UF909Nru0dOIJDk=
139+
github.com/aws/aws-sdk-go-v2/service/eks v1.65.0 h1:6sbu1/Us6jfguajqZGCSZXPylbs68RSfLWjjUPRAvOI=
140+
github.com/aws/aws-sdk-go-v2/service/eks v1.65.0/go.mod h1:v1xXy6ea0PHtWkjFUvAUh6B/5wv7UF909Nru0dOIJDk=
141141
github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.29.3 h1:DpyV8LeDf0y7iDaGZ3h1Y+Nh5IaBOR+xj44vVgEEegY=
142142
github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.29.3/go.mod h1:H232HdqVlSUoqy0cMJYW1TKjcxvGFGFZ20xQG8fOAPw=
143143
github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.45.2 h1:vX70Z4lNSr7XsioU0uJq5yvxgI50sB66MvD+V/3buS4=
144144
github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.45.2/go.mod h1:xnCC3vFBfOKpU6PcsCKL2ktgBTZfOwTGxj6V8/X3IS4=
145145
github.com/aws/aws-sdk-go-v2/service/eventbridge v1.36.12 h1:uH6GOnGSvVN9MCk6o3+HvZFpdqL7AzJKNOTM/6l+3/s=
146146
github.com/aws/aws-sdk-go-v2/service/eventbridge v1.36.12/go.mod h1:6qtp53AQg7KEeYrsp430PNlmVVO9qK0Xw8nddE1y+ow=
147-
github.com/aws/aws-sdk-go-v2/service/iam v1.41.1 h1:Kq3R+K49y23CGC5UQF3Vpw5oZEQk5gF/nn+MekPD0ZY=
148-
github.com/aws/aws-sdk-go-v2/service/iam v1.41.1/go.mod h1:mPJkGQzeCoPs82ElNILor2JzZgYENr4UaSKUT8K27+c=
147+
github.com/aws/aws-sdk-go-v2/service/iam v1.42.0 h1:G6+UzGvubaet9QOh0664E9JeT+b6Zvop3AChozRqkrA=
148+
github.com/aws/aws-sdk-go-v2/service/iam v1.42.0/go.mod h1:mPJkGQzeCoPs82ElNILor2JzZgYENr4UaSKUT8K27+c=
149149
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 h1:eAh2A4b5IzM/lum78bZ590jy36+d/aFLgKF/4Vd1xPE=
150150
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3/go.mod h1:0yKJC/kb8sAnmlYa6Zs3QVYqaC8ug2AbnNChv5Ox3uA=
151151
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.6.1 h1:7SuukGpyIgF5EiAbf1dZRxP+xSnY1WjiHBjL08fjJeE=

pkg/apis/eksctl.io/v1alpha5/defaults.go

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,9 +121,22 @@ func vpcCNIAddonSpecified(cfg *ClusterConfig) bool {
121121
}
122122

123123
// SetNodeGroupDefaults will set defaults for a given nodegroup
124-
func SetNodeGroupDefaults(ng *NodeGroup, meta *ClusterMeta, controlPlaneOnOutposts bool) {
124+
func SetNodeGroupDefaults(ng *NodeGroup, meta *ClusterMeta, controlPlaneOnOutposts bool) error {
125125
setNodeGroupBaseDefaults(ng.NodeGroupBase, meta)
126126

127+
// Set default AMI family depending on Kubernetes version
128+
isAL2EOLVersion, _ := utils.IsMinVersion(AmazonLinux2EOLVersion, meta.Version)
129+
if isAL2EOLVersion {
130+
// For newer Kubernetes versions, default to AL2023
131+
if ng.AMIFamily == "" {
132+
ng.AMIFamily = NodeImageFamilyAmazonLinux2023
133+
}
134+
// Since AL2 isn't supported, throw an error if the user explicitly requested AL2
135+
if ng.AMIFamily == NodeImageFamilyAmazonLinux2 {
136+
return fmt.Errorf("AmazonLinux2 is not supported for Kubernetes version %s", meta.Version)
137+
}
138+
}
139+
// Default to AL2 for Kubernetes versions prior to AmazonLinux2EOLVersion
127140
if ng.AMIFamily == "" {
128141
ng.AMIFamily = DefaultNodeImageFamily
129142
}
@@ -139,15 +152,27 @@ func SetNodeGroupDefaults(ng *NodeGroup, meta *ClusterMeta, controlPlaneOnOutpos
139152
}
140153

141154
setContainerRuntimeDefault(ng, meta.Version)
155+
return nil
142156
}
143157

144158
// SetManagedNodeGroupDefaults sets default values for a ManagedNodeGroup
145-
func SetManagedNodeGroupDefaults(ng *ManagedNodeGroup, meta *ClusterMeta, controlPlaneOnOutposts bool) {
159+
func SetManagedNodeGroupDefaults(ng *ManagedNodeGroup, meta *ClusterMeta, controlPlaneOnOutposts bool) error {
146160
setNodeGroupBaseDefaults(ng.NodeGroupBase, meta)
147161

148162
// When using custom AMIs, we want the user to explicitly specify AMI family.
149163
// Thus, we only set up default AMI family when no custom AMI is being used.
150-
if ng.AMIFamily == "" && ng.AMI == "" {
164+
isAL2EOLVersion, _ := utils.IsMinVersion(AmazonLinux2EOLVersion, meta.Version)
165+
if ng.AMI == "" && isAL2EOLVersion {
166+
// Set default AMI family depending on Kubernetes version
167+
// For newer Kubernetes versions, default to AL2023
168+
if ng.AMIFamily == "" {
169+
ng.AMIFamily = NodeImageFamilyAmazonLinux2023
170+
}
171+
// Since AL2 isn't supported for this K8s version, throw an error if the user explicitly requested AL2
172+
if ng.AMIFamily == NodeImageFamilyAmazonLinux2 {
173+
return fmt.Errorf("AmazonLinux2 is not supported for Kubernetes version %s", meta.Version)
174+
}
175+
} else if ng.AMI == "" && ng.AMIFamily == "" {
151176
// AL2023 is the default ami type on EKS managed nodegroups after 1.30.
152177
if isMinVer, _ := utils.IsMinVersion(Version1_30, meta.Version); isMinVer {
153178
ng.AMIFamily = NodeImageFamilyAmazonLinux2023
@@ -164,6 +189,8 @@ func SetManagedNodeGroupDefaults(ng *ManagedNodeGroup, meta *ClusterMeta, contro
164189

165190
setVolumeDefaults(ng.NodeGroupBase, controlPlaneOnOutposts, ng.LaunchTemplate)
166191
setDefaultsForAdditionalVolumes(ng.NodeGroupBase, controlPlaneOnOutposts)
192+
193+
return nil
167194
}
168195

169196
func setNodeGroupBaseDefaults(ng *NodeGroupBase, meta *ClusterMeta) {

0 commit comments

Comments
 (0)