Amazon Elastic Kubernetes Service (EKS) is a managed service within AWS, that allows you to run a Kubernetes cluster. Managed service translates into the fact that there's no need to install, or maintain the cluster's control or data plane.
Prerequisites
You're going you need a user with the right policies for services like EKS, CloudFormation, EC2, IAM, and an access key for that user (guide here).
Tooling
-
kubectl
- CLI for communicating with Kubernetes (installation guide here) -
aws
- CLI for interacting with AWS services (installation guide here) -
eksctl
- CLI for creating and managing clusters on EKS (installation guide here)
Configuration
aws iam
authenticator that allows you to use AWS IAM credentials to authenticate (installation guide here)
Configure AWS CLI: run the following command without arguments in order to get prompted for configuration values (e.g. AWS Access Key Id and your AWS Secret Access Key, AWS region).
aws configure
IAM AWS CLI: for eksctl
you will need to have AWS API credentials configured. Amazon EKS uses the IAM service to provide authentication to your Kubernetes cluster through the AWS IAM authenticator for Kubernetes.
Next you can verify if you're authenticated by running the following command:
aws iam get-user
Creating Kubernetes cluster
First you can list if there are any existing clusters (normally you should not have them if this is a fresh setup).
eksctl get clusters
To allow SSH access to nodes, eksctl
imports by default the ssh public key from ~/.ssh/id_rsa.pub
, but if you want you can use another SSH public key by passing the absolute path to the key to --ssh-public-key
flag.
EKS clusters run in a VPC, therefore you need an Amazon VPC with public and private subnets. The VPC must have a sufficient number of IP addresses available for the cluster, any nodes, and other Kubernetes resources that you want to create, and also it must have DNS hostname and DNS resolution support (otherwise nodes can't register to the cluster). You can't change which subnets you want to use after cluster creation.
The beauty of it, is that eksctl
will do all the heavy lifting for you, and even more it allows to customize your Kubernetes cluster as needed (number of nodes, region, size of the nodes).
Example for 2 cluster node in the eu-west-1 region:
eksctl create cluster --name=demo_cluster --nodes=2 --region=eu-west-1 --ssh-public-key=eks_key.pub
Behind the scenes eksctl
uses CloudFormation, you can see that in this case, it creates 2 CloudFormation stacks, one for cluster itself (control plane) and one for the initial managed nodegroup (woker nodes).
Furthermore you can use CloudFormation console to check the status of it.
After the cluster was created everything is set, you can verify that kubectl
point to the correct cluster by running:
kubectl config current-context
Leveraging eksctl
you can deploy a Kubernetes cluster in AWS in a matter of minutes.
Top comments (2)
Thanks for sharing.
You did not explain why you chose
eksctl
over AWS console or Terraform ?That's a excellent question @bcouetil, here you can find a more holistic view concerning ways of interacting with cloud providers: TL;DR I feel that CLI approach is the sweet spot between declarative and imperative