Amazon EKS — Verify Cluster

2 minute read

Verify Cluster

After creating your EKS cluster, run through this checklist to make sure everything is healthy before deploying workloads.


Verification Checklist

1. Cluster Status

$ aws eks describe-cluster --name demo --query 'cluster.{Status:status, Version:version, Endpoint:endpoint}' --output table
-----------------------------------------------------
|                  DescribeCluster                   |
+----------+----------------------------------------+
|  Status  |  ACTIVE                                |
|  Version |  1.29                                  |
|  Endpoint|  https://ABCDEF.gr7.us-east-1.eks...   |
+----------+----------------------------------------+

2. Nodes Ready

$ kubectl get nodes -o wide
NAME                              STATUS   ROLES    AGE   VERSION           INTERNAL-IP      EXTERNAL-IP   OS-IMAGE         KERNEL-VERSION
ip-192-168-75-112.ec2.internal   Ready    <none>   15m   v1.29.0-eks-...   192.168.75.112   <none>        Amazon Linux 2   5.10.205-195.807
ip-192-168-98-43.ec2.internal    Ready    <none>   15m   v1.29.0-eks-...   192.168.98.43    <none>        Amazon Linux 2   5.10.205-195.807

✅ All nodes should be Ready.

3. System Pods Running

$ kubectl get pods -n kube-system
NAME                       READY   STATUS    RESTARTS   AGE
aws-node-7xk2l             2/2     Running   0          15m
aws-node-9m3nb             2/2     Running   0          15m
coredns-5f97c4d8bb-abc12   1/1     Running   0          20m
coredns-5f97c4d8bb-def34   1/1     Running   0          20m
kube-proxy-abc12           1/1     Running   0          15m
kube-proxy-def34           1/1     Running   0          15m

✅ All pods should be Running with all containers ready.

What each pod does:

Pod Purpose
aws-node VPC CNI — assigns VPC IPs to pods
coredns DNS — resolves service names within cluster
kube-proxy Networking — manages iptables rules for Services

4. DNS Resolution

$ kubectl run dns-test --image=busybox:1.36 --rm -it --restart=Never -- nslookup kubernetes.default
Server:    10.100.0.10
Address 1: 10.100.0.10 kube-dns.kube-system.svc.cluster.local

Name:      kubernetes.default
Address 1: 10.100.0.1 kubernetes.default.svc.cluster.local

pod "dns-test" deleted

✅ DNS should resolve kubernetes.default successfully.

5. Node Resources

$ kubectl describe nodes | grep -A5 "Allocated resources"
Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  Resource           Requests    Limits
  --------           --------    ------
  cpu                380m (19%)  0 (0%)
  memory             280Mi (7%) 0 (0%)

Deploy a Test Application

# Create a test namespace
$ kubectl create namespace test

# Deploy nginx
$ kubectl -n test create deployment nginx --image=nginx:1.25 --replicas=2

# Wait for pods
$ kubectl -n test get pods -w
NAME                     READY   STATUS    RESTARTS   AGE
nginx-7854ff8877-abcde   1/1     Running   0          30s
nginx-7854ff8877-fghij   1/1     Running   0          30s

# Clean up
$ kubectl delete namespace test

Troubleshooting Common Issues

Issue Diagnostic Fix
Nodes not Ready kubectl describe node <name> Check security groups, IAM role
Pods stuck Pending kubectl describe pod <name> Not enough node resources
aws-node not running Check VPC CNI add-on eksctl utils update-addon
CoreDNS stuck kubectl logs -n kube-system <coredns-pod> Check security groups allow DNS

Quick Reference

# Full cluster health check
$ kubectl get nodes
$ kubectl get pods -n kube-system
$ kubectl get componentstatuses   # May show Unknown (normal for EKS)
$ kubectl cluster-info
$ kubectl get cs

What’s Next?

Cluster is verified and healthy! Before moving on, learn how to properly clean up: Cleanup Cluster.