Create one Amazon EC2 server and login into that server:-
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