Monday, 1 September 2025

How to create Kubernetes cluster in AWS cloud by using EKS

Pre-requisites:

  • an EC2 Instance
Create one Amazon EC2 server and login into that server:-




  1. Setup kubectl
    a. Download kubectl latest version
    b. Grant execution permissions to kubectl executable
    c. Move kubectl onto /usr/local/bin
    d. Test that your kubectl installation was successful

[root@ip-172-31-21-108 ~]# curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.33.3/2025-08-03/bin/linux/amd64/kubectl
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 57.3M  100 57.3M    0     0  9734k      0  0:00:06  0:00:06 --:--:-- 10.4M
[root@ip-172-31-21-108 ~]#
[root@ip-172-31-21-108 ~]#
[root@ip-172-31-21-108 ~]# ls
kubectl
[root@ip-172-31-21-108 ~]# curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.33.3/2025-08-03/bin/linux/amd64/kubectl.sha256
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    73  100    73    0     0    304      0 --:--:-- --:--:-- --:--:--   305
[root@ip-172-31-21-108 ~]#
[root@ip-172-31-21-108 ~]#
[root@ip-172-31-21-108 ~]# sha256sum -c kubectl.sha256
kubectl: OK
[root@ip-172-31-21-108 ~]# ls -ltrh
total 58M
-rw-r--r--. 1 root root 58M Sep  2 04:25 kubectl
-rw-r--r--. 1 root root  73 Sep  2 04:25 kubectl.sha256
[root@ip-172-31-21-108 ~]# chmod +x ./kubectl
[root@ip-172-31-21-108 ~]# ls -ltrh
total 58M
-rwxr-xr-x. 1 root root 58M Sep  2 04:25 kubectl
-rw-r--r--. 1 root root  73 Sep  2 04:25 kubectl.sha256
[root@ip-172-31-21-108 ~]#
[root@ip-172-31-21-108 ~]# mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$HOME/bin:$PATH
[root@ip-172-31-21-108 ~]#
[root@ip-172-31-21-108 ~]# echo 'export PATH=$HOME/bin:$PATH' >> ~/.bashrc
[root@ip-172-31-21-108 ~]#
[root@ip-172-31-21-108 ~]# kubectl version
Client Version: v1.33.3-eks-3abbec1
Kustomize Version: v5.6.0



2. Setup eksctl
a. Download and extract the latest release
b. Move the extracted binary to /usr/local/bin
c. Test that your eksclt installation was successful

[root@ip-172-31-21-108 ~]# cd /tmp/
[root@ip-172-31-21-108 ~]# curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp

[root@ip-172-31-21-108 tmp]# sudo mv /tmp/eksctl /usr/local/bin
[root@ip-172-31-21-108 tmp]# eksctl version
0.214.0


3. Create an IAM Role and attached it to EC2 instance

Note: create IAM user with programmatic access if your bootstrap system is outside of AWS

IAM user should have access to
IAM,EC2 and CloudFormation


4. Install AWSCLI and configure it.

[root@ip-172-31-21-108 ~]# ls
bin  kubectl  kubectl.sha256

[root@ip-172-31-21-108 ~]# curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 59.2M  100 59.2M    0     0  77.9M      0 --:--:-- --:--:-- --:--:-- 78.0M
[root@ip-172-31-21-108 ~]# ls
awscliv2.zip  bin  kubectl  kubectl.sha256
[root@ip-172-31-21-108 ~]# unzip awscliv2.zip
Archive:  awscliv2.zip
   creating: aws/
   creating: aws/dist/
[root@ip-172-31-21-108 ~]# sudo ./aws/install
You can now run: /usr/local/bin/aws --version
[root@ip-172-31-21-108 ~]# aws --version
aws-cli/2.28.21 Python/3.13.7 Linux/6.1.147-172.266.amzn2023.x86_64 exe/x86_64.amzn.2023
[root@ip-172-31-21-108 ~]# aws configure
AWS Access Key ID [None]: AKIASFUIRV7CP4SRCAGY
AWS Secret Access Key [None]: R+/Pe1sA64kDlqAVcBz4OI6RTaiSgqA7KqhSwXdC
Default region name [None]: us-east-1
Default output format [None]:
[root@ip-172-31-21-108 ~]#


5. Create your k8s cluster and nodes

[root@ip-172-31-21-108 ~]# eksctl create cluster --name raj-cluster2 --region us-east-1 --node-type t2.small

2025-09-02 05:19:13 [ℹ]  eksctl version 0.214.0
2025-09-02 05:19:13 [ℹ]  using region us-east-1
2025-09-02 05:19:13 [ℹ]  setting availability zones to [us-east-1a us-east-1b]
2025-09-02 06:26:48 [ℹ]  kubectl command should work with "/root/.kube/config", try 'kubectl get nodes'
2025-09-02 06:26:48 [✔]  EKS cluster "raj-cluster2" in "us-east-1" region is ready






6. To set context and access the cluster 

[root@ip-172-31-21-108 ~]# cat ~/.kube/config
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURCVENDQWUyZ0F3SUJBZ0lJSzZUdDFEZ041Z013RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TlRBNU1ESXdOakUwTURGYUZ3MHpOVEE0TXpFd05qRTVNREZhTUJVeApFekFSQmdOVkJBTVRDbXQxWW1WeWJtVjBaWE13Z2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLCkFvSUJBUUR3ai9tZExad2p1QWFyWkFFZ2llUVd0d1h1RWRiRCtQclRURjNEanFabDZQVzg3RU9Ca25lV3hzU1UKa0pDQnBXV0JiWEl3R1ZDQy93SlMwdEtZWjN3T3J0ZEw4cEFpcVplRk9mK05WTkc5ZkY0WFA4SlpoSkhlSEQvWgpNNnVxeUtKb3k5dTgraVB6Z1pUekN2WEVaZ083QVNBS1NXYXhWNU0yZmlQeDNNWE5tU2svSURlMjVYMDhBYURxCmxsMG5wQ0s1QTMwZDA5K0Z0T0dVam01Y0NPQTZ4NDZYWW5KSGUyWFZpdHBUcUR1bUEzbDdUQzJONEhjNmVBTW8KKzlEL1ZKenR5a1lQWG5GMjd6K2QrUkl4TzNTbzh4dFh3ajU4V1FZMUZoWGE3RElPRHkyTXhobHc5MzQ0c2k1TQo3cXRvY0Q1Mi9jZmgvSEFVVElYRzFzQ1BJK3M3QWdNQkFBR2pXVEJYTUE0R0ExVWREd0VCL3dRRUF3SUNwREFQCkJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXQkJSVVlXNVJjWHVsRmtQc2YwWjZCV0NyMWMyZ3h6QVYKQmdOVkhSRUVEakFNZ2dwcmRXSmxjbTVsZEdWek1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQjZVa3dJTDVhaQpCMHJsYVdRblhmUzRZVVk5ZHFWYTlnOUgvSkVyZjFkVnQzL1U3U0JrSGgxdDJid3QvOW9nc2d6VUNkUnMzNWNqClNrU2pmU0VFTWtoWTV1RklSR0FINDFyQ2s3VGlFeW5qcmo2VTZkN1NGd2dkYTBaVWhQcTA1MjBhaVM4RUFlZmsKMmh2aXN0c1p5dWFudElORGRrVzNFSG9xdm9pQlJEWEdVVUhhVkkzcjJoWjhZNWVQM3lFL29RL2dDMlo5OEZtVQpGTGY5T1F6TTVzRE9NUS9vWk8xdFJpZlBHdlRybE1RL3J2V3dvK2tLbHBRS04xRzdaaFZoM1dPWDdTY3U5TFlZCko0VjE1dmJtZlRNOUNjOGhjVWwveUdkbytQRmVUUG5pRWRGaVpQRm93WjJrRWZUTVI1TUxyUE9RaWFVQlJCSWUKdlZEd3VoWmsrRXlyCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
    server: https://99DA2D2614FADE33420F6D25B9A6898F.gr7.us-east-1.eks.amazonaws.com
  name: raj-cluster2.us-east-1.eksctl.io
contexts:
- context:
    cluster: raj-cluster2.us-east-1.eksctl.io
    user: Ramu@raj-cluster2.us-east-1.eksctl.io
  name: Ramu@raj-cluster2.us-east-1.eksctl.io
current-context: Ramu@raj-cluster2.us-east-1.eksctl.io
kind: Config
preferences: {}
users:
- name: Ramu@raj-cluster2.us-east-1.eksctl.io
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1beta1
      args:
      - eks
      - get-token
      - --output
      - json
      - --cluster-name
      - raj-cluster2
      - --region
      - us-east-1
      command: aws
      env:
      - name: AWS_STS_REGIONAL_ENDPOINTS
        value: regional
      provideClusterInfo: false

[root@ip-172-31-21-108 ~]# aws eks list-clusters --region us-east-1
{
    "clusters": [
        "raj-cluster2"
    ]
}
[root@ip-172-31-21-108 ~]# aws eks get-token --cluster-name raj-cluster2
{
    "kind": "ExecCredential",
    "apiVersion": "client.authentication.k8s.io/v1beta1",
    "spec": {},
    "status": {
        "expirationTimestamp": "2025-09-02T06:50:02Z",
        "token": "k8s-aws-v1.aHR0cHM6Ly9zdHMudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20vP0FjdGlvbj1HZXRDYWxsZXJJZGVudGl0eSZWZXJzaW9uPTIwMTEtMDYtMTUmWC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBU0ZVSVJWN0NQNFNSQ0FHWSUyRjIwMjUwOTAyJTJGdXMtZWFzdC0xJTJGc3RzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTA5MDJUMDYzNjAyWiZYLUFtei1FeHBpcmVzPTYwJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCUzQngtazhzLWF3cy1pZCZYLUFtei1TaWduYXR1cmU9ZmZlZWEyNTQ3OTZjNTAzMjczMzNjMjgxYmU5N2QwMDIyMzVkYTZjNWRmZmUxOTMzMTI2MTEwOWY5OTJjNDU0Yw"
    }
}

[root@ip-172-31-21-108 ~]# aws eks update-kubeconfig --name raj-cluster2 --region us-east-1
Added new context arn:aws:eks:us-east-1:149536485316:cluster/raj-cluster2 to /root/.kube/config


[root@ip-172-31-21-108 ~]# kubectl get nodes
NAME                            STATUS   ROLES    AGE   VERSION
ip-192-168-3-121.ec2.internal   Ready    <none>   11m   v1.32.7-eks-3abbec1
ip-192-168-32-98.ec2.internal   Ready    <none>   11m   v1.32.7-eks-3abbec1
[root@ip-172-31-21-108 ~]#


7. Now to delete k8s cluster run below command

[root@ip-172-31-21-108 ~]# eksctl delete cluster raj-cluster2 --region us-east-1




No comments:

Post a Comment