Amazon EKS — Verify Cluster
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.