aws-cdk-lib
Version:
Version 2 of the AWS Cloud Development Kit library
357 lines (356 loc) • 11.6 kB
TypeScript
import { Construct } from 'constructs';
import { ICluster } from './cluster';
import { InstanceType, ISecurityGroup, SubnetSelection } from '../../aws-ec2';
import { IRole } from '../../aws-iam';
import { IResource, Resource } from '../../core';
/**
* NodeGroup interface
*/
export interface INodegroup extends IResource {
/**
* Name of the nodegroup
* @attribute
*/
readonly nodegroupName: string;
}
/**
* The AMI type for your node group.
*
* GPU instance types should use the `AL2_x86_64_GPU` AMI type, which uses the
* Amazon EKS-optimized Linux AMI with GPU support or the `BOTTLEROCKET_ARM_64_NVIDIA` or `BOTTLEROCKET_X86_64_NVIDIA`
* AMI types, which uses the Amazon EKS-optimized Linux AMI with Nvidia-GPU support.
*
* Non-GPU instances should use the `AL2_x86_64` AMI type, which uses the Amazon EKS-optimized Linux AMI.
*/
export declare enum NodegroupAmiType {
/**
* Amazon Linux 2 (x86-64)
*/
AL2_X86_64 = "AL2_x86_64",
/**
* Amazon Linux 2 with GPU support
*/
AL2_X86_64_GPU = "AL2_x86_64_GPU",
/**
* Amazon Linux 2 (ARM-64)
*/
AL2_ARM_64 = "AL2_ARM_64",
/**
* Bottlerocket Linux (ARM-64)
*/
BOTTLEROCKET_ARM_64 = "BOTTLEROCKET_ARM_64",
/**
* Bottlerocket (x86-64)
*/
BOTTLEROCKET_X86_64 = "BOTTLEROCKET_x86_64",
/**
* Bottlerocket Linux with Nvidia-GPU support (ARM-64)
*/
BOTTLEROCKET_ARM_64_NVIDIA = "BOTTLEROCKET_ARM_64_NVIDIA",
/**
* Bottlerocket with Nvidia-GPU support (x86-64)
*/
BOTTLEROCKET_X86_64_NVIDIA = "BOTTLEROCKET_x86_64_NVIDIA",
/**
* Windows Core 2019 (x86-64)
*/
WINDOWS_CORE_2019_X86_64 = "WINDOWS_CORE_2019_x86_64",
/**
* Windows Core 2022 (x86-64)
*/
WINDOWS_CORE_2022_X86_64 = "WINDOWS_CORE_2022_x86_64",
/**
* Windows Full 2019 (x86-64)
*/
WINDOWS_FULL_2019_X86_64 = "WINDOWS_FULL_2019_x86_64",
/**
* Windows Full 2022 (x86-64)
*/
WINDOWS_FULL_2022_X86_64 = "WINDOWS_FULL_2022_x86_64",
/**
* Amazon Linux 2023 (x86-64)
*/
AL2023_X86_64_STANDARD = "AL2023_x86_64_STANDARD",
/**
* Amazon Linux 2023 (ARM-64)
*/
AL2023_ARM_64_STANDARD = "AL2023_ARM_64_STANDARD"
}
/**
* Capacity type of the managed node group
*/
export declare enum CapacityType {
/**
* spot instances
*/
SPOT = "SPOT",
/**
* on-demand instances
*/
ON_DEMAND = "ON_DEMAND"
}
/**
* The remote access (SSH) configuration to use with your node group.
*
* @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-eks-nodegroup-remoteaccess.html
*/
export interface NodegroupRemoteAccess {
/**
* The Amazon EC2 SSH key that provides access for SSH communication with the worker nodes in the managed node group.
*/
readonly sshKeyName: string;
/**
* The security groups that are allowed SSH access (port 22) to the worker nodes. If you specify an Amazon EC2 SSH
* key but do not specify a source security group when you create a managed node group, then port 22 on the worker
* nodes is opened to the internet (0.0.0.0/0).
*
* @default - port 22 on the worker nodes is opened to the internet (0.0.0.0/0)
*/
readonly sourceSecurityGroups?: ISecurityGroup[];
}
/**
* Launch template property specification
*/
export interface LaunchTemplateSpec {
/**
* The Launch template ID
*/
readonly id: string;
/**
* The launch template version to be used (optional).
*
* @default - the default version of the launch template
*/
readonly version?: string;
}
/**
* Effect types of kubernetes node taint.
*/
export declare enum TaintEffect {
/**
* NoSchedule
*/
NO_SCHEDULE = "NO_SCHEDULE",
/**
* PreferNoSchedule
*/
PREFER_NO_SCHEDULE = "PREFER_NO_SCHEDULE",
/**
* NoExecute
*/
NO_EXECUTE = "NO_EXECUTE"
}
/**
* Taint interface
*/
export interface TaintSpec {
/**
* Effect type
*
* @default - None
*/
readonly effect?: TaintEffect;
/**
* Taint key
*
* @default - None
*/
readonly key?: string;
/**
* Taint value
*
* @default - None
*/
readonly value?: string;
}
/**
* The Nodegroup Options for addNodeGroup() method
*/
export interface NodegroupOptions {
/**
* Name of the Nodegroup
*
* @default - resource ID
*/
readonly nodegroupName?: string;
/**
* The subnets to use for the Auto Scaling group that is created for your node group. By specifying the
* SubnetSelection, the selected subnets will automatically apply required tags i.e.
* `kubernetes.io/cluster/CLUSTER_NAME` with a value of `shared`, where `CLUSTER_NAME` is replaced with
* the name of your cluster.
*
* @default - private subnets
*/
readonly subnets?: SubnetSelection;
/**
* The AMI type for your node group. If you explicitly specify the launchTemplate with custom AMI, do not specify this property, or
* the node group deployment will fail. In other cases, you will need to specify correct amiType for the nodegroup.
*
* @default - auto-determined from the instanceTypes property when launchTemplateSpec property is not specified
*/
readonly amiType?: NodegroupAmiType;
/**
* The root device disk size (in GiB) for your node group instances.
*
* @default 20
*/
readonly diskSize?: number;
/**
* The current number of worker nodes that the managed node group should maintain. If not specified,
* the nodewgroup will initially create `minSize` instances.
*
* @default 2
*/
readonly desiredSize?: number;
/**
* The maximum number of worker nodes that the managed node group can scale out to. Managed node groups can support up to 100 nodes by default.
*
* @default - desiredSize
*/
readonly maxSize?: number;
/**
* The minimum number of worker nodes that the managed node group can scale in to. This number must be greater than or equal to zero.
*
* @default 1
*/
readonly minSize?: number;
/**
* Force the update if the existing node group's pods are unable to be drained due to a pod disruption budget issue.
* If an update fails because pods could not be drained, you can force the update after it fails to terminate the old
* node whether or not any pods are
* running on the node.
*
* @default true
*/
readonly forceUpdate?: boolean;
/**
* The instance types to use for your node group.
* @default t3.medium will be used according to the cloudformation document.
* @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-eks-nodegroup.html#cfn-eks-nodegroup-instancetypes
*/
readonly instanceTypes?: InstanceType[];
/**
* The Kubernetes labels to be applied to the nodes in the node group when they are created.
*
* @default - None
*/
readonly labels?: {
[name: string]: string;
};
/**
* The Kubernetes taints to be applied to the nodes in the node group when they are created.
*
* @default - None
*/
readonly taints?: TaintSpec[];
/**
* The IAM role to associate with your node group. The Amazon EKS worker node kubelet daemon
* makes calls to AWS APIs on your behalf. Worker nodes receive permissions for these API calls through
* an IAM instance profile and associated policies. Before you can launch worker nodes and register them
* into a cluster, you must create an IAM role for those worker nodes to use when they are launched.
*
* @default - None. Auto-generated if not specified.
*/
readonly nodeRole?: IRole;
/**
* The AMI version of the Amazon EKS-optimized AMI to use with your node group (for example, `1.14.7-YYYYMMDD`).
*
* @default - The latest available AMI version for the node group's current Kubernetes version is used.
*/
readonly releaseVersion?: string;
/**
* The remote access (SSH) configuration to use with your node group. Disabled by default, however, if you
* specify an Amazon EC2 SSH key but do not specify a source security group when you create a managed node group,
* then port 22 on the worker nodes is opened to the internet (0.0.0.0/0)
*
* @default - disabled
*/
readonly remoteAccess?: NodegroupRemoteAccess;
/**
* The metadata to apply to the node group to assist with categorization and organization. Each tag consists of
* a key and an optional value, both of which you define. Node group tags do not propagate to any other resources
* associated with the node group, such as the Amazon EC2 instances or subnets.
*
* @default - None
*/
readonly tags?: {
[name: string]: string;
};
/**
* Launch template specification used for the nodegroup
* @see https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html
* @default - no launch template
*/
readonly launchTemplateSpec?: LaunchTemplateSpec;
/**
* The capacity type of the nodegroup.
*
* @default - ON_DEMAND
*/
readonly capacityType?: CapacityType;
/**
* The maximum number of nodes unavailable at once during a version update.
* Nodes will be updated in parallel. The maximum number is 100.
*
* This value or `maxUnavailablePercentage` is required to have a value for custom update configurations to be applied.
*
* @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-eks-nodegroup-updateconfig.html#cfn-eks-nodegroup-updateconfig-maxunavailable
* @default 1
*/
readonly maxUnavailable?: number;
/**
* The maximum percentage of nodes unavailable during a version update.
* This percentage of nodes will be updated in parallel, up to 100 nodes at once.
*
* This value or `maxUnavailable` is required to have a value for custom update configurations to be applied.
*
* @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-eks-nodegroup-updateconfig.html#cfn-eks-nodegroup-updateconfig-maxunavailablepercentage
* @default undefined - node groups will update instances one at a time
*/
readonly maxUnavailablePercentage?: number;
}
/**
* NodeGroup properties interface
*/
export interface NodegroupProps extends NodegroupOptions {
/**
* Cluster resource
*/
readonly cluster: ICluster;
}
/**
* The Nodegroup resource class
*/
export declare class Nodegroup extends Resource implements INodegroup {
/**
* Import the Nodegroup from attributes
*/
static fromNodegroupName(scope: Construct, id: string, nodegroupName: string): INodegroup;
/**
* ARN of the nodegroup
*
* @attribute
*/
readonly nodegroupArn: string;
/**
* Nodegroup name
*
* @attribute
*/
readonly nodegroupName: string;
/**
* the Amazon EKS cluster resource
*
* @attribute ClusterName
*/
readonly cluster: ICluster;
/**
* IAM role of the instance profile for the nodegroup
*/
readonly role: IRole;
private readonly desiredSize;
private readonly maxSize;
private readonly minSize;
constructor(scope: Construct, id: string, props: NodegroupProps);
private validateUpdateConfig;
}