Tools: EKS-node-viewer: See Your EKS Costs in Real-Time (No Dashboard Needed)

Tools: EKS-node-viewer: See Your EKS Costs in Real-Time (No Dashboard Needed)

๐Ÿ”ฅ Meet eks-node-viewer ## ๐ŸŽฏ When I Use It ## ๐Ÿš€ Let's Build a Demo ## Step 1: Create EKS Cluster ## Create Cluster Config ## Create the Cluster ## Step 2: Install eks-node-viewer ## Option 1: Using Go (Recommended) ## Option 2: Using Homebrew (Mac) ## Option 3: Download Binary ## Verify Installation ## Step 3: Connect to Cluster ## Step 4: Run eks-node-viewer (Baseline) ## Step 5: Deploy Nginx (Watch Costs Update) ## Step 6: Deploy CPU-Intensive App ## Step 7: Scale Up (Watch Node Get Packed) ## Step 8: Check Pod Distribution ## Step 9: Cleanup (Watch Resources Free Up) ## ๐ŸŽฏ Real-World Use Cases ## Use Case 1: "Why is my bill so high?" ## Use Case 2: "Pods are pending" ## Use Case 3: "Is Karpenter working?" ## Use Case 4: "On-Demand vs Spot Cost Comparison" ## ๐Ÿงน Cleanup ## ๐ŸŽฏ Key Takeaways ## What eks-node-viewer Shows You ## When to Use It ## Why It's Better Than Alternatives ## ๐Ÿš€ Try It Yourself ## ๐Ÿ“š Resources ## ๐Ÿ’ฌ Final Thoughts ## AWS #EKS #Kubernetes #Karpenter #DevOps #CloudCost #CostOptimization #eks-node-viewer A tiny CLI tool from AWS Labs. Built originally for Karpenter demos. Now open source. And honestly, underrated. Real-time. In your terminal. No dashboard hopping. No Grafana. No console tab-switching. I use eks-node-viewer when: If you run multiple clusters (or even one busy prod cluster), this is a ridiculously fast way to understand what's happening. I'll show you exactly how to use eks-node-viewer with a real EKS cluster. First, we need an EKS cluster. I'm using eksctl because it's the fastest way. While it's creating, let's install eks-node-viewer. Once your cluster is ready, update your kubeconfig: Now for the magic. Run eks-node-viewer: Let's break this down: ๐Ÿ“ธ Screenshot this! This is your baseline. Keep eks-node-viewer running in Terminal 1. Open a NEW terminal (Terminal 2) and deploy nginx: Switch back to Terminal 1 (eks-node-viewer). You'll see it update in real-time: Let's stress the CPU and watch it happen live: In eks-node-viewer (Terminal 1): This is the key insight: You can see your node is now 80% utilized. If you add more workloads, you'll need another node (and another $30/month). Let's push it further: Real-world insight: If you were using Karpenter, it would see this 95% CPU usage and provision a new node. You'd see a second line appear in eks-node-viewer with another $30/month cost. In eks-node-viewer, you can see exactly how pods are distributed: This is useful for understanding if you're hitting pod limits (which can happen before CPU/memory limits). Let's clean up and watch the resources free up in real-time: Before eks-node-viewer: With eks-node-viewer: Instant insight: You're paying $303/month for 10 nodes that are only 10% utilized. You could consolidate to 2-3 nodes and save $200/month. Time saved: 15 minutes โ†’ 30 seconds Scenario: You deploy a new app and pods are stuck in Pending state. Check eks-node-viewer: Instant insight: Nodes are at 98% CPU and 113% memory (overcommitted). You need more nodes. Solution: Scale up or let Karpenter add nodes. Scenario: You installed Karpenter but you're not sure if it's actually consolidating nodes. Terminal 1: Run eks-node-viewer Terminal 2: Scale down workload Watch eks-node-viewer: If nodes DON'T disappear: Karpenter isn't working. Check your NodePool configuration. Filter by capacity type: Instant insight: Same workload, same utilization, but Spot is 70% cheaper ($151 vs $45). When you're done with the demo: โœ… Real-time cost - Per hour and per month โœ… Instance types - t3.medium, c6a.2xlarge, etc. โœ… Capacity type - On-Demand vs Spot โœ… Resource usage - CPU, Memory, Pods โœ… Utilization bars - Visual representation โœ… Pod distribution - How many pods per node โœ… Cost visibility - Quick cost checks โœ… Capacity planning - Before deploying new apps โœ… Debugging - Why are pods pending? โœ… Karpenter monitoring - Is consolidation working? โœ… Optimization - Finding underutilized nodes โœ… No setup - Just install and run โœ… No dashboard - Works in terminal โœ… Real-time - Updates as things change โœ… Cost-aware - Shows pricing automatically โœ… Fast - Answer questions in seconds 5-minute quick start: That's it. You'll get it immediately. eks-node-viewer is one of those tools that seems simple but becomes indispensable once you start using it. Before: Checking costs meant opening 5 tabs, clicking through dashboards, and doing mental math. After: One command. Instant visibility. Make decisions in seconds. If you run EKS (especially with Karpenter), try this once. You'll understand why it's underrated. Have you used eks-node-viewer? What's your favorite use case? Let me know in the comments! ๐Ÿ‘‡ Happy Learning Prithiviraj Rengarajan DevOps Engineer Templates let you quickly answer FAQs or store snippets for re-use. Are you sure you want to ? It will become hidden in your post, but will still be visible via the comment's permalink. as well , this person and/or CODE_BLOCK: eks-node-viewer --resources cpu,memory CODE_BLOCK: eks-node-viewer --resources cpu,memory CODE_BLOCK: eks-node-viewer --resources cpu,memory COMMAND_BLOCK: cat > eks-node-viewer-cluster.yaml << 'EOF' apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: eks-node-viewer-demo region: us-east-1 version: "1.31" managedNodeGroups: - name: demo-nodes instanceType: t3.medium minSize: 1 maxSize: 1 desiredCapacity: 1 volumeSize: 20 labels: role: demo tags: Environment: demo Tool: eks-node-viewer EOF COMMAND_BLOCK: cat > eks-node-viewer-cluster.yaml << 'EOF' apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: eks-node-viewer-demo region: us-east-1 version: "1.31" managedNodeGroups: - name: demo-nodes instanceType: t3.medium minSize: 1 maxSize: 1 desiredCapacity: 1 volumeSize: 20 labels: role: demo tags: Environment: demo Tool: eks-node-viewer EOF COMMAND_BLOCK: cat > eks-node-viewer-cluster.yaml << 'EOF' apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: eks-node-viewer-demo region: us-east-1 version: "1.31" managedNodeGroups: - name: demo-nodes instanceType: t3.medium minSize: 1 maxSize: 1 desiredCapacity: 1 volumeSize: 20 labels: role: demo tags: Environment: demo Tool: eks-node-viewer EOF CODE_BLOCK: eksctl create cluster -f eks-node-viewer-cluster.yaml CODE_BLOCK: eksctl create cluster -f eks-node-viewer-cluster.yaml CODE_BLOCK: eksctl create cluster -f eks-node-viewer-cluster.yaml CODE_BLOCK: go install github.com/awslabs/eks-node-viewer/cmd/eks-node-viewer@latest CODE_BLOCK: go install github.com/awslabs/eks-node-viewer/cmd/eks-node-viewer@latest CODE_BLOCK: go install github.com/awslabs/eks-node-viewer/cmd/eks-node-viewer@latest CODE_BLOCK: brew tap aws/tap brew install eks-node-viewer CODE_BLOCK: brew tap aws/tap brew install eks-node-viewer CODE_BLOCK: brew tap aws/tap brew install eks-node-viewer COMMAND_BLOCK: # Download latest release curl -LO https://github.com/awslabs/eks-node-viewer/releases/latest/download/eks-node-viewer_$(uname -s)_$(uname -m).tar.gz # Extract tar -xzf eks-node-viewer_*.tar.gz # Move to PATH sudo mv eks-node-viewer /usr/local/bin/ sudo chmod +x /usr/local/bin/eks-node-viewer COMMAND_BLOCK: # Download latest release curl -LO https://github.com/awslabs/eks-node-viewer/releases/latest/download/eks-node-viewer_$(uname -s)_$(uname -m).tar.gz # Extract tar -xzf eks-node-viewer_*.tar.gz # Move to PATH sudo mv eks-node-viewer /usr/local/bin/ sudo chmod +x /usr/local/bin/eks-node-viewer COMMAND_BLOCK: # Download latest release curl -LO https://github.com/awslabs/eks-node-viewer/releases/latest/download/eks-node-viewer_$(uname -s)_$(uname -m).tar.gz # Extract tar -xzf eks-node-viewer_*.tar.gz # Move to PATH sudo mv eks-node-viewer /usr/local/bin/ sudo chmod +x /usr/local/bin/eks-node-viewer COMMAND_BLOCK: eks-node-viewer --version # Output: eks-node-viewer version v0.7.4 COMMAND_BLOCK: eks-node-viewer --version # Output: eks-node-viewer version v0.7.4 COMMAND_BLOCK: eks-node-viewer --version # Output: eks-node-viewer version v0.7.4 COMMAND_BLOCK: # List clusters aws eks list-clusters --region us-east-1 # Update kubeconfig aws eks update-kubeconfig --name eks-node-viewer-demo --region us-east-1 # Verify connection kubectl get nodes COMMAND_BLOCK: # List clusters aws eks list-clusters --region us-east-1 # Update kubeconfig aws eks update-kubeconfig --name eks-node-viewer-demo --region us-east-1 # Verify connection kubectl get nodes COMMAND_BLOCK: # List clusters aws eks list-clusters --region us-east-1 # Update kubeconfig aws eks update-kubeconfig --name eks-node-viewer-demo --region us-east-1 # Verify connection kubectl get nodes COMMAND_BLOCK: NAME STATUS ROLES AGE VERSION ip-192-168-13-156.ec2.internal Ready <none> 2m v1.31.14-eks-70ce843 COMMAND_BLOCK: NAME STATUS ROLES AGE VERSION ip-192-168-13-156.ec2.internal Ready <none> 2m v1.31.14-eks-70ce843 COMMAND_BLOCK: NAME STATUS ROLES AGE VERSION ip-192-168-13-156.ec2.internal Ready <none> 2m v1.31.14-eks-70ce843 COMMAND_BLOCK: # Set AWS region (important!) export AWS_REGION=us-east-1 # Run eks-node-viewer eks-node-viewer --resources cpu,memory COMMAND_BLOCK: # Set AWS region (important!) export AWS_REGION=us-east-1 # Run eks-node-viewer eks-node-viewer --resources cpu,memory COMMAND_BLOCK: # Set AWS region (important!) export AWS_REGION=us-east-1 # Run eks-node-viewer eks-node-viewer --resources cpu,memory CODE_BLOCK: 1 nodes (550m/1930m) 28.5% cpu โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ $0.042/hour | $30.368/month 540Mi/3376720Ki 16.4% memory โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 6 pods (0 pending 6 running 6 bound) CODE_BLOCK: 1 nodes (550m/1930m) 28.5% cpu โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ $0.042/hour | $30.368/month 540Mi/3376720Ki 16.4% memory โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 6 pods (0 pending 6 running 6 bound) CODE_BLOCK: 1 nodes (550m/1930m) 28.5% cpu โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ $0.042/hour | $30.368/month 540Mi/3376720Ki 16.4% memory โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 6 pods (0 pending 6 running 6 bound) COMMAND_BLOCK: # Set region export AWS_REGION=us-east-1 # Deploy nginx with 5 replicas kubectl create deployment nginx --image=nginx --replicas=5 # Check deployment kubectl get deployments kubectl get pods COMMAND_BLOCK: # Set region export AWS_REGION=us-east-1 # Deploy nginx with 5 replicas kubectl create deployment nginx --image=nginx --replicas=5 # Check deployment kubectl get deployments kubectl get pods COMMAND_BLOCK: # Set region export AWS_REGION=us-east-1 # Deploy nginx with 5 replicas kubectl create deployment nginx --image=nginx --replicas=5 # Check deployment kubectl get deployments kubectl get pods CODE_BLOCK: NAME READY UP-TO-DATE AVAILABLE AGE nginx 5/5 5 5 30s CODE_BLOCK: NAME READY UP-TO-DATE AVAILABLE AGE nginx 5/5 5 5 30s CODE_BLOCK: NAME READY UP-TO-DATE AVAILABLE AGE nginx 5/5 5 5 30s CODE_BLOCK: 1 nodes (750m/1930m) 38.9% cpu โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ $0.042/hour | $30.368/month 840Mi/3376720Ki 25.5% memory โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 11 pods (0 pending 11 running 11 bound) CODE_BLOCK: 1 nodes (750m/1930m) 38.9% cpu โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ $0.042/hour | $30.368/month 840Mi/3376720Ki 25.5% memory โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 11 pods (0 pending 11 running 11 bound) CODE_BLOCK: 1 nodes (750m/1930m) 38.9% cpu โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ $0.042/hour | $30.368/month 840Mi/3376720Ki 25.5% memory โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 11 pods (0 pending 11 running 11 bound) COMMAND_BLOCK: # Deploy stress test (Terminal 2) kubectl create deployment stress --image=polinux/stress \ --replicas=3 -- stress --cpu 1 --timeout 3600s # Check pods kubectl get pods | grep stress COMMAND_BLOCK: # Deploy stress test (Terminal 2) kubectl create deployment stress --image=polinux/stress \ --replicas=3 -- stress --cpu 1 --timeout 3600s # Check pods kubectl get pods | grep stress COMMAND_BLOCK: # Deploy stress test (Terminal 2) kubectl create deployment stress --image=polinux/stress \ --replicas=3 -- stress --cpu 1 --timeout 3600s # Check pods kubectl get pods | grep stress CODE_BLOCK: 1 nodes (1550m/1930m) 80.3% cpu โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ $0.042/hour | $30.368/month 1140Mi/3376720Ki 34.6% memory โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 14 pods (0 pending 14 running 14 bound) CODE_BLOCK: 1 nodes (1550m/1930m) 80.3% cpu โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ $0.042/hour | $30.368/month 1140Mi/3376720Ki 34.6% memory โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 14 pods (0 pending 14 running 14 bound) CODE_BLOCK: 1 nodes (1550m/1930m) 80.3% cpu โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ $0.042/hour | $30.368/month 1140Mi/3376720Ki 34.6% memory โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 14 pods (0 pending 14 running 14 bound) COMMAND_BLOCK: # Scale nginx to 20 replicas (Terminal 2) kubectl scale deployment nginx --replicas=20 # Watch pods kubectl get pods | grep nginx | wc -l COMMAND_BLOCK: # Scale nginx to 20 replicas (Terminal 2) kubectl scale deployment nginx --replicas=20 # Watch pods kubectl get pods | grep nginx | wc -l COMMAND_BLOCK: # Scale nginx to 20 replicas (Terminal 2) kubectl scale deployment nginx --replicas=20 # Watch pods kubectl get pods | grep nginx | wc -l CODE_BLOCK: 1 nodes (1850m/1930m) 95.9% cpu โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ $0.042/hour | $30.368/month 1640Mi/3376720Ki 49.8% memory โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 29 pods (0 pending 29 running 29 bound) CODE_BLOCK: 1 nodes (1850m/1930m) 95.9% cpu โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ $0.042/hour | $30.368/month 1640Mi/3376720Ki 49.8% memory โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 29 pods (0 pending 29 running 29 bound) CODE_BLOCK: 1 nodes (1850m/1930m) 95.9% cpu โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ $0.042/hour | $30.368/month 1640Mi/3376720Ki 49.8% memory โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 29 pods (0 pending 29 running 29 bound) COMMAND_BLOCK: # Run with pods resource eks-node-viewer --resources cpu,memory,pods COMMAND_BLOCK: # Run with pods resource eks-node-viewer --resources cpu,memory,pods COMMAND_BLOCK: # Run with pods resource eks-node-viewer --resources cpu,memory,pods CODE_BLOCK: 1 nodes (1850m/1930m) 95.9% cpu โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ $0.042/hour | $30.368/month 1640Mi/3376720Ki 49.8% memory โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 29/110 pods 26.4% pods โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 29 pods (0 pending 29 running 29 bound) CODE_BLOCK: 1 nodes (1850m/1930m) 95.9% cpu โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ $0.042/hour | $30.368/month 1640Mi/3376720Ki 49.8% memory โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 29/110 pods 26.4% pods โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 29 pods (0 pending 29 running 29 bound) CODE_BLOCK: 1 nodes (1850m/1930m) 95.9% cpu โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ $0.042/hour | $30.368/month 1640Mi/3376720Ki 49.8% memory โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 29/110 pods 26.4% pods โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 29 pods (0 pending 29 running 29 bound) COMMAND_BLOCK: # Delete deployments (Terminal 2) kubectl delete deployment nginx stress # Watch pods terminating kubectl get pods COMMAND_BLOCK: # Delete deployments (Terminal 2) kubectl delete deployment nginx stress # Watch pods terminating kubectl get pods COMMAND_BLOCK: # Delete deployments (Terminal 2) kubectl delete deployment nginx stress # Watch pods terminating kubectl get pods CODE_BLOCK: 1 nodes (550m/1930m) 28.5% cpu โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ $0.042/hour | $30.368/month 540Mi/3376720Ki 16.4% memory โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 6 pods (0 pending 6 running 6 bound) CODE_BLOCK: 1 nodes (550m/1930m) 28.5% cpu โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ $0.042/hour | $30.368/month 540Mi/3376720Ki 16.4% memory โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 6 pods (0 pending 6 running 6 bound) CODE_BLOCK: 1 nodes (550m/1930m) 28.5% cpu โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ $0.042/hour | $30.368/month 540Mi/3376720Ki 16.4% memory โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 6 pods (0 pending 6 running 6 bound) CODE_BLOCK: eks-node-viewer --resources cpu,memory CODE_BLOCK: eks-node-viewer --resources cpu,memory CODE_BLOCK: eks-node-viewer --resources cpu,memory CODE_BLOCK: 10 nodes (2000m/19300m) 10.4% cpu โ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ $0.416/hour | $303.68/month 5400Mi/33767200Ki 16.4% memory โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 60 pods (0 pending 60 running 60 bound) CODE_BLOCK: 10 nodes (2000m/19300m) 10.4% cpu โ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ $0.416/hour | $303.68/month 5400Mi/33767200Ki 16.4% memory โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 60 pods (0 pending 60 running 60 bound) CODE_BLOCK: 10 nodes (2000m/19300m) 10.4% cpu โ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ $0.416/hour | $303.68/month 5400Mi/33767200Ki 16.4% memory โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 60 pods (0 pending 60 running 60 bound) COMMAND_BLOCK: kubectl get pods # NAME READY STATUS RESTARTS AGE # my-app-7d8f9c5b-xk2lp 0/1 Pending 0 2m COMMAND_BLOCK: kubectl get pods # NAME READY STATUS RESTARTS AGE # my-app-7d8f9c5b-xk2lp 0/1 Pending 0 2m COMMAND_BLOCK: kubectl get pods # NAME READY STATUS RESTARTS AGE # my-app-7d8f9c5b-xk2lp 0/1 Pending 0 2m CODE_BLOCK: 3 nodes (5700m/5790m) 98.4% cpu โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ $0.126/hour | $91.10/month 11200Mi/10130160Ki 113.2% memory โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ 85 pods (5 pending 80 running 80 bound) CODE_BLOCK: 3 nodes (5700m/5790m) 98.4% cpu โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ $0.126/hour | $91.10/month 11200Mi/10130160Ki 113.2% memory โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ 85 pods (5 pending 80 running 80 bound) CODE_BLOCK: 3 nodes (5700m/5790m) 98.4% cpu โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ $0.126/hour | $91.10/month 11200Mi/10130160Ki 113.2% memory โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ 85 pods (5 pending 80 running 80 bound) CODE_BLOCK: eks-node-viewer --resources cpu,memory CODE_BLOCK: eks-node-viewer --resources cpu,memory CODE_BLOCK: eks-node-viewer --resources cpu,memory COMMAND_BLOCK: kubectl scale deployment my-app --replicas=2 COMMAND_BLOCK: kubectl scale deployment my-app --replicas=2 COMMAND_BLOCK: kubectl scale deployment my-app --replicas=2 COMMAND_BLOCK: # Show only On-Demand nodes eks-node-viewer --node-selector karpenter.sh/capacity-type=on-demand # Show only Spot nodes eks-node-viewer --node-selector karpenter.sh/capacity-type=spot COMMAND_BLOCK: # Show only On-Demand nodes eks-node-viewer --node-selector karpenter.sh/capacity-type=on-demand # Show only Spot nodes eks-node-viewer --node-selector karpenter.sh/capacity-type=spot COMMAND_BLOCK: # Show only On-Demand nodes eks-node-viewer --node-selector karpenter.sh/capacity-type=on-demand # Show only Spot nodes eks-node-viewer --node-selector karpenter.sh/capacity-type=spot CODE_BLOCK: 5 nodes (5000m/9650m) 51.8% cpu โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ $0.208/hour | $151.84/month CODE_BLOCK: 5 nodes (5000m/9650m) 51.8% cpu โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ $0.208/hour | $151.84/month CODE_BLOCK: 5 nodes (5000m/9650m) 51.8% cpu โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ $0.208/hour | $151.84/month CODE_BLOCK: 5 nodes (5000m/9650m) 51.8% cpu โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ $0.062/hour | $45.26/month CODE_BLOCK: 5 nodes (5000m/9650m) 51.8% cpu โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ $0.062/hour | $45.26/month CODE_BLOCK: 5 nodes (5000m/9650m) 51.8% cpu โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ $0.062/hour | $45.26/month COMMAND_BLOCK: # Delete deployments kubectl delete deployment nginx stress # Delete cluster eksctl delete cluster --name eks-node-viewer-demo --region us-east-1 # Verify deletion aws eks list-clusters --region us-east-1 COMMAND_BLOCK: # Delete deployments kubectl delete deployment nginx stress # Delete cluster eksctl delete cluster --name eks-node-viewer-demo --region us-east-1 # Verify deletion aws eks list-clusters --region us-east-1 COMMAND_BLOCK: # Delete deployments kubectl delete deployment nginx stress # Delete cluster eksctl delete cluster --name eks-node-viewer-demo --region us-east-1 # Verify deletion aws eks list-clusters --region us-east-1 COMMAND_BLOCK: # 1. Install go install github.com/awslabs/eks-node-viewer/cmd/eks-node-viewer@latest # 2. Set region export AWS_REGION=us-east-1 # 3. Run eks-node-viewer --resources cpu,memory # 4. Deploy something kubectl create deployment nginx --image=nginx --replicas=10 # 5. Watch it update! COMMAND_BLOCK: # 1. Install go install github.com/awslabs/eks-node-viewer/cmd/eks-node-viewer@latest # 2. Set region export AWS_REGION=us-east-1 # 3. Run eks-node-viewer --resources cpu,memory # 4. Deploy something kubectl create deployment nginx --image=nginx --replicas=10 # 5. Watch it update! COMMAND_BLOCK: # 1. Install go install github.com/awslabs/eks-node-viewer/cmd/eks-node-viewer@latest # 2. Set region export AWS_REGION=us-east-1 # 3. Run eks-node-viewer --resources cpu,memory # 4. Deploy something kubectl create deployment nginx --image=nginx --replicas=10 # 5. Watch it update! - Every node in your cluster - CPU + Memory usage (based on pod requests) - Instance type (t3.medium, c6a.2xlarge...) - On-Demand vs Spot - Cost per hour AND per month - Pods per node - โœ… Debugging uneven pod scheduling across nodes - โœ… Checking if Karpenter consolidation is actually working - โœ… Quick cost sanity check before a prod deploy - โœ… Spotting nodes that are packed too tight (or wasting capacity) - โœ… Answering "why is my bill so high?" in 30 seconds - Create an EKS cluster (1 node) - Install eks-node-viewer - Deploy workloads - Watch costs in real-time - See Karpenter-style scaling (optional) - 1 nodes - You have 1 node (t3.medium) - 550m/1930m - Using 550 millicores out of 1930m available (28.5%) - 540Mi/3376720Ki - Using 540MB out of 3.3GB RAM (16.4%) - $0.042/hour | $30.368/month - This is costing you $30/month - 6 pods - System pods (coredns, kube-proxy, aws-node, metrics-server) - CPU usage: 28.5% โ†’ 38.9% - Memory usage: 16.4% โ†’ 25.5% - Pods: 6 โ†’ 11 (added 5 nginx pods) - Cost: Still $30/month (same node) - CPU usage: 38.9% โ†’ 80.3% ๐Ÿ”ฅ - Memory usage: 25.5% โ†’ 34.6% - Pods: 11 โ†’ 14 (added 3 stress pods) - Cost: Still $30/month (same node, but now heavily utilized) - CPU usage: 80.3% โ†’ 95.9% ๐Ÿšจ - Memory usage: 34.6% โ†’ 49.8% - Pods: 14 โ†’ 29 (added 15 more nginx pods) - Node is almost maxed out! - 29/110 pods - You have 29 pods running, max capacity is 110 pods per node - 26.4% pods - You're using 26% of pod capacity - CPU: 95.9% โ†’ 28.5% - Memory: 49.8% โ†’ 16.4% - Pods: 29 โ†’ 6 - Cost: Still $30/month (node still exists) - Open AWS Console - Go to EC2 โ†’ Instances - Filter by cluster - Manually check instance types - Look up pricing - Calculate total - Check utilization in Grafana - Realize you have 10 nodes at 20% utilization ๐Ÿ˜ฑ - After 30 seconds (Karpenter's default consolidation delay) - You should see nodes disappear - Cost should decrease - GitHub: https://github.com/awslabs/eks-node-viewer - Karpenter Docs: https://karpenter.sh - EKS Best Practices: https://aws.github.io/aws-eks-best-practices/ - AWS Pricing: https://aws.amazon.com/ec2/pricing/