From e8f5027a5f80bd51e9ddf164c358ac7c57a0731c Mon Sep 17 00:00:00 2001 From: robertd Date: Thu, 31 Mar 2022 08:10:30 -0600 Subject: [PATCH 1/5] feat(eks): add k8s v1.22 --- packages/@aws-cdk/aws-eks/lib/cluster.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/@aws-cdk/aws-eks/lib/cluster.ts b/packages/@aws-cdk/aws-eks/lib/cluster.ts index b73616179b9bd..8731d21ef5468 100644 --- a/packages/@aws-cdk/aws-eks/lib/cluster.ts +++ b/packages/@aws-cdk/aws-eks/lib/cluster.ts @@ -814,6 +814,11 @@ export class KubernetesVersion { */ public static readonly V1_21 = KubernetesVersion.of('1.21'); + /** + * Kubernetes version 1.22 + */ + public static readonly V1_22 = KubernetesVersion.of('1.22'); + /** * Custom cluster version * @param version custom version number From d16f5268d9eebd47b09342b436001d2c1f2e0c37 Mon Sep 17 00:00:00 2001 From: robertd Date: Mon, 4 Apr 2022 22:11:26 -0600 Subject: [PATCH 2/5] deprecate 1.18 --- packages/@aws-cdk/aws-eks/lib/cluster.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/@aws-cdk/aws-eks/lib/cluster.ts b/packages/@aws-cdk/aws-eks/lib/cluster.ts index 8731d21ef5468..8e7da5b18430a 100644 --- a/packages/@aws-cdk/aws-eks/lib/cluster.ts +++ b/packages/@aws-cdk/aws-eks/lib/cluster.ts @@ -796,6 +796,7 @@ export class KubernetesVersion { /** * Kubernetes version 1.18 + * @deprecated Use newer version of EKS */ public static readonly V1_18 = KubernetesVersion.of('1.18'); From bf3f4a8791cf61d57df5ffba0d8716b7ee32f3cd Mon Sep 17 00:00:00 2001 From: robertd Date: Mon, 4 Apr 2022 22:14:58 -0600 Subject: [PATCH 3/5] update readme --- packages/@aws-cdk/aws-eks/README.md | 38 ++++++++++++++--------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/packages/@aws-cdk/aws-eks/README.md b/packages/@aws-cdk/aws-eks/README.md index ad531945ba3c1..6701246c9b892 100644 --- a/packages/@aws-cdk/aws-eks/README.md +++ b/packages/@aws-cdk/aws-eks/README.md @@ -50,7 +50,7 @@ This example defines an Amazon EKS cluster with the following configuration: ```ts // provisiong a cluster const cluster = new eks.Cluster(this, 'hello-eks', { - version: eks.KubernetesVersion.V1_21, + version: eks.KubernetesVersion.V1_22, }); // apply a kubernetes manifest to the cluster @@ -143,7 +143,7 @@ Creating a new cluster is done using the `Cluster` or `FargateCluster` construct ```ts new eks.Cluster(this, 'HelloEKS', { - version: eks.KubernetesVersion.V1_21, + version: eks.KubernetesVersion.V1_22, }); ``` @@ -151,7 +151,7 @@ You can also use `FargateCluster` to provision a cluster that uses only fargate ```ts new eks.FargateCluster(this, 'HelloEKS', { - version: eks.KubernetesVersion.V1_21, + version: eks.KubernetesVersion.V1_22, }); ``` @@ -175,7 +175,7 @@ At cluster instantiation time, you can customize the number of instances and the ```ts new eks.Cluster(this, 'HelloEKS', { - version: eks.KubernetesVersion.V1_21, + version: eks.KubernetesVersion.V1_22, defaultCapacity: 5, defaultCapacityInstance: ec2.InstanceType.of(ec2.InstanceClass.M5, ec2.InstanceSize.SMALL), }); @@ -187,7 +187,7 @@ Additional customizations are available post instantiation. To apply them, set t ```ts const cluster = new eks.Cluster(this, 'HelloEKS', { - version: eks.KubernetesVersion.V1_21, + version: eks.KubernetesVersion.V1_22, defaultCapacity: 0, }); @@ -345,7 +345,7 @@ The following code defines an Amazon EKS cluster with a default Fargate Profile ```ts const cluster = new eks.FargateCluster(this, 'MyCluster', { - version: eks.KubernetesVersion.V1_21, + version: eks.KubernetesVersion.V1_22, }); ``` @@ -422,7 +422,7 @@ You can also configure the cluster to use an auto-scaling group as the default c ```ts const cluster = new eks.Cluster(this, 'HelloEKS', { - version: eks.KubernetesVersion.V1_21, + version: eks.KubernetesVersion.V1_22, defaultCapacityType: eks.DefaultCapacityType.EC2, }); ``` @@ -515,7 +515,7 @@ You can configure the [cluster endpoint access](https://docs.aws.amazon.com/eks/ ```ts const cluster = new eks.Cluster(this, 'hello-eks', { - version: eks.KubernetesVersion.V1_21, + version: eks.KubernetesVersion.V1_22, endpointAccess: eks.EndpointAccess.PRIVATE, // No access outside of your VPC. }); ``` @@ -537,7 +537,7 @@ To deploy the controller on your EKS cluster, configure the `albController` prop ```ts new eks.Cluster(this, 'HelloEKS', { - version: eks.KubernetesVersion.V1_21, + version: eks.KubernetesVersion.V1_22, albController: { version: eks.AlbControllerVersion.V2_4_1, }, @@ -577,7 +577,7 @@ You can specify the VPC of the cluster using the `vpc` and `vpcSubnets` properti declare const vpc: ec2.Vpc; new eks.Cluster(this, 'HelloEKS', { - version: eks.KubernetesVersion.V1_21, + version: eks.KubernetesVersion.V1_22, vpc, vpcSubnets: [{ subnetType: ec2.SubnetType.PRIVATE }], }); @@ -624,7 +624,7 @@ You can configure the environment of the Cluster Handler functions by specifying ```ts declare const proxyInstanceSecurityGroup: ec2.SecurityGroup; const cluster = new eks.Cluster(this, 'hello-eks', { - version: eks.KubernetesVersion.V1_21, + version: eks.KubernetesVersion.V1_22, clusterHandlerEnvironment: { https_proxy: 'http://proxy.myproxy.com', }, @@ -662,7 +662,7 @@ You can configure the environment of this function by specifying it at cluster i ```ts const cluster = new eks.Cluster(this, 'hello-eks', { - version: eks.KubernetesVersion.V1_21, + version: eks.KubernetesVersion.V1_22, kubectlEnvironment: { 'http_proxy': 'http://proxy.myproxy.com', }, @@ -706,7 +706,7 @@ const cluster1 = new eks.Cluster(this, 'MyCluster', { kubectlLayer: layer, vpc, clusterName: 'cluster-name', - version: eks.KubernetesVersion.V1_21, + version: eks.KubernetesVersion.V1_22, }); // or @@ -724,7 +724,7 @@ By default, the kubectl provider is configured with 1024MiB of memory. You can u ```ts new eks.Cluster(this, 'MyCluster', { kubectlMemory: Size.gibibytes(4), - version: eks.KubernetesVersion.V1_21, + version: eks.KubernetesVersion.V1_22, }); // or @@ -763,7 +763,7 @@ When you create a cluster, you can specify a `mastersRole`. The `Cluster` constr ```ts declare const role: iam.Role; new eks.Cluster(this, 'HelloEKS', { - version: eks.KubernetesVersion.V1_21, + version: eks.KubernetesVersion.V1_22, mastersRole: role, }); ``` @@ -791,7 +791,7 @@ You can use the `secretsEncryptionKey` to configure which key the cluster will u const secretsKey = new kms.Key(this, 'SecretsKey'); const cluster = new eks.Cluster(this, 'MyCluster', { secretsEncryptionKey: secretsKey, - version: eks.KubernetesVersion.V1_21, + version: eks.KubernetesVersion.V1_22, }); ``` @@ -801,7 +801,7 @@ You can also use a similar configuration for running a cluster built using the F const secretsKey = new kms.Key(this, 'SecretsKey'); const cluster = new eks.FargateCluster(this, 'MyFargateCluster', { secretsEncryptionKey: secretsKey, - version: eks.KubernetesVersion.V1_21, + version: eks.KubernetesVersion.V1_22, }); ``` @@ -1076,7 +1076,7 @@ when a cluster is defined: ```ts new eks.Cluster(this, 'MyCluster', { - version: eks.KubernetesVersion.V1_21, + version: eks.KubernetesVersion.V1_22, prune: false, }); ``` @@ -1431,7 +1431,7 @@ property. For example: ```ts const cluster = new eks.Cluster(this, 'Cluster', { // ... - version: eks.KubernetesVersion.V1_21, + version: eks.KubernetesVersion.V1_22, clusterLogging: [ eks.ClusterLoggingTypes.API, eks.ClusterLoggingTypes.AUTHENTICATOR, From e8125d0274248b8206c36aa9af8efc9b6cad567f Mon Sep 17 00:00:00 2001 From: robertd Date: Mon, 4 Apr 2022 22:22:15 -0600 Subject: [PATCH 4/5] update tests --- packages/@aws-cdk/aws-eks/test/cluster.test.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/@aws-cdk/aws-eks/test/cluster.test.ts b/packages/@aws-cdk/aws-eks/test/cluster.test.ts index e2887ad82b5e4..dea935ba849bb 100644 --- a/packages/@aws-cdk/aws-eks/test/cluster.test.ts +++ b/packages/@aws-cdk/aws-eks/test/cluster.test.ts @@ -17,7 +17,7 @@ import { testFixture, testFixtureNoVpc } from './util'; /* eslint-disable max-len */ -const CLUSTER_VERSION = eks.KubernetesVersion.V1_21; +const CLUSTER_VERSION = eks.KubernetesVersion.V1_22; describe('cluster', () => { @@ -135,9 +135,9 @@ describe('cluster', () => { test('throws if selecting more than one subnet group', () => { expect(() => new eks.Cluster(stack, 'Cluster', { vpc: vpc, - vpcSubnets: [{ subnetType: ec2.SubnetType.PUBLIC }, { subnetType: ec2.SubnetType.PRIVATE }], + vpcSubnets: [{ subnetType: ec2.SubnetType.PUBLIC }, { subnetType: ec2.SubnetType.PRIVATE_WITH_NAT }], defaultCapacity: 0, - version: eks.KubernetesVersion.V1_21, + version: CLUSTER_VERSION, })).toThrow(/cannot select multiple subnet groups/); @@ -149,7 +149,7 @@ describe('cluster', () => { vpc: vpc, vpcSubnets: [{ subnetType: ec2.SubnetType.PUBLIC }], defaultCapacity: 0, - version: eks.KubernetesVersion.V1_21, + version: CLUSTER_VERSION, }); // THEN @@ -2789,7 +2789,7 @@ describe('cluster', () => { natGateways: 1, subnetConfiguration: [ { - subnetType: ec2.SubnetType.PRIVATE, + subnetType: ec2.SubnetType.PRIVATE_WITH_NAT, name: 'Private1', }, { @@ -2848,7 +2848,7 @@ describe('cluster', () => { for (let i = 0; i < 20; i++) { subnetConfiguration.push({ - subnetType: ec2.SubnetType.PRIVATE, + subnetType: ec2.SubnetType.PRIVATE_WITH_NAT, name: `Private${i}`, }, ); @@ -2897,7 +2897,7 @@ describe('cluster', () => { for (let i = 0; i < 20; i++) { subnetConfiguration.push({ - subnetType: ec2.SubnetType.PRIVATE, + subnetType: ec2.SubnetType.PRIVATE_WITH_NAT, name: `Private${i}`, }, ); From fb3c8ae3ac52b867de62c5b1ff114d2db0227c45 Mon Sep 17 00:00:00 2001 From: robertd Date: Tue, 5 Apr 2022 00:23:05 -0600 Subject: [PATCH 5/5] update tests --- .../@aws-cdk/aws-eks/test/cluster.test.ts | 12 +++++----- .../test/integ.eks-cluster.expected.json | 24 +++++++++---------- .../aws-eks/test/integ.eks-cluster.ts | 4 ++-- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/packages/@aws-cdk/aws-eks/test/cluster.test.ts b/packages/@aws-cdk/aws-eks/test/cluster.test.ts index dea935ba849bb..6a26898a67eaa 100644 --- a/packages/@aws-cdk/aws-eks/test/cluster.test.ts +++ b/packages/@aws-cdk/aws-eks/test/cluster.test.ts @@ -697,7 +697,7 @@ describe('cluster', () => { Template.fromStack(stack).hasResourceProperties('Custom::AWSCDK-EKS-Cluster', { Config: { roleArn: { 'Fn::GetAtt': ['ClusterRoleFA261979', 'Arn'] }, - version: '1.21', + version: '1.22', resourcesVpcConfig: { securityGroupIds: [{ 'Fn::GetAtt': ['ClusterControlPlaneSecurityGroupD274242C', 'GroupId'] }], subnetIds: [ @@ -1657,7 +1657,7 @@ describe('cluster', () => { const { app, stack } = testFixtureNoVpc(); // WHEN - new eks.EksOptimizedImage({ kubernetesVersion: '1.21' }).getImage(stack); + new eks.EksOptimizedImage({ kubernetesVersion: '1.22' }).getImage(stack); // THEN const assembly = app.synth(); @@ -1668,7 +1668,7 @@ describe('cluster', () => { )).toEqual(true); expect(Object.entries(parameters).some( ([k, v]) => k.startsWith('SsmParameterValueawsserviceeksoptimizedami') && - (v as any).Default.includes('/1.21/'), + (v as any).Default.includes('/1.22/'), )).toEqual(true); }); @@ -1806,7 +1806,7 @@ describe('cluster', () => { const { app, stack } = testFixtureNoVpc(); // WHEN - new BottleRocketImage({ kubernetesVersion: '1.21' }).getImage(stack); + new BottleRocketImage({ kubernetesVersion: '1.22' }).getImage(stack); // THEN const assembly = app.synth(); @@ -1817,7 +1817,7 @@ describe('cluster', () => { )).toEqual(true); expect(Object.entries(parameters).some( ([k, v]) => k.startsWith('SsmParameterValueawsservicebottlerocketaws') && - (v as any).Default.includes('/aws-k8s-1.21/'), + (v as any).Default.includes('/aws-k8s-1.22/'), )).toEqual(true); }); @@ -1838,7 +1838,7 @@ describe('cluster', () => { Config: { name: 'my-cluster-name', roleArn: { 'Fn::GetAtt': ['MyClusterRoleBA20FE72', 'Arn'] }, - version: '1.21', + version: '1.22', resourcesVpcConfig: { securityGroupIds: [ { 'Fn::GetAtt': ['MyClusterControlPlaneSecurityGroup6B658F79', 'GroupId'] }, diff --git a/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.expected.json b/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.expected.json index 519b5c7ee8f03..f37e19cf79907 100644 --- a/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.expected.json +++ b/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.expected.json @@ -872,7 +872,7 @@ ] }, "Config": { - "version": "1.21", + "version": "1.22", "roleArn": { "Fn::GetAtt": [ "ClusterRoleFA261979", @@ -1593,7 +1593,7 @@ "Type": "AWS::AutoScaling::LaunchConfiguration", "Properties": { "ImageId": { - "Ref": "SsmParameterValueawsserviceeksoptimizedami121amazonlinux2recommendedimageidC96584B6F00A464EAD1953AFF4B05118Parameter" + "Ref": "SsmParameterValueawsserviceeksoptimizedami122amazonlinux2recommendedimageidC96584B6F00A464EAD1953AFF4B05118Parameter" }, "InstanceType": "t2.medium", "IamInstanceProfile": { @@ -1918,7 +1918,7 @@ "Type": "AWS::AutoScaling::LaunchConfiguration", "Properties": { "ImageId": { - "Ref": "SsmParameterValueawsserviceeksoptimizedami121amazonlinux2arm64recommendedimageidC96584B6F00A464EAD1953AFF4B05118Parameter" + "Ref": "SsmParameterValueawsserviceeksoptimizedami122amazonlinux2arm64recommendedimageidC96584B6F00A464EAD1953AFF4B05118Parameter" }, "InstanceType": "m6g.medium", "IamInstanceProfile": { @@ -2243,7 +2243,7 @@ "Type": "AWS::AutoScaling::LaunchConfiguration", "Properties": { "ImageId": { - "Ref": "SsmParameterValueawsservicebottlerocketawsk8s121x8664latestimageidC96584B6F00A464EAD1953AFF4B05118Parameter" + "Ref": "SsmParameterValueawsservicebottlerocketawsk8s122x8664latestimageidC96584B6F00A464EAD1953AFF4B05118Parameter" }, "InstanceType": "t3.small", "IamInstanceProfile": { @@ -2568,7 +2568,7 @@ "Type": "AWS::AutoScaling::LaunchConfiguration", "Properties": { "ImageId": { - "Ref": "SsmParameterValueawsserviceeksoptimizedami121amazonlinux2recommendedimageidC96584B6F00A464EAD1953AFF4B05118Parameter" + "Ref": "SsmParameterValueawsserviceeksoptimizedami122amazonlinux2recommendedimageidC96584B6F00A464EAD1953AFF4B05118Parameter" }, "InstanceType": "t3.large", "IamInstanceProfile": { @@ -3594,7 +3594,7 @@ "Properties": { "LaunchTemplateData": { "ImageId": { - "Ref": "SsmParameterValueawsserviceeksoptimizedami121amazonlinux2recommendedimageidC96584B6F00A464EAD1953AFF4B05118Parameter" + "Ref": "SsmParameterValueawsserviceeksoptimizedami122amazonlinux2recommendedimageidC96584B6F00A464EAD1953AFF4B05118Parameter" }, "InstanceType": "t3.small", "UserData": { @@ -4039,17 +4039,17 @@ "Type": "String", "Description": "Artifact hash for asset \"fedb0b025bbf74f4daee09934a81c34a6cf5b06a765baa86bf42234971244a09\"" }, - "SsmParameterValueawsserviceeksoptimizedami121amazonlinux2recommendedimageidC96584B6F00A464EAD1953AFF4B05118Parameter": { + "SsmParameterValueawsserviceeksoptimizedami122amazonlinux2recommendedimageidC96584B6F00A464EAD1953AFF4B05118Parameter": { "Type": "AWS::SSM::Parameter::Value", - "Default": "/aws/service/eks/optimized-ami/1.21/amazon-linux-2/recommended/image_id" + "Default": "/aws/service/eks/optimized-ami/1.22/amazon-linux-2/recommended/image_id" }, - "SsmParameterValueawsserviceeksoptimizedami121amazonlinux2arm64recommendedimageidC96584B6F00A464EAD1953AFF4B05118Parameter": { + "SsmParameterValueawsserviceeksoptimizedami122amazonlinux2arm64recommendedimageidC96584B6F00A464EAD1953AFF4B05118Parameter": { "Type": "AWS::SSM::Parameter::Value", - "Default": "/aws/service/eks/optimized-ami/1.21/amazon-linux-2-arm64/recommended/image_id" + "Default": "/aws/service/eks/optimized-ami/1.22/amazon-linux-2-arm64/recommended/image_id" }, - "SsmParameterValueawsservicebottlerocketawsk8s121x8664latestimageidC96584B6F00A464EAD1953AFF4B05118Parameter": { + "SsmParameterValueawsservicebottlerocketawsk8s122x8664latestimageidC96584B6F00A464EAD1953AFF4B05118Parameter": { "Type": "AWS::SSM::Parameter::Value", - "Default": "/aws/service/bottlerocket/aws-k8s-1.21/x86_64/latest/image_id" + "Default": "/aws/service/bottlerocket/aws-k8s-1.22/x86_64/latest/image_id" } } } \ No newline at end of file diff --git a/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.ts b/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.ts index 1ae9a97e5bb37..26171b8984449 100644 --- a/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.ts +++ b/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.ts @@ -36,7 +36,7 @@ class EksClusterStack extends TestStack { vpc: this.vpc, mastersRole, defaultCapacity: 2, - version: eks.KubernetesVersion.V1_21, + version: eks.KubernetesVersion.V1_22, secretsEncryptionKey, tags: { foo: 'bar', @@ -206,7 +206,7 @@ class EksClusterStack extends TestStack { const lt = new ec2.CfnLaunchTemplate(this, 'LaunchTemplate', { launchTemplateData: { imageId: new eks.EksOptimizedImage({ - kubernetesVersion: eks.KubernetesVersion.V1_21.version, + kubernetesVersion: eks.KubernetesVersion.V1_22.version, }).getImage(this).imageId, instanceType: new ec2.InstanceType('t3.small').toString(), userData: Fn.base64(userData.render()),