Verify Kubernetes cluster health, resource availability, and readiness before deploying applications
Install
npx skillscat add asadullah48/hackathon-superpowers/kubernetes-health-check Install via the SkillsCat registry.
SKILL.md
Kubernetes Health Check
Purpose
Perform comprehensive health checks on Kubernetes clusters to ensure readiness for application deployments. Validates cluster connectivity, resource availability, and essential components.
Prerequisites
- kubectl installed and configured
- Access to Kubernetes cluster (Minikube, cloud cluster, etc.)
- Sufficient permissions to query cluster resources
Instructions
Step 1: Verify Cluster Connectivity
Check if kubectl can connect to the cluster:
# Check cluster info
kubectl cluster-info
# Verify current context
kubectl config current-context
# List all nodes
kubectl get nodesExpected Results:
- Cluster-info shows running control plane
- At least one node in
Readystate - No connection errors
Step 2: Check Node Resources
Verify sufficient resources are available:
# Get detailed node information
kubectl describe nodes
# Check resource usage (requires metrics-server)
kubectl top nodesMinimum Requirements:
- CPU: >2 cores available
- Memory: >4GB available
- Disk: >20GB available
- Status: All nodes
Ready
Step 3: Verify System Components
Ensure essential Kubernetes components are running:
# Check system pods
kubectl get pods -n kube-system
# Check critical components
kubectl get pods -n kube-system | grep -E 'coredns|etcd|kube-apiserver|kube-controller|kube-scheduler'All pods should be:
- Status:
Running - Restarts: <3 (some restarts normal during startup)
- Ready: All containers ready (e.g., 1/1, 2/2)
Step 4: Validate Storage
Verify storage classes are available:
# List storage classes
kubectl get storageclass
# Check for default storage class
kubectl get storageclass -o json | jq -r '.items[] | select(.metadata.annotations."storageclass.kubernetes.io/is-default-class"=="true") | .metadata.name'Requirements:
- At least one storage class exists
- One marked as
(default)
Step 5: Test Networking
Validate cluster networking:
# Check kube-proxy
kubectl get pods -n kube-system | grep kube-proxy
# Verify DNS resolution
kubectl run -it --rm debug --image=busybox --restart=Never -- nslookup kubernetes.default
# Check CNI plugin
kubectl get pods -n kube-system | grep -E 'calico|flannel|weave|cilium'Networking is healthy when:
- kube-proxy pods running
- DNS lookups succeed
- CNI plugin pods running
Validation
Pre-deployment checks passed when:
- kubectl connects successfully
- All nodes are Ready
- System pods running (coredns, etcd, kube-apiserver)
- Default storage class exists
- DNS resolution works
- Resources meet requirements (2 CPU, 4GB RAM)
Troubleshooting
Problem: Cannot connect to cluster
kubectl config get-contexts
kubectl config use-context <correct-context>
# For Minikube
minikube status
minikube startProblem: Nodes NotReady
kubectl describe node <node-name>
# Restart Minikube with more resources
minikube stop
minikube start --cpus=4 --memory=8192Best Practices
- Always Check First: Run health checks before any deployment
- Save Reports: Keep health reports for troubleshooting
- Automate: Add to CI/CD pipelines
- Monitor Trends: Track resource usage over time
- Document Baseline: Know what "healthy" looks like