Skip to content
GitHubXDiscord

Nodegroup

The Nodegroup resource lets you manage AWS EKS Nodegroups for your Kubernetes cluster, enabling you to configure the EC2 instances that run your containerized applications.

Create a basic Nodegroup with required properties and a few common optional settings.

import AWS from "alchemy/aws/control";
const basicNodegroup = await AWS.EKS.Nodegroup("basicNodegroup", {
clusterName: "myEKSCluster",
nodeRole: "arn:aws:iam::123456789012:role/myEKSNodeRole",
subnets: ["10.0.0.0/24", "10.0.1.0/24"],
scalingConfig: {
desiredSize: 2,
minSize: 1,
maxSize: 3
},
labels: {
environment: "production"
}
});

Configure a Nodegroup with advanced settings like launch templates, remote access, and disk size.

const advancedNodegroup = await AWS.EKS.Nodegroup("advancedNodegroup", {
clusterName: "myEKSCluster",
nodeRole: "arn:aws:iam::123456789012:role/myEKSNodeRole",
subnets: ["10.0.0.0/24", "10.0.1.0/24"],
launchTemplate: {
id: "lt-12345678",
version: "$Latest"
},
remoteAccess: {
ec2SshKey: "my-key-pair",
sourceSecurityGroups: ["sg-12345678"]
},
diskSize: 20,
scalingConfig: {
desiredSize: 3,
minSize: 2,
maxSize: 5
}
});

This example demonstrates creating a Nodegroup with a specific IAM role and custom labels for better organization.

const customNodegroup = await AWS.EKS.Nodegroup("customNodegroup", {
clusterName: "myEKSCluster",
nodeRole: "arn:aws:iam::123456789012:role/customNodeRole",
subnets: ["10.0.0.0/24", "10.0.1.0/24"],
labels: {
app: "myApp",
tier: "frontend"
},
instanceTypes: ["t3.medium", "t3.large"],
scalingConfig: {
desiredSize: 2,
minSize: 1,
maxSize: 4
}
});

Configure a Nodegroup that uses taints to control pod scheduling on specific nodes.

const taintedNodegroup = await AWS.EKS.Nodegroup("taintedNodegroup", {
clusterName: "myEKSCluster",
nodeRole: "arn:aws:iam::123456789012:role/myEKSNodeRole",
subnets: ["10.0.0.0/24", "10.0.1.0/24"],
taints: [
{
key: "dedicated",
value: "gpu",
effect: "NO_SCHEDULE"
}
],
scalingConfig: {
desiredSize: 3,
minSize: 2,
maxSize: 6
}
});