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)

Source: Dev.to

πŸ”₯ 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 hide this comment? It will become hidden in your post, but will still be visible via the comment's permalink. Hide child comments as well For further actions, you may consider blocking this person and/or reporting abuse CODE_BLOCK: eks-node-viewer --resources cpu,memory Enter fullscreen mode Exit fullscreen mode 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 Enter fullscreen mode Exit fullscreen mode 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 Enter fullscreen mode Exit fullscreen mode 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 Enter fullscreen mode Exit fullscreen mode 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 Enter fullscreen mode Exit fullscreen mode 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 Enter fullscreen mode Exit fullscreen mode 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 Enter fullscreen mode Exit fullscreen mode 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 Enter fullscreen mode Exit fullscreen mode 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 Enter fullscreen mode Exit fullscreen mode 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 Enter fullscreen mode Exit fullscreen mode 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) Enter fullscreen mode Exit fullscreen mode 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 Enter fullscreen mode Exit fullscreen mode 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 Enter fullscreen mode Exit fullscreen mode 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) Enter fullscreen mode Exit fullscreen mode 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 Enter fullscreen mode Exit fullscreen mode 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) Enter fullscreen mode Exit fullscreen mode 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 Enter fullscreen mode Exit fullscreen mode 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) Enter fullscreen mode Exit fullscreen mode 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 Enter fullscreen mode Exit fullscreen mode 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) Enter fullscreen mode Exit fullscreen mode 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 Enter fullscreen mode Exit fullscreen mode 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) Enter fullscreen mode Exit fullscreen mode 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 Enter fullscreen mode Exit fullscreen mode 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) Enter fullscreen mode Exit fullscreen mode 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 Enter fullscreen mode Exit fullscreen mode 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) Enter fullscreen mode Exit fullscreen mode 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 Enter fullscreen mode Exit fullscreen mode 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 Enter fullscreen mode Exit fullscreen mode 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 Enter fullscreen mode Exit fullscreen mode 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 Enter fullscreen mode Exit fullscreen mode 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 Enter fullscreen mode Exit fullscreen mode 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 Enter fullscreen mode Exit fullscreen mode 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! Enter fullscreen mode Exit fullscreen mode 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/