diff --git a/lib/common/windows-builder.ts b/lib/common/windows-builder.ts deleted file mode 100644 index cf3a9697..00000000 --- a/lib/common/windows-builder.ts +++ /dev/null @@ -1,124 +0,0 @@ -import * as blueprints from '@aws-quickstart/eks-blueprints'; -import * as utils from '@aws-quickstart/eks-blueprints/dist/utils'; -import { NestedStack, NestedStackProps } from 'aws-cdk-lib'; -import { Construct } from 'constructs'; -import * as eks from "aws-cdk-lib/aws-eks"; -import * as ec2 from "aws-cdk-lib/aws-ec2"; -import * as iam from 'aws-cdk-lib/aws-iam'; -import { NodegroupAmiType } from 'aws-cdk-lib/aws-eks'; - - -export interface WindowsOptions { - kubernetesVersion: eks.KubernetesVersion, - instanceClass: ec2.InstanceClass, - instanceSize: ec2.InstanceSize, - desiredNodeSize: number, - minNodeSize: number, - maxNodeSize: number, - blockDeviceSize: number, - noScheduleForWindowsNodes: boolean, - clusterProviderTags: { - [key: string]: string; - }, - genericNodeGroupOptions: blueprints.ManagedNodeGroup - windowsNodeGroupOptions: blueprints.ManagedNodeGroup -} - -export class WindowsBuilder extends blueprints.BlueprintBuilder { - - public static builder(options: WindowsOptions): WindowsBuilder { - const builder = new WindowsBuilder(); - - builder - .clusterProvider( - new blueprints.GenericClusterProvider({ - version: options.kubernetesVersion, - tags: options.clusterProviderTags, - role: blueprints.getResource(context => { - return new iam.Role(context.scope, 'ClusterRole', { - assumedBy: new iam.ServicePrincipal("eks.amazonaws.com"), - managedPolicies: [ - iam.ManagedPolicy.fromAwsManagedPolicyName("AmazonEKSClusterPolicy"), - iam.ManagedPolicy.fromAwsManagedPolicyName("AmazonEKSVPCResourceController") - ] - }); - }), - managedNodeGroups: [ - addGenericNodeGroup(options, options.genericNodeGroupOptions), - addWindowsNodeGroup(options), - ] - }) - ) - .addOns( - new blueprints.NestedStackAddOn({ - id: "usage-tracking-addon", - builder: UsageTrackingAddOn.builder(), - }) - ); - return builder; - } -} - -/** - * Nested stack that is used as tracker for Windows Accelerator - */ -export class UsageTrackingAddOn extends NestedStack { - - static readonly USAGE_ID = "qs-1ubotj5kl"; - - public static builder(): blueprints.NestedStackBuilder { - return { - build(scope: Construct, id: string, props: NestedStackProps) { - return new UsageTrackingAddOn(scope, id, props); - } - }; - } - - constructor(scope: Construct, id: string, props: NestedStackProps) { - super(scope, id, utils.withUsageTracking(UsageTrackingAddOn.USAGE_ID, props)); - } -} - -function getInstanceType(options: WindowsOptions, nodegroup: blueprints.ManagedNodeGroup): ec2.InstanceType[] { - - if ( nodegroup.instanceTypes ) { return nodegroup.instanceTypes; } - - if ( options.instanceClass && options.instanceSize ) - return [ new ec2.InstanceType(`${options.instanceClass}.${options.instanceSize}`) ]; - - return [ new ec2.InstanceType('m5.4xlarge')]; -} - -function addGenericNodeGroup(options: WindowsOptions, overrideOptions: blueprints.ManagedNodeGroup): blueprints.ManagedNodeGroup { - - return { - id: overrideOptions.id, - amiType: overrideOptions.amiType ?? NodegroupAmiType.AL2_X86_64, - instanceTypes: getInstanceType(options, overrideOptions), - desiredSize: overrideOptions.desiredSize ?? options.desiredNodeSize, - minSize: overrideOptions.minSize ?? options.minNodeSize, - maxSize: overrideOptions.maxSize ?? options.maxNodeSize, - nodeRole: overrideOptions.nodeRole ?? blueprints.getNamedResource("node-role") as iam.Role, - nodeGroupSubnets: { subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS }, - tags: overrideOptions.tags, - launchTemplate: overrideOptions.launchTemplate - }; -} - -function addWindowsNodeGroup(options: WindowsOptions): blueprints.ManagedNodeGroup { - - if (options.windowsNodeGroupOptions.amiType == null) { options.windowsNodeGroupOptions.amiType = NodegroupAmiType.WINDOWS_CORE_2022_X86_64; } - const result = addGenericNodeGroup(options, options.windowsNodeGroupOptions); - - if(options.noScheduleForWindowsNodes) { - blueprints.utils.setPath(result, "taints", [ - { - key: "os", - value: "windows", - effect: eks.TaintEffect.NO_SCHEDULE - } - ]); - } - - return result; -} diff --git a/lib/windows-construct/index.ts b/lib/windows-construct/index.ts index 6a93f70d..99f12004 100644 --- a/lib/windows-construct/index.ts +++ b/lib/windows-construct/index.ts @@ -3,7 +3,7 @@ import * as ec2 from "aws-cdk-lib/aws-ec2"; import * as eks from "aws-cdk-lib/aws-eks"; import * as iam from "aws-cdk-lib/aws-iam"; import { Construct } from "constructs"; -import { WindowsBuilder, WindowsOptions } from '../common/windows-builder'; +import { WindowsBuilder, WindowsOptions } from "@aws-quickstart/eks-blueprints"; import { WindowsVpcCni } from "./vpc-cni"; export default class WindowsConstruct { @@ -24,7 +24,7 @@ export default class WindowsConstruct { kubernetesVersion: eks.KubernetesVersion.of("1.27"), instanceClass: ec2.InstanceClass.T3, instanceSize: ec2.InstanceSize.MEDIUM, - desiredNodeSize: 1, + desiredNodeCount: 1, minNodeSize: 1, maxNodeSize: 3, blockDeviceSize: 50, @@ -34,16 +34,13 @@ export default class WindowsConstruct { "Type": "generic-windows-cluster" }, genericNodeGroupOptions: { - id: "Mng-linux", + nodegroupName: "Mng-linux", tags: { "kubernetes.io/cluster/windows-eks-blueprint": "owned" }, - launchTemplate: { - requireImdsv2 : false - } }, windowsNodeGroupOptions: { - id: "Mng-windows", + nodegroupName: "Mng-windows", tags: { "kubernetes.io/cluster/windows-eks-blueprint": "owned" } @@ -51,7 +48,7 @@ export default class WindowsConstruct { }; const karpenterAddon = new blueprints.addons.KarpenterAddOn({ - version: "v0.30.0", + version: "v0.31.3", requirements: [ { key: 'kubernetes.io/os', op: 'In', vals: ['windows']}, ],