1- import { KubectlV29Layer } from "@aws-cdk/lambda-layer-kubectl-v29 " ;
1+ import { KubectlV31Layer as KubectlLayer } from "@aws-cdk/lambda-layer-kubectl-v31 " ;
22import * as cdk from "aws-cdk-lib" ;
33import * as ec2 from "aws-cdk-lib/aws-ec2" ;
44import * as eks from "aws-cdk-lib/aws-eks" ;
55import * as iam from "aws-cdk-lib/aws-iam" ;
66
7+ const kubernetesVersion = eks . KubernetesVersion . V1_31 ;
8+
9+ const clusterLogging = [
10+ // eks.ClusterLoggingTypes.API,
11+ // eks.ClusterLoggingTypes.AUTHENTICATOR,
12+ // eks.ClusterLoggingTypes.SCHEDULER,
13+ eks . ClusterLoggingTypes . AUDIT ,
14+ // eks.ClusterLoggingTypes.CONTROLLER_MANAGER,
15+ ] ;
16+
17+ const instanceTypes = [
18+ new ec2 . InstanceType ( "m5.large" ) ,
19+ new ec2 . InstanceType ( "m5a.large" ) ,
20+ ] ;
21+
722class EKSCluster extends cdk . Stack {
823 constructor ( scope : cdk . App , id : string , props ?: cdk . StackProps ) {
924 super ( scope , id , props ) ;
@@ -15,59 +30,52 @@ class EKSCluster extends cdk.Stack {
1530 const eksCluster = new eks . Cluster ( this , "EKSCluster" , {
1631 vpc : vpc ,
1732 defaultCapacity : 0 ,
18- version : eks . KubernetesVersion . V1_29 ,
19- kubectlLayer : new KubectlV29Layer ( this , "kubectl" ) ,
33+ version : kubernetesVersion ,
34+ kubectlLayer : new KubectlLayer ( this , "kubectl" ) ,
2035 ipFamily : eks . IpFamily . IP_V4 ,
21- clusterLogging : [
22- // eks.ClusterLoggingTypes.API,
23- // eks.ClusterLoggingTypes.AUTHENTICATOR,
24- // eks.ClusterLoggingTypes.SCHEDULER,
25- eks . ClusterLoggingTypes . AUDIT ,
26- // eks.ClusterLoggingTypes.CONTROLLER_MANAGER,
27- ] ,
28- outputClusterName : true ,
29- outputConfigCommand : true ,
36+ clusterLogging : clusterLogging ,
3037 } ) ;
3138
39+ // HINT: required cdk v2.135.0 or higher version to support instanceTypes assignment when working with AL2023
40+ // - https://github.com/aws/aws-cdk/pull/29505
41+ // - https://github.com/aws/aws-cdk/releases/tag/v2.135.0
3242 eksCluster . addNodegroupCapacity ( "custom-node-group" , {
33- amiType : eks . NodegroupAmiType . AL2_X86_64 ,
34- instanceTypes : [ new ec2 . InstanceType ( "m5.large" ) ] ,
43+ amiType : eks . NodegroupAmiType . AL2023_X86_64_STANDARD ,
44+ instanceTypes : instanceTypes ,
3545 desiredSize : 2 ,
46+ minSize : 2 ,
47+ maxSize : 5 ,
3648 diskSize : 20 ,
3749 nodeRole : new iam . Role ( this , "eksClusterNodeGroupRole" , {
3850 roleName : "eksClusterNodeGroupRole" ,
3951 assumedBy : new iam . ServicePrincipal ( "ec2.amazonaws.com" ) ,
4052 managedPolicies : [
41- iam . ManagedPolicy . fromAwsManagedPolicyName ( "AmazonEKSWorkerNodePolicy" ) ,
42- iam . ManagedPolicy . fromAwsManagedPolicyName ( "AmazonEC2ContainerRegistryReadOnly" ) ,
43- iam . ManagedPolicy . fromAwsManagedPolicyName ( "AmazonEKS_CNI_Policy" ) ,
44- ] ,
53+ "AmazonEKSWorkerNodePolicy" ,
54+ "AmazonEC2ContainerRegistryReadOnly" ,
55+ "AmazonEKS_CNI_Policy" ,
56+ ] . map ( ( policy ) => iam . ManagedPolicy . fromAwsManagedPolicyName ( policy ) ) ,
4557 } ) ,
4658 } ) ;
4759
4860 // Fargate
49- const myProfile = new eks . FargateProfile ( this , ' myProfile' , {
61+ new eks . FargateProfile ( this , " myProfile" , {
5062 cluster : eksCluster ,
51- selectors : [ { namespace : ' default' } ] ,
63+ selectors : [ { namespace : " default" } ] ,
5264 } ) ;
5365
54- // Managed Addon: kube-proxy
55- const kubeProxy = new eks . CfnAddon ( this , "addonKubeProxy" , {
56- addonName : "kube-proxy" ,
57- clusterName : eksCluster . clusterName ,
58- } ) ;
66+ // Managed Addons
67+ const addManagedAddon = ( id : string , addonName : string ) => {
68+ new eks . CfnAddon ( this , id , {
69+ addonName,
70+ clusterName : eksCluster . clusterName ,
71+ } ) ;
72+ } ;
5973
60- // Managed Addon: coredns
61- const coreDns = new eks . CfnAddon ( this , "addonCoreDns" , {
62- addonName : "coredns" ,
63- clusterName : eksCluster . clusterName ,
64- } ) ;
65-
66- // Managed Addon: vpc-cni
67- const vpcCni = new eks . CfnAddon ( this , "addonVpcCni" , {
68- addonName : "vpc-cni" ,
69- clusterName : eksCluster . clusterName ,
70- } ) ;
74+ addManagedAddon ( "addonKubeProxy" , "kube-proxy" ) ;
75+ addManagedAddon ( "addonCoreDns" , "coredns" ) ;
76+ addManagedAddon ( "addonVpcCni" , "vpc-cni" ) ;
77+ addManagedAddon ( "addonEksPodIdentityAgent" , "eks-pod-identity-agent" ) ;
78+ addManagedAddon ( "addonMetricsServer" , "metrics-server" ) ;
7179 }
7280}
7381
0 commit comments