EKS Tools and Prerequisites

Creating a cluster takes one command. Whether it works — and whether the cluster is usable afterwards — depends on four things being in place first: tools, identity, network and quotas.

If Kubernetes itself is new, start with Start Here on a local kind cluster. EKS adds AWS concerns on top; it does not replace the fundamentals.

Tools

ToolPurposeNeeded?
AWS CLI v2Talks to AWS; issues the token kubectl uses to authenticateYes
kubectlTalks to the Kubernetes APIYes
eksctlCreates clusters and node groups from one YAML file (drives CloudFormation)Recommended for learning
HelmInstalls most add-onsYes, in practice
Terraform / OpenTofuManages the cluster as codeFor anything long-lived
k9sTerminal UI for day-to-day workOptional
aws --version          # aws-cli/2.x
kubectl version --client
eksctl version
helm version --short

Version skew matters. kubectl is supported within one minor version of the API server in either direction. An old client against a new cluster mostly works and then fails in confusing ways on newer resources. More in kubectl and k9s.

Identity

Confirm who you are before anything else — half of all first-day problems are the wrong profile or account:

aws sts get-caller-identity
aws configure list

Use short-lived credentials from IAM Identity Center (aws sso login) rather than long-lived access keys.

Permissions to create a cluster

Cluster creation touches EKS, EC2, IAM, CloudFormation, Auto Scaling and KMS. For a sandbox, an administrator role is the practical choice. For a shared account, use a dedicated provisioning role, and remember it must be allowed to iam:PassRole the cluster and node roles.

The roles EKS itself uses

RoleAssumed byManaged policies
Cluster roleThe EKS control planeAmazonEKSClusterPolicy
Node roleEC2 worker nodesAmazonEKSWorkerNodePolicy, AmazonEC2ContainerRegistryPullOnly, AmazonEKS_CNI_Policy
Pod execution roleFargate, when usedAmazonEKSFargatePodExecutionRolePolicy
Workload rolesYour podsPer application, through Pod Identity

eksctl creates the first two for you. See types of IAM roles for the distinction between service roles and the roles people assume.

Who can use the cluster afterwards

IAM permission to create a cluster and Kubernetes permission to use it are separate. Plan from the start which roles get access entries, so access does not depend on whoever happened to run the create command.

Network

EKS runs in a VPC you provide.

RequirementWhy
Subnets in at least two Availability ZonesThe control plane places its ENIs across zones
DNS hostnames and DNS resolution enabledNodes find the API endpoint by name
Enough free IP addressesEvery pod takes a VPC IP. A /24 holds about 250 pods and nodes combined
Outbound access from node subnetsPull images and call AWS APIs: a NAT gateway, or VPC endpoints for a private cluster
Subnet tags for load balancerskubernetes.io/role/elb=1 on public subnets, kubernetes.io/role/internal-elb=1 on private

Address planning is the decision that is hardest to change later. Size subnets for the pod count you expect in two years, not today, and read VPC CNI to see why. A good default is nodes in private /19 or /20 subnets and only load balancers in small public subnets.

Choose the API endpoint exposure deliberately: public, public restricted to known CIDRs, or private — endpoint access.

Quotas

Check Service Quotas in the target region before a workshop or a launch:

  • Running On-Demand instances (counted in vCPUs, per instance family) — the one that most often stops a node group from scaling.
  • Elastic IPs — one per NAT gateway; the default is five per region.
  • VPCs per region — default five, and eksctl creates a new one unless told otherwise.
  • EKS clusters per region, and ENIs per region for dense clusters.

Decide before you create

DecisionOptionsEasy to change later?
Kubernetes versionA version in standard support; avoid starting on one about to enter extended supportUpgrade only, one minor at a time
Compute modelAuto Mode, managed node groups, Karpenter, FargateYes
IP familyIPv4 or IPv6No
VPC and subnetsNew or existingSubnets can be added; the VPC cannot be swapped
Authentication modeAPI (access entries)Forward only
Secrets encryption keyAWS-owned or your own KMS keyCan be added, not removed
Endpoint accessPublic, private or bothYes

Checklist

# Right account and region?
aws sts get-caller-identity && aws configure get region
 
# Subnets: at least two zones, with free addresses
aws ec2 describe-subnets --filters Name=vpc-id,Values=vpc-0abc \
  --query 'Subnets[].{az:AvailabilityZone,cidr:CidrBlock,free:AvailableIpAddressCount}' --output table
 
# Supported Kubernetes versions
aws eks describe-cluster-versions --query 'clusterVersions[].{v:clusterVersion,status:versionStatus}' --output table

Next: create the cluster.