top of page

Getting started with AWS EKS cluster

Updated: May 28, 2023


AWS EKS cluster

Amazon Elastic Kubernetes Service (EKS) is a fully managed Kubernetes service that Amazon Web Services (AWS) provides. It makes deploying, managing, and scaling containerized applications on Kubernetes easy.


In this tutorial, we will cover the following topics:

Introduction to AWS EKS cluster


EKS is a managed Kubernetes service that allows you to run Kubernetes on AWS without having to manage the underlying infrastructure. It is a highly available and scalable service that provides automatic upgrades and patching, built-in security features, and integration with AWS services such as Elastic Load Balancing, AWS Identity and Access Management (IAM), and Amazon Elastic File System (EFS).


Benefits of using AWS EKS


Some of the benefits of using AWS EKS include:

  • Scalability: EKS makes scaling your Kubernetes cluster up or down easy based on your application needs.

  • Availability: EKS provides high availability by automatically detecting and replacing unhealthy Kubernetes control plane nodes and worker nodes.

  • Security: EKS provides built-in security features such as encrypted communication between Kubernetes nodes and integration with AWS IAM for authentication and authorization.

  • Integration with AWS Services: EKS integrates with other AWS services such as Elastic Load Balancing, AWS Identity and Access Management (IAM), and Amazon Elastic File System (EFS).

Use-cases of using AWS EKS


Here are some of the common use cases of using EKS:

  • Deploying containerized applications on a managed Kubernetes service

  • Running batch processing workloads with Kubernetes

  • Running machine learning workloads with Kubernetes

  • Running web applications with Kubernetes

Now let us go hands-on and create a cluster.


Creating a new cluster using eksctl


Prerequisites


Before starting this tutorial, you must have the following tools and resources.

  • kubectl – A command line tool for working with Kubernetes clusters. This guide requires that you use version 1.26 or later. For more information, see Installing or updating kubectl.

  • eksctl – A command line tool for working with EKS clusters that automates many individual tasks. This guide requires that you use version 0.140.0 or later. For more information, see Installing or updating eksctl.

  • Required IAM permissions – The IAM security principal that you're using must have permissions to work with Amazon EKS IAM roles, service-linked roles, AWS CloudFormation, a VPC, and related resources.

  • Helm - Helm helps you manage Kubernetes applications — Helm Charts help you define, install, and upgrade even the most complex Kubernetes application. See Installing Helm Docs

Create your Amazon EKS cluster and Nodes.


Note: I'm keeping things very simple for the sake of keeping the blog post concise, but if you are planning to create this for a production setup, then please refer to the EKS document for best practices, OR you can hire me as a consultant 😊.


There are two options for Node types: Fargate - Linux or Managed nodes - Linux. We will choose Managed nodes but refer to the document and choose one that suits you better.


The following command creates a new cluster:

$ eksctl create cluster --name my-cluster --region us-west-1

This command takes about 15-20 mins to create the cluster and add worker nodes.


View created resources


Once the cluster is created and kubectl is configured, you can check the cluster status.

$ kubectl get nodes -o wide
NAME                                           STATUS   ROLES    AGE   VERSION
ip-192-168-49-106.us-west-1.compute.internal   Ready    <none>   25m   v1.25.7-eks-a59e1f0
ip-192-168-8-168.us-west-1.compute.internal    Ready    <none>   25m   v1.25.7-eks-a59e1f0

Adding the EBS CSI driver


To create and manage volumes, EKS provides various CSI drivers. The simplest of them is the EBS driver. Let us see how to install and configure it.


Check if the default storage class is already defined.


This should already have been created by eksctl.

$ kubectl get storageclass
NAME            PROVISIONER             RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
gp2 (default)   kubernetes.io/aws-ebs   Delete          WaitForFirstConsumer   false                  38m

If not, then follow this guide to create one.


Create an IAM OIDC provider associated with the cluster.


To use AWS Identity and Access Management (IAM) roles for service accounts, an IAM OIDC provider must exist for your cluster's OIDC issuer URL. Lets create one

$ eksctl utils associate-iam-oidc-provider --region=us-west-1 --cluster=my-cluster --approve

2023-05-11 14:02:38 [ℹ]  will create IAM Open ID Connect provider for cluster "my-cluster" in "us-west-1"
2023-05-11 14:02:40 [✔]  created IAM Open ID Connect provider for cluster "my-cluster" in "us-west-1"

Create the Amazon EBS CSI driver IAM role for service accounts.


To create the IAM role, run the following command:


$ eksctl create iamserviceaccount \
  --name ebs-csi-controller-sa \
  --namespace kube-system \
  --cluster my-cluster \
  --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \
  --approve \
  --role-only \
  --role-name AmazonEKS_EBS_CSI_DriverRole
  
2023-05-11 14:03:23 [ℹ]  1 iamserviceaccount (kube-system/ebs-csi-controller-sa) was included (based on the include/exclude rules)

2023-05-11 14:03:23 [!]  serviceaccounts in Kubernetes will not be created or modified, since the option --role-only is used

2023-05-11 14:03:23 [ℹ]  1 task: { create IAM role for serviceaccount "kube-system/ebs-csi-controller-sa" }

2023-05-11 14:03:23 [ℹ]  building iamserviceaccount stack "eksctl-my-cluster-addon-iamserviceaccount-kube-system-ebs-csi-controller-sa"

2023-05-11 14:03:23 [ℹ]  deploying stack "eksctl-my-cluster-addon-iamserviceaccount-kube-system-ebs-csi-controller-sa"

2023-05-11 14:03:24 [ℹ]  waiting for CloudFormation stack "eksctl-my-cluster-addon-iamserviceaccount-kube-system-ebs-csi-controller-sa"

2023-05-11 14:03:55 [ℹ]  waiting for CloudFormation stack "eksctl-my-cluster-addon-iamserviceaccount-kube-system-ebs-csi-controller-sa"
  

For more options, check the official docs.


Add the Amazon EBS CSI driver as an Amazon EKS add-on.


Run the following command. Replace 111122223333 with your account ID.


$ eksctl create addon --name aws-ebs-csi-driver --cluster my-cluster --service-account-role-arn arn:aws:iam::111122223333:role/AmazonEKS_EBS_CSI_DriverRole --force

2023-05-11 14:06:37 [ℹ]  Kubernetes version "1.25" in use by cluster "my-cluster"

2023-05-11 14:06:37 [ℹ]  using provided ServiceAccountRoleARN "arn:aws:iam::111122223333:role/AmazonEKS_EBS_CSI_DriverRole"

2023-05-11 14:06:37 [ℹ]  creating addon

Now we should be able to create Persistence Volumes.


Adding Nginx Ingress


We will use the Helm chart for deploying Nginx Ingress


$ helm install ingress-nginx ingress-nginx \
    --repo https://kubernetes.github.io/ingress-nginx \
    --namespace ingress-nginx --create-namespace \
    --set controller.ingressClassResource.default=true \
    --set controller.service.type=LoadBalancer \
    --set controller.service.annotations."service\.beta\.kubernetes\.io/aws-load-balancer-type"="nlb"

NAME: ingress-nginx
LAST DEPLOYED: Thu May 11 18:45:51 2023
NAMESPACE: ingress-nginx
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
The ingress-nginx controller has been installed.
It may take a few minutes for the LoadBalancer IP to be available.
You can watch the status by running 'kubectl --namespace ingress-nginx get services -o wide -w ingress-nginx-controller'

An example Ingress that makes use of the controller:
  apiVersion: networking.k8s.io/v1
  kind: Ingress
  metadata:
    name: example
    namespace: foo
  spec:
    ingressClassName: nginx
    rules:
      - host: www.example.com
        http:
          paths:
            - pathType: Prefix
              backend:
                service:
                  name: exampleService
                  port:
                    number: 80
              path: /
    # This section is only required if TLS is to be enabled for the Ingress
    tls:
      - hosts:
        - www.example.com
        secretName: example-tls

If TLS is enabled for the Ingress, a Secret containing the certificate and key must also be provided:

  apiVersion: v1
  kind: Secret
  metadata:
    name: example-tls
    namespace: foo
  data:
    tls.crt: <base64 encoded cert>
    tls.key: <base64 encoded key>
  type: kubernetes.io/tls

We see that the ELB has been created and assigned to our ingress controller.


$ kubectl --namespace ingress-nginx get services -o wide  ingress-nginx-controller

NAME                       TYPE           CLUSTER-IP     EXTERNAL-IP                                                                     PORT(S)                      AGE    SELECTOR
ingress-nginx-controller   LoadBalancer   10.100.83.16   a6fd18cfa9b77453bbcfe3a1e64338de-132ae7f3fc184f00.elb.us-west-1.amazonaws.com   80:31026/TCP,443:31632/TCP   111s   app.kubernetes.io/component=controller,app.kubernetes.io/instance=ingress-nginx,app.kubernetes.io/name=ingress-nginx

Now since I already know the hostname of the application that I am going to deploy, I will go to my DNS manager and add a CNAME record for that hostname with the ELB name as the value.


Adding DNS entry of ELB as CNAME

Adding Cert-Manager


We will deploy cert-manager using its own Helm chart.


$ helm install cert-manager cert-manager \
    --namespace cert-manager  --create-namespace \
    --repo https://charts.jetstack.io \
    --set installCRDs=true

NAME: cert-manager
LAST DEPLOYED: Thu May 11 18:53:59 2023
NAMESPACE: cert-manager
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
cert-manager v1.11.2 has been deployed successfully!

In order to begin issuing certificates, you will need to set up a ClusterIssuer
or Issuer resource (for example, by creating a 'letsencrypt-staging' issuer).

More information on the different types of issuers and how to configure them
can be found in our documentation:

https://cert-manager.io/docs/configuration/

For information on how to configure cert-manager to automatically provision
Certificates for Ingress resources, take a look at the `ingress-shim`
documentation:

https://cert-manager.io/docs/usage/ingress/

Once deployed, we need to create a ClusterIssuer as follows. Make sure to update your email address in the "email: " section.


$ cat > letsencrypt-prod.yaml <<EOF
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    # The ACME server URL
    server: https://acme-v02.api.letsencrypt.org/directory
    # Email address used for ACME registration
    email: <UPDATE YOUR EMAIL ID HERE>
    # Name of a secret used to store the ACME account private key
    privateKeySecretRef:
      name: letsencrypt-prod
    # Enable the HTTP-01 challenge provider
    solvers:
    - http01:
        ingress:
          class: nginx
EOF

Now let us create this resource.


$ kubectl create -f letsencrypt-prod.yaml
clusterissuer.cert-manager.io/letsencrypt-prod created

$ kubectl get clusterissuer
NAME               READY   AGE
letsencrypt-prod   True    73s

Deploying a sample web + database application


Now we have all the cluster-specific resources to deploy our application. So let's get started on deploying our application.


Add a namespace for our app.


$ kubectl create ns myapp
namespace/myapp created

Install PostgreSQL via Helm Chart


$ helm -n myapp install mydb oci://registry-1.docker.io/bitnamicharts/postgresql

Pulled: registry-1.docker.io/bitnamicharts/postgresql:12.4.3
Digest: sha256:300464cbd54a77ee8ff2de3b2f71d41e2516354449f514a5a148df98b616ae09
NAME: mydb
LAST DEPLOYED: Thu May 11 14:10:58 2023
NAMESPACE: myapp
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: postgresql
CHART VERSION: 12.4.3
APP VERSION: 15.2.0

** Please be patient while the chart is being deployed **

PostgreSQL can be accessed via port 5432 on the following DNS names from within your cluster:

    mydb-postgresql.myapp.svc.cluster.local - Read/Write connection

To get the password for "postgres" run:

    export POSTGRES_PASSWORD=$(kubectl get secret --namespace myapp mydb-postgresql -o jsonpath="{.data.postgres-password}" | base64 -d)

To connect to your database run the following command:

    kubectl run mydb-postgresql-client --rm --tty -i --restart='Never' --namespace myapp --image docker.io/bitnami/postgresql:15.2.0-debian-11-r30 --env="PGPASSWORD=$POSTGRES_PASSWORD" \
      --command -- psql --host mydb-postgresql -U postgres -d postgres -p 5432

    > NOTE: If you access the container using bash, make sure that you execute "/opt/bitnami/scripts/postgresql/entrypoint.sh /bin/bash" in order to avoid the error "psql: local user with ID 1001} does not exist"

To connect to your database from outside the cluster execute the following commands:

    kubectl port-forward --namespace myapp svc/mydb-postgresql 5432:5432 &
    PGPASSWORD="$POSTGRES_PASSWORD" psql --host 127.0.0.1 -U postgres -d postgres -p 5432

WARNING: The configured password will be ignored on new installation in case when previous Posgresql release was deleted through the helm command. In that case, old PVC will have an old password, and setting it through helm won't take effect. Deleting persistent volumes (PVs) will solve the issue.

Let us test the connection to the PostgreSQL installation.


$ export POSTGRES_PASSWORD=$(kubectl get secret --namespace myapp mydb-postgresql -o jsonpath="{.data.postgres-password}" | base64 -d)

$ kubectl run mydb-postgresql-client --rm --tty -i --restart='Never' --namespace myapp --image docker.io/bitnami/postgresql:15.2.0-debian-11-r30 --env="PGPASSWORD=$POSTGRES_PASSWORD" \
>       --command -- psql --host mydb-postgresql -U postgres -d postgres -p 5432
If you don't see a command prompt, try pressing enter.

postgres=# \l
                                                 List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    | ICU Locale | Locale Provider |   Access privileges   
-----------+----------+----------+-------------+-------------+------------+-----------------+-----------------------
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |            | libc            | 
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |            | libc            | =c/postgres          +
           |          |          |             |             |            |                 | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |            | libc            | =c/postgres          +
           |          |          |             |             |            |                 | postgres=CTc/postgres
(3 rows)

postgres=# ^D\q
could not save history to file "//.psql_history": Permission denied

E0511 14:11:57.264757     331 v2.go:104] EOF
pod "mydb-postgresql-client" deleted

It works.


Checking the Kubernetes events


The Kubernetes events show that the data volume for Postgres was provisioned successfully. So our EBS driver is working fine.


$ kubectl -n myapp get events
LAST SEEN   TYPE     REASON                   OBJECT                                         MESSAGE
3m23s       Normal   WaitForFirstConsumer     persistentvolumeclaim/data-mydb-postgresql-0   waiting for first consumer to be created before binding
3m23s       Normal   Provisioning             persistentvolumeclaim/data-mydb-postgresql-0   External provisioner is provisioning volume for claim "myapp/data-mydb-postgresql-0"
3m23s       Normal   ExternalProvisioning     persistentvolumeclaim/data-mydb-postgresql-0   waiting for a volume to be created, either by external provisioner "ebs.csi.aws.com" or manually created by system administrator
3m20s       Normal   ProvisioningSucceeded    persistentvolumeclaim/data-mydb-postgresql-0   Successfully provisioned volume pvc-eb564647-459e-4c87-b23f-3ccfd9e74e15
3m19s       Normal   Scheduled                pod/mydb-postgresql-0                          Successfully assigned myapp/mydb-postgresql-0 to ip-192-168-8-168.us-west-1.compute.internal
3m17s       Normal   SuccessfulAttachVolume   pod/mydb-postgresql-0                          AttachVolume.Attach succeeded for volume "pvc-eb564647-459e-4c87-b23f-3ccfd9e74e15"
3m13s       Normal   Pulling                  pod/mydb-postgresql-0                          Pulling image "docker.io/bitnami/postgresql:15.2.0-debian-11-r30"
3m8s        Normal   Pulled                   pod/mydb-postgresql-0                          Successfully pulled image "docker.io/bitnami/postgresql:15.2.0-debian-11-r30" in 5.344579763s (5.344589084s including waiting)
3m8s        Normal   Created                  pod/mydb-postgresql-0                          Created container postgresql
3m8s        Normal   Started                  pod/mydb-postgresql-0                          Started container postgresql
2m59s       Normal   Scheduled                pod/mydb-postgresql-client                     Successfully assigned myapp/mydb-postgresql-client to ip-192-168-49-106.us-west-1.compute.internal
2m58s       Normal   Pulling                  pod/mydb-postgresql-client                     Pulling image "docker.io/bitnami/postgresql:15.2.0-debian-11-r30"
2m53s       Normal   Pulled                   pod/mydb-postgresql-client                     Successfully pulled image "docker.io/bitnami/postgresql:15.2.0-debian-11-r30" in 5.508035105s (5.508060576s including waiting)
2m53s       Normal   Created                  pod/mydb-postgresql-client                     Created container mydb-postgresql-client
2m53s       Normal   Started                  pod/mydb-postgresql-client                     Started container mydb-postgresql-client
3m23s       Normal   SuccessfulCreate         statefulset/mydb-postgresql                    create Claim data-mydb-postgresql-0 Pod mydb-postgresql-0 in StatefulSet mydb-postgresql success
3m23s       Normal   SuccessfulCreate         statefulset/mydb-postgresql                    create Pod mydb-postgresql-0 in StatefulSet mydb-postgresql successful

Deploying the application


Here we are using pgAdmin as a sample application, but you can use your own. You must create Kubernetes resources files or a Helm chart to deploy it. We will use a ready-made chart from runix/pgadmin4.


Before installing, we'll add the ingress config to the values.yaml file.


$ cat > values.yaml  <<EOF
## Ingress
## Ref: https://kubernetes.io/docs/concepts/services-networking/ingress/
ingress:
  enabled: true
  annotations:
    kubernetes.io/ingress.class: nginx
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
  hosts:
    - host: pgadmin.prahari.net
      paths:
        - path: /
          pathType: Prefix
  tls:
    - secretName: pgadmin-tls
      hosts:
        - pgadmin.prahari.net
EOF

Now let's install the application.


$ helm -n myapp install pgadmin4 pgadmin4 --repo https://helm.runix.net -f values.yaml 

NAME: pgadmin4
LAST DEPLOYED: Thu May 11 19:21:51 2023
NAMESPACE: myapp
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:
  https://pgadmin.prahari.net/

When I access the URL, I get the familiar pgAdmin login page.


pgadmin login screen

The default credentials are as provided in the docs (link) and are as follows -


Username: chart@domain.com

Password: SuperSecret


You should change them in the Helm values.yaml file before installing the application.

Upon login, I can add the connection to the Postgres DB we installed previously.


Click on the "Add New Server" button.

pgadmin add server screen

Add a name for the connection.



pgadmin add server general tab

Go to the "Connections" tab and fill in the details.

You can get the Hostname from the Kubernetes services.


$ kubectl -n myapp get svc
NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
mydb-postgresql      ClusterIP   10.100.224.197   <none>        5432/TCP   5h34m
mydb-postgresql-hl   ClusterIP   None             <none>        5432/TCP   5h34m
pgadmin4             ClusterIP   10.100.182.94    <none>        80/TCP     8m43s

The default username is postgres.

You can get the Password from Secrets.


$ kubectl get secret --namespace myapp mydb-postgresql -o jsonpath="{.data.postgres-password}" | base64 -d

pgadmin add server connection tab

Click on "Save" and your database should be accessible on the main screen.


pgadmin object explorer

Cleaning up


This all was great. Now let's clean up.

We will start with the Kubernetes resources.


$ helm -n myapp uninstall pgadmin4
release "pgadmin4" uninstalled
$ helm -n myapp uninstall mydb
release "mydb" uninstalled
$ kubectl delete ns myapp
namespace "myapp" deleted

Before deleting the cluster, we should delete all services of type ExternalIP or LoadBalancers.



$ kubectl get svc --all-namespaces
NAMESPACE       NAME                                 TYPE           CLUSTER-IP       EXTERNAL-IP                                                                     PORT(S)                      AGE
cert-manager    cert-manager                         ClusterIP      10.100.8.12      <none>                                                                          9402/TCP                     61m
cert-manager    cert-manager-webhook                 ClusterIP      10.100.133.140   <none>                                                                          443/TCP                      61m
default         kubernetes                           ClusterIP      10.100.0.1       <none>                                                                          443/TCP                      8h
ingress-nginx   ingress-nginx-controller             LoadBalancer   10.100.83.16     a6fd18cfa9b77453bbcfe3a1e64338de-132ae7f3fc184f00.elb.us-west-1.amazonaws.com   80:31026/TCP,443:31632/TCP   68m
ingress-nginx   ingress-nginx-controller-admission   ClusterIP      10.100.3.155     <none>                                                                          443/TCP                      68m
kube-system     kube-dns                             ClusterIP      10.100.0.10      <none>                                                                          53/UDP,53/TCP                8h

$ helm -n ingress-nginx uninstall ingress-nginx
release "ingress-nginx" uninstalled

$ kubectl get svc --all-namespaces
NAMESPACE      NAME                   TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
cert-manager   cert-manager           ClusterIP   10.100.8.12      <none>        9402/TCP        61m
cert-manager   cert-manager-webhook   ClusterIP   10.100.133.140   <none>        443/TCP         61m
default        kubernetes             ClusterIP   10.100.0.1       <none>        443/TCP         8h
kube-system    kube-dns               ClusterIP   10.100.0.10      <none>        53/UDP,53/TCP   8h

Now we can go ahead and delete the cluster.


$ eksctl delete cluster --name my-cluster
2023-05-11 19:57:54 [ℹ]  deleting EKS cluster "my-cluster"
2023-05-11 19:57:57 [ℹ]  will drain 0 unmanaged nodegroup(s) in cluster "my-cluster"
2023-05-11 19:57:57 [ℹ]  starting parallel draining, max in-flight of 1
2023-05-11 19:57:58 [ℹ]  deleted 0 Fargate profile(s)
2023-05-11 19:58:01 [✔]  kubeconfig has been updated
2023-05-11 19:58:01 [ℹ]  cleaning up AWS load balancers created by Kubernetes objects of Kind Service or Ingress
2023-05-11 19:58:07 [ℹ]  
3 sequential tasks: { delete nodegroup "ng-1427c099", 
    2 sequential sub-tasks: { 
        2 sequential sub-tasks: { 
            delete IAM role for serviceaccount "kube-system/ebs-csi-controller-sa",
            delete serviceaccount "kube-system/ebs-csi-controller-sa",
        },
        delete IAM OIDC provider,
    }, delete cluster control plane "my-cluster" [async] 
}
2023-05-11 19:58:07 [ℹ]  will delete stack "eksctl-my-cluster-nodegroup-ng-1427c099"
2023-05-11 19:58:07 [ℹ]  waiting for stack "eksctl-my-cluster-nodegroup-ng-1427c099" to get deleted
2023-05-11 19:58:08 [ℹ]  waiting for CloudFormation stack "eksctl-my-cluster-nodegroup-ng-1427c099"
2023-05-11 19:58:39 [ℹ]  waiting for CloudFormation stack "eksctl-my-cluster-nodegroup-ng-1427c099"
2023-05-11 19:59:22 [ℹ]  waiting for CloudFormation stack "eksctl-my-cluster-nodegroup-ng-1427c099"
2023-05-11 20:00:24 [ℹ]  waiting for CloudFormation stack "eksctl-my-cluster-nodegroup-ng-1427c099"
2023-05-11 20:01:25 [ℹ]  waiting for CloudFormation stack "eksctl-my-cluster-nodegroup-ng-1427c099"
2023-05-11 20:02:07 [ℹ]  waiting for CloudFormation stack "eksctl-my-cluster-nodegroup-ng-1427c099"
2023-05-11 20:03:05 [ℹ]  waiting for CloudFormation stack "eksctl-my-cluster-nodegroup-ng-1427c099"
2023-05-11 20:04:43 [ℹ]  waiting for CloudFormation stack "eksctl-my-cluster-nodegroup-ng-1427c099"
2023-05-11 20:05:17 [ℹ]  waiting for CloudFormation stack "eksctl-my-cluster-nodegroup-ng-1427c099"
2023-05-11 20:05:17 [ℹ]  will delete stack "eksctl-my-cluster-addon-iamserviceaccount-kube-system-ebs-csi-controller-sa"
2023-05-11 20:05:17 [ℹ]  waiting for stack "eksctl-my-cluster-addon-iamserviceaccount-kube-system-ebs-csi-controller-sa" to get deleted
2023-05-11 20:05:17 [ℹ]  waiting for CloudFormation stack "eksctl-my-cluster-addon-iamserviceaccount-kube-system-ebs-csi-controller-sa"
2023-05-11 20:05:49 [ℹ]  waiting for CloudFormation stack "eksctl-my-cluster-addon-iamserviceaccount-kube-system-ebs-csi-controller-sa"
2023-05-11 20:05:50 [ℹ]  deleted serviceaccount "kube-system/ebs-csi-controller-sa"
2023-05-11 20:05:53 [ℹ]  will delete stack "eksctl-my-cluster-cluster"
2023-05-11 20:05:54 [✔]  all cluster resources were deleted

This concludes our blog post. I hope this was helpful.

Please share this post with all your friends.

Do let me know if you want me to cover any specific topic.


If you have any queries, you can reach out to me at:

Linkedin: https://www.linkedin.com/in/ashishdisawal/

Recent Posts

See All

Comments


bottom of page