Skip to content

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.

Minimal Example

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

ts
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"
  }
});

Advanced Configuration

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

ts
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
  }
});

Custom Node Role and Labels

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

ts
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
  }
});

Nodegroup with Taints

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

ts
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
  }
});