Amazon EKS — AWS CLI EKS Reference

2 minute read

Core aws eks commands for managing EKS clusters, node groups, add-ons, and access.


Cluster Operations

# Create cluster
aws eks create-cluster \
  --name my-cluster \
  --role-arn arn:aws:iam::123456789012:role/EKSClusterRole \
  --resources-vpc-config subnetIds=subnet-abc,subnet-def,securityGroupIds=sg-123

# Describe cluster
aws eks describe-cluster --name my-cluster

# List clusters
aws eks list-clusters

# Update cluster version
aws eks update-cluster-version --name my-cluster --kubernetes-version 1.31

# Update cluster config (endpoint access)
aws eks update-cluster-config --name my-cluster \
  --resources-vpc-config endpointPublicAccess=true,endpointPrivateAccess=true,publicAccessCidrs=["203.0.113.0/24"]

# Enable logging
aws eks update-cluster-config --name my-cluster \
  --logging '{"clusterLogging":[{"types":["api","audit","authenticator","controllerManager","scheduler"],"enabled":true}]}'

# Delete cluster
aws eks delete-cluster --name my-cluster

# Update kubeconfig
aws eks update-kubeconfig --name my-cluster --region us-east-1

Node Groups

# Create managed node group
aws eks create-nodegroup \
  --cluster-name my-cluster \
  --nodegroup-name main-nodes \
  --node-role arn:aws:iam::123456789012:role/EKSNodeRole \
  --subnets subnet-abc subnet-def \
  --instance-types m6i.large \
  --scaling-config minSize=1,maxSize=5,desiredSize=3

# List node groups
aws eks list-nodegroups --cluster-name my-cluster

# Describe node group
aws eks describe-nodegroup --cluster-name my-cluster --nodegroup-name main-nodes

# Update scaling
aws eks update-nodegroup-config --cluster-name my-cluster --nodegroup-name main-nodes \
  --scaling-config minSize=2,maxSize=10,desiredSize=4

# Update node group version
aws eks update-nodegroup-version --cluster-name my-cluster --nodegroup-name main-nodes

# Delete node group
aws eks delete-nodegroup --cluster-name my-cluster --nodegroup-name main-nodes

Add-ons

# List available add-ons
aws eks describe-addon-versions --kubernetes-version 1.31 \
  --query 'addons[*].{Name:addonName,Latest:addonVersions[0].addonVersion}'

# Create add-on
aws eks create-addon --cluster-name my-cluster \
  --addon-name vpc-cni \
  --service-account-role-arn arn:aws:iam::123456789012:role/VPCCNIRole \
  --resolve-conflicts OVERWRITE

# List installed add-ons
aws eks list-addons --cluster-name my-cluster

# Describe add-on
aws eks describe-addon --cluster-name my-cluster --addon-name vpc-cni

# Update add-on
aws eks update-addon --cluster-name my-cluster \
  --addon-name vpc-cni \
  --addon-version v1.18.0-eksbuild.1 \
  --resolve-conflicts OVERWRITE

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

Access Management

# List access entries
aws eks list-access-entries --cluster-name my-cluster

# Create access entry
aws eks create-access-entry \
  --cluster-name my-cluster \
  --principal-arn arn:aws:iam::123456789012:role/DevRole \
  --type STANDARD

# Associate access policy
aws eks associate-access-policy \
  --cluster-name my-cluster \
  --principal-arn arn:aws:iam::123456789012:role/DevRole \
  --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSViewPolicy \
  --access-scope type=namespace,namespaces=production

# List access policies
aws eks list-access-policies

# Describe access entry
aws eks describe-access-entry \
  --cluster-name my-cluster \
  --principal-arn arn:aws:iam::123456789012:role/DevRole

# Delete access entry
aws eks delete-access-entry \
  --cluster-name my-cluster \
  --principal-arn arn:aws:iam::123456789012:role/DevRole

Fargate

# Create Fargate profile
aws eks create-fargate-profile \
  --cluster-name my-cluster \
  --fargate-profile-name fp-default \
  --pod-execution-role-arn arn:aws:iam::123456789012:role/FargatePodRole \
  --subnets subnet-abc subnet-def \
  --selectors namespace=production

# List Fargate profiles
aws eks list-fargate-profiles --cluster-name my-cluster

# Describe
aws eks describe-fargate-profile --cluster-name my-cluster --fargate-profile-name fp-default

# Delete
aws eks delete-fargate-profile --cluster-name my-cluster --fargate-profile-name fp-default

Useful Query Patterns

# Cluster version and status
aws eks describe-cluster --name my-cluster \
  --query 'cluster.{Name:name,Version:version,Status:status,Platform:platformVersion}'

# Endpoint configuration
aws eks describe-cluster --name my-cluster \
  --query 'cluster.resourcesVpcConfig.{Public:endpointPublicAccess,Private:endpointPrivateAccess}'

# OIDC issuer
aws eks describe-cluster --name my-cluster \
  --query 'cluster.identity.oidc.issuer' --output text

# Node group health
aws eks describe-nodegroup --cluster-name my-cluster --nodegroup-name main-nodes \
  --query 'nodegroup.{Status:status,Health:health,DesiredSize:scalingConfig.desiredSize}'

# All add-on versions
aws eks list-addons --cluster-name my-cluster --output text | tr '\t' '\n' | while read addon; do
  version=$(aws eks describe-addon --cluster-name my-cluster --addon-name $addon --query 'addon.addonVersion' --output text)
  echo "$addon: $version"
done

Updated: