How to deploy on EKS

k8s

The Amazon Elastic Kubernetes Service (EKS) is a popular, fully automated Kubernetes service.

EKS web interface: console.aws.amazon.com/eks/home

Prerequisites

  • A physical or virtual machine running Ubuntu 24.04+

  • Juju 3.6+ installed via snap


Install EKS tooling

Install the Amazon EKS CLI by following the official eksctl documentation.

Install the Amazon Web Services CLI by following the official AWS documentation

Install the kubectl CLI tools via snap:

user@host:~$
sudo snap install kubectl --classic

To check they are correctly installed, run

user@host:~$
eksctl info
eksctl version: 0.159.0
kubectl version: v1.28.2
user@host:~$
aws --version
aws-cli/2.13.25 Python/3.11.5 Linux/6.2.0-33-generic exe/x86_64.ubuntu.23 prompt/off
user@host:~$
kubectl version --client
Client Version: v1.28.2
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3

Authenticate

Create an IAM account or use legacy access keys to operate AWS:

user@host:~$
aws configure
AWS Access Key ID [None]: SECRET_ACCESS_KEY_ID
AWS Secret Access Key [None]: SECRET_ACCESS_KEY_VALUE
Default region name [None]: eu-west-3
Default output format [None]:
user@host:~$
aws sts get-caller-identity
{
    "UserId": "1234567890",
    "Account": "1234567890",
    "Arn": "arn:aws:iam::1234567890:root"
}

Create a new EKS cluster

Export the deployment name for later use:

user@host:~$
export JUJU_NAME=aks-$USER-$RANDOM

Example cluster.yaml:

user@host:~$
cat <<-EOF > cluster.yaml
---
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
    name: ${JUJU_NAME}
    region: <region-name>
    version: "1.27"
iam:
  withOIDC: true