Amazon EKS — eksctl Cheat Sheet

2 minute read

eksctl is the official CLI for Amazon EKS. Here are the essential commands.


Cluster Management

# Create cluster with defaults
eksctl create cluster --name my-cluster --region us-east-1

# Create cluster with config file
eksctl create cluster -f cluster.yaml

# Get cluster info
eksctl get cluster --name my-cluster --region us-east-1

# Delete cluster
eksctl delete cluster --name my-cluster --region us-east-1

# Update kubeconfig
eksctl utils write-kubeconfig --cluster my-cluster --region us-east-1

# Upgrade cluster version
eksctl upgrade cluster --name my-cluster --version 1.31 --approve

Node Group Management

# List node groups
eksctl get nodegroup --cluster my-cluster

# Create managed node group
eksctl create nodegroup \
  --cluster my-cluster \
  --name main-nodes \
  --node-type m6i.large \
  --nodes 3 \
  --nodes-min 1 \
  --nodes-max 5 \
  --managed

# Scale node group
eksctl scale nodegroup \
  --cluster my-cluster \
  --name main-nodes \
  --nodes 5

# Delete node group
eksctl delete nodegroup \
  --cluster my-cluster \
  --name main-nodes \
  --drain

# Upgrade node group
eksctl upgrade nodegroup \
  --cluster my-cluster \
  --name main-nodes \
  --kubernetes-version 1.31

IAM & IRSA

# Create IRSA role
eksctl create iamserviceaccount \
  --cluster my-cluster \
  --namespace kube-system \
  --name aws-load-balancer-controller \
  --attach-policy-arn arn:aws:iam::123456789012:policy/AWSLoadBalancerControllerIAMPolicy \
  --approve

# List IRSA associations
eksctl get iamserviceaccount --cluster my-cluster

# Delete IRSA
eksctl delete iamserviceaccount \
  --cluster my-cluster \
  --namespace kube-system \
  --name aws-load-balancer-controller

IAM Identity Mapping (aws-auth)

# Map IAM role to Kubernetes group
eksctl create iamidentitymapping \
  --cluster my-cluster \
  --arn arn:aws:iam::123456789012:role/DevTeamRole \
  --group developers \
  --username dev-

# List identity mappings
eksctl get iamidentitymapping --cluster my-cluster

# Delete mapping
eksctl delete iamidentitymapping \
  --cluster my-cluster \
  --arn arn:aws:iam::123456789012:role/DevTeamRole

Add-ons

# Create add-on
eksctl create addon --cluster my-cluster --name vpc-cni

# List add-ons
eksctl get addons --cluster my-cluster

# Update add-on
eksctl update addon --cluster my-cluster --name vpc-cni

# Delete add-on
eksctl delete addon --cluster my-cluster --name vpc-cni

Fargate

# Create Fargate profile
eksctl create fargateprofile \
  --cluster my-cluster \
  --name fp-default \
  --namespace production

# List Fargate profiles
eksctl get fargateprofile --cluster my-cluster

# Delete Fargate profile
eksctl delete fargateprofile \
  --cluster my-cluster \
  --name fp-default

Enable Features

# Enable CloudWatch logging
eksctl utils update-cluster-logging \
  --cluster my-cluster \
  --enable-types api,audit,authenticator,controllerManager,scheduler \
  --approve

# Enable OIDC provider
eksctl utils associate-iam-oidc-provider \
  --cluster my-cluster \
  --approve

# Enable secrets encryption
eksctl utils enable-secrets-encryption \
  --cluster my-cluster \
  --key-arn arn:aws:kms:us-east-1:123456789012:key/abc123 \
  --approve

Config File Example

# cluster.yaml
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: my-cluster
  region: us-east-1
  version: "1.31"

vpc:
  cidr: 10.0.0.0/16
  nat:
    gateway: HighlyAvailable

managedNodeGroups:
  - name: main
    instanceType: m6i.large
    desiredCapacity: 3
    minSize: 1
    maxSize: 5
    volumeSize: 100
    iam:
      withAddonPolicies:
        albIngress: true
        ebs: true
        cloudWatch: true

addons:
  - name: vpc-cni
  - name: coredns
  - name: kube-proxy
  - name: aws-ebs-csi-driver

cloudWatch:
  clusterLogging:
    enableTypes: ["api", "audit", "authenticator", "controllerManager", "scheduler"]

Updated: