eksctl EKS cluster CLI

Version 0.231 · source

Start here

eksctl create cluster -f <file>
Create from config
eksctl get cluster
List clusters
eksctl get nodegroup --cluster <name>
List node groups
eksctl scale nodegroup --cluster <name> --name <ng> --nodes <n>
Resize nodes
eksctl utils write-kubeconfig --cluster <name>
Connect kubectl
eksctl upgrade cluster -f <file> --approve
Upgrade control plane
eksctl create cluster --dry-run
Print generated config
eksctl delete cluster -f <file> --wait
Tear it down

Concepts

AWS account + region default region from AWS CLI config
CloudFormation stacks eksctl-<cluster>-cluster, -nodegroup-<ng>
EKS control plane + VPC managed by AWS
Node groups managed (default) or self-managed
What eksctl creates

Create Cluster

eksctl create cluster
Default cluster: 2 managed m5.large nodes
eksctl create cluster -f <file>
Create from a ClusterConfig file
--name <name> --region <region>
Name and region of the cluster
--version <k8s-version>
Kubernetes version of the control plane
--dry-run
Print the ClusterConfig, create nothing
Options that cannot be written to a config file are rejected together with --dry-run.
--node-private-networking
Put nodes in private subnets only

ClusterConfig File

Minimal cluster.yaml
apiVersion: eksctl.io/v1alpha5kind: ClusterConfigmetadata:  name: <name>  region: <region>managedNodeGroups:  - name: ng-1    instanceType: m5.large    desiredCapacity: 3    minSize: 1    maxSize: 5
managedNodeGroups: / nodeGroups:
Managed vs self-managed groups

Inspect Clusters

eksctl get cluster
List clusters in the region
eksctl version
Show the eksctl version
eksctl utils nodegroup-health --cluster <name> --name <ng>
Health issues of a managed group

Node Groups

eksctl get nodegroup --cluster <name>
List node groups
eksctl create nodegroup --cluster <name> --name <ng>
Add a node group
eksctl scale nodegroup --cluster <name> --name <ng> --nodes <n>
Change desired size
eksctl upgrade nodegroup --cluster <name> --name <ng>
Roll a managed group to the cluster version
eksctl delete nodegroup --cluster <name> --name <ng> --approve
Delete a node group
Without --approve the command only shows a plan.
--include <glob> / --exclude <glob>
Select groups when using a config file

Kubeconfig

eksctl utils write-kubeconfig --cluster <name>
Add the cluster to your kubeconfig

Upgrades

eksctl upgrade cluster --name <name>
Preview the control-plane upgrade
--version <k8s-version> --approve
Apply the upgrade, one minor step
Only the current version or one minor version higher is allowed.
eksctl upgrade cluster -f <file> --approve
Upgrade using metadata.version
eksctl utils update-kube-proxy --cluster <name> --approve
Update the kube-proxy add-on

IAM and Add-ons

eksctl utils associate-iam-oidc-provider --cluster <name> --approve
Enable the OIDC provider for IRSA
eksctl create iamserviceaccount --cluster <name> --name <sa> --namespace <ns> --attach-policy-arn <arn>
Bind an IAM role to a service account
eksctl delete iamserviceaccount --cluster <name> --name <sa> --namespace <ns>
Remove the role and service account
Also deletes Kubernetes service accounts not created by eksctl.
eksctl get addon --cluster <name>
List installed add-ons
eksctl create addon --cluster <name> --name <addon>
Install an EKS add-on
eksctl update addon --cluster <name> --name <addon> --version <ver>
Change an add-on version
eksctl utils describe-addon-versions --kubernetes-version <ver>
Find available add-on versions

Delete Cluster

eksctl delete cluster --name <name> --wait
Delete and report errors
Without --wait only the CloudFormation delete is issued; failures stay hidden.
eksctl delete cluster -f <file> --wait
Delete the cluster from its config
--disable-nodegroup-eviction
Ignore PodDisruptionBudgets while draining

Recipes

Preview, create, connect
eksctl create cluster --name <name> --region <region> \  --nodes 3 --dry-run > cluster.yamleksctl create cluster -f cluster.yamlkubectl get nodes
Upgrade a cluster
eksctl upgrade cluster -f cluster.yaml --approveeksctl upgrade nodegroup --cluster <name> --name <ng>eksctl utils update-kube-proxy --cluster <name> --approve
IRSA for an app
eksctl utils associate-iam-oidc-provider --cluster <name> --approveeksctl create iamserviceaccount --cluster <name> \  --name <sa> --namespace <ns> \  --attach-policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess \  --approve