Deploy self-managed Ubuntu nodes¶
Amazon Web Services provides documentation for launching self-managed node groups. Canonical publishes Ubuntu LTS and Ubuntu Pro LTS EKS images based on Ubuntu Minimal, containing the necessary components to launch Ubuntu EKS worker nodes.
This guide details the process of deploying self-managed node groups using the
eksctl command-line tool.
Requirements:
AWSCLI installed and configured
eksctl (make sure to keep it updated to support latest EKS and Ubuntu versions)
Launching node groups from the command line¶
Eksctl supports Ubuntu nodes natively. To specify Ubuntu nodes, in the
eksctl create nodegroup command, supply the --node-ami-family argument
with one of the following supported Node AMI families:
|
Ubuntu release |
Supported EKS versions |
|---|---|---|
|
22.04 Jammy Jellyfish |
1.29 – 1.32 |
|
22.04 Jammy Jellyfish (Pro) |
1.29 – 1.34 |
|
24.04 Noble Numbat |
> 1.31 |
|
24.04 Noble Numbat (Pro) |
> 1.31 |
|
26.04 Resolute Raccoon |
> 1.36 (eksctl > v0.226.0) |
|
26.04 Resolute Raccoon (Pro) |
> 1.36 (eksctl > v0.226.0) |
Note
If you prefer to use managed node groups, refer to this guide. In that scenario, the AMI is defined via a launch template, and EKS automatically handles the node recycling strategy.
Therefore, launching a new node group with the Ubuntu 24.04 LTS AMI would be:
eksctl create nodegroup \
--cluster my-ubuntu-cluster \
--name 2404-nodes \
--node-type t3.medium \
--nodes 3 \
--nodes-min 1 \
--nodes-max 4 \
--ssh-access \
--ssh-public-key my-key \
--node-ami-family ubuntu2404
To use Ubuntu Pro, which enables Kernel Livepatch on the nodes and allows the cluster to run Ubuntu Pro containers, use the following command:
eksctl create nodegroup \
--cluster my-ubuntu-cluster \
--name 2404-pro-nodes \
--node-type t3.medium \
--nodes 3 \
--nodes-min 1 \
--nodes-max 4 \
--ssh-access \
--ssh-public-key my-key \
--node-ami-family ubuntupro2404
Launching node groups from a YAML configuration file¶
If you need to change default configurations or track configuration changes as code, you can start the new node group from a cluster configuration YAML file:
---
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: my-ubuntu-cluster
region: us-east-1
nodeGroups:
- name: 2404-pro-nodes
amiFamily: UbuntuPro2404
instanceType: t3.medium
desiredCapacity: 3
minSize: 1
maxSize: 4
ssh:
allow: true
publicKeyName: my-key
Save this file, say nodegroup.yaml and launch it with:
eksctl create nodegroup -f nodegroup.yaml
Validation¶
If you have kubectl installed and configured, run kubectl get nodes -o wide
to get extended information about your clusters:
kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
ip-192-168-23-188.ec2.internal Ready <none> 3h3m v1.36.2 192.168.23.188 100.62.88.240 Ubuntu 26.04 LTS 7.0.0-1010-aws (amd64) containerd://2.2.2
ip-192-168-58-220.ec2.internal Ready <none> 3h2m v1.36.2 192.168.58.220 100.55.160.174 Ubuntu 26.04 LTS 7.0.0-1010-aws (amd64) containerd://2.2.2
If your kubectl configuration is missing or incorrect for managing your
cluster, you can regenerate it using the AWS CLI:
aws eks update-kubeconfig --region us-east-1 --name my-ubuntu-cluster