
K8s Autoscaling
- 11 installs
- 941 repo stars
- Updated April 8, 2026
- rohitg00/kubectl-mcp-server
Helps with ai & agent building tasks during AI-assisted development.
About
k8s-autoscaling is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted coding.
- k8s-autoscaling
- AI & Agent Building
- AI-coding skill
K8s Autoscaling by the numbers
- 11 all-time installs (skills.sh)
- Ranked #11,769 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/rohitg00/kubectl-mcp-server --skill k8s-autoscalingAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 11 |
|---|---|
| repo stars | ★ 941 |
| Last updated | April 8, 2026 |
| Repository | rohitg00/kubectl-mcp-server ↗ |
What it does
Helps with ai & agent building tasks during AI-assisted development.
Files
Kubernetes Autoscaling
Comprehensive autoscaling using HPA, VPA, and KEDA with kubectl-mcp-server tools.
When to Apply
Use this skill when:
- User mentions: "HPA", "VPA", "KEDA", "autoscale", "scale to zero"
- Operations: configuring autoscaling, checking scaling status
- Keywords: "scale automatically", "event-driven", "right-size"
Priority Rules
| Priority | Rule | Impact | Tools |
|---|---|---|---|
| 1 | Verify metrics-server for HPA | CRITICAL | get_resource_metrics |
| 2 | Set resource requests before HPA | CRITICAL | describe_pod |
| 3 | Use KEDA for scale-to-zero | HIGH | keda_scaledobjects_list_tool |
| 4 | Check VPA recommendations | MEDIUM | get_resource_recommendations |
Quick Reference
| Task | Tool | Example |
|---|---|---|
| List KEDA ScaledObjects | keda_scaledobjects_list_tool | keda_scaledobjects_list_tool(namespace) |
| Get ScaledObject | keda_scaledobject_get_tool | keda_scaledobject_get_tool(name, namespace) |
| List ScaledJobs | keda_scaledjobs_list_tool | keda_scaledjobs_list_tool(namespace) |
| Check KEDA | keda_detect_tool | keda_detect_tool() |
HPA (Horizontal Pod Autoscaler)
Basic CPU-based scaling:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: my-app-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-app
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70Apply and verify:
kubectl_apply(hpa_yaml, namespace)
get_hpa(namespace)VPA (Vertical Pod Autoscaler)
Right-size resource requests:
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: my-app-vpa
spec:
targetRef:
apiVersion: apps/v1
kind: Deployment
name: my-app
updatePolicy:
updateMode: "Auto"KEDA (Event-Driven Autoscaling)
Detect KEDA Installation
keda_detect_tool()List ScaledObjects
keda_scaledobjects_list_tool(namespace)
keda_scaledobject_get_tool(name, namespace)List ScaledJobs
keda_scaledjobs_list_tool(namespace)Trigger Authentication
keda_triggerauths_list_tool(namespace)
keda_triggerauth_get_tool(name, namespace)KEDA-Managed HPAs
keda_hpa_list_tool(namespace)See KEDA-TRIGGERS.md for trigger configurations.
Common KEDA Triggers
Queue-Based Scaling (AWS SQS)
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: sqs-scaler
spec:
scaleTargetRef:
name: queue-processor
minReplicaCount: 0
maxReplicaCount: 100
triggers:
- type: aws-sqs-queue
metadata:
queueURL: https://sqs.region.amazonaws.com/...
queueLength: "5"Cron-Based Scaling
triggers:
- type: cron
metadata:
timezone: America/New_York
start: 0 8 * * 1-5
end: 0 18 * * 1-5
desiredReplicas: "10"Prometheus Metrics
triggers:
- type: prometheus
metadata:
serverAddress: http://prometheus:9090
metricName: http_requests_total
query: sum(rate(http_requests_total{app="myapp"}[2m]))
threshold: "100"Scaling Strategies
| Strategy | Tool | Use Case |
|---|---|---|
| CPU/Memory | HPA | Steady traffic patterns |
| Custom metrics | HPA v2 | Business metrics |
| Event-driven | KEDA | Queue processing, cron |
| Vertical | VPA | Right-size requests |
| Scale to zero | KEDA | Cost savings, idle workloads |
Cost-Optimized Autoscaling
Scale to Zero with KEDA
Reduce costs for idle workloads:
keda_scaledobjects_list_tool(namespace)Right-Size with VPA
Get recommendations and apply:
get_resource_recommendations(namespace)Troubleshooting
HPA Not Scaling
get_hpa(namespace)
get_pod_metrics(name, namespace)
describe_pod(name, namespace)KEDA Not Triggering
keda_scaledobject_get_tool(name, namespace)
get_events(namespace)Common Issues
| Symptom | Check | Resolution |
|---|---|---|
| HPA unknown | Metrics server | Install metrics-server |
| KEDA no scale | Trigger auth | Check TriggerAuthentication |
| VPA not updating | Update mode | Set updateMode: Auto |
| Scale down slow | Stabilization | Adjust stabilizationWindowSeconds |
Best Practices
1. Always Set Resource Requests - HPA requires requests to calculate utilization 2. Use Multiple Metrics - Combine CPU + custom metrics for accuracy 3. Stabilization Windows - Prevent flapping with scaleDown stabilization 4. Scale to Zero Carefully - Consider cold start time
Related Skills
- k8s-cost - Cost optimization
- k8s-troubleshoot - Debug scaling issues
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: app-hpa
namespace: default
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-app
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 80
behavior:
scaleDown:
stabilizationWindowSeconds: 300
policies:
- type: Percent
value: 10
periodSeconds: 60
scaleUp:
stabilizationWindowSeconds: 0
policies:
- type: Percent
value: 100
periodSeconds: 15
- type: Pods
value: 4
periodSeconds: 15
selectPolicy: Max
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: app-scaledobject
namespace: default
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-app
pollingInterval: 30
cooldownPeriod: 300
minReplicaCount: 1
maxReplicaCount: 20
triggers:
- type: prometheus
metadata:
serverAddress: http://prometheus.monitoring:9090
metricName: http_requests_total
threshold: "100"
query: sum(rate(http_requests_total{deployment="my-app"}[2m]))
authenticationRef:
name: prometheus-auth
- type: cpu
metricType: Utilization
metadata:
value: "70"
advanced:
horizontalPodAutoscalerConfig:
behavior:
scaleDown:
stabilizationWindowSeconds: 300
policies:
- type: Percent
value: 10
periodSeconds: 60
scaleUp:
stabilizationWindowSeconds: 0
policies:
- type: Percent
value: 100
periodSeconds: 15
---
apiVersion: keda.sh/v1alpha1
kind: TriggerAuthentication
metadata:
name: prometheus-auth
namespace: default
spec:
secretTargetRef:
- parameter: bearerToken
name: prometheus-secret
key: token
KEDA Trigger Reference
Common KEDA trigger configurations.
Queue-Based Triggers
AWS SQS
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: sqs-scaler
spec:
scaleTargetRef:
name: queue-processor
minReplicaCount: 0
maxReplicaCount: 100
triggers:
- type: aws-sqs-queue
metadata:
queueURL: https://sqs.region.amazonaws.com/123456789/my-queue
queueLength: "5" # Scale when > 5 messages per pod
awsRegion: us-east-1
authenticationRef:
name: aws-credentialsRabbitMQ
triggers:
- type: rabbitmq
metadata:
protocol: amqp
queueName: my-queue
mode: QueueLength
value: "10"
host: amqp://user:pass@rabbitmq.default.svc:5672Azure Service Bus
triggers:
- type: azure-servicebus
metadata:
queueName: my-queue
messageCount: "5"
authenticationRef:
name: azure-sb-authKafka
triggers:
- type: kafka
metadata:
bootstrapServers: kafka:9092
consumerGroup: my-consumer
topic: my-topic
lagThreshold: "100"Metric-Based Triggers
Prometheus
triggers:
- type: prometheus
metadata:
serverAddress: http://prometheus:9090
metricName: http_requests_total
query: sum(rate(http_requests_total{app="myapp"}[2m]))
threshold: "100"Datadog
triggers:
- type: datadog
metadata:
query: avg:system.cpu.user{app:myapp}
queryValue: "80"
type: global
authenticationRef:
name: datadog-authSchedule-Based Triggers
Cron
triggers:
- type: cron
metadata:
timezone: America/New_York
start: 0 8 * * 1-5 # 8 AM Mon-Fri
end: 0 18 * * 1-5 # 6 PM Mon-Fri
desiredReplicas: "10"Multiple Schedules
triggers:
# Morning peak
- type: cron
metadata:
timezone: UTC
start: 0 8 * * *
end: 0 10 * * *
desiredReplicas: "20"
# Afternoon peak
- type: cron
metadata:
timezone: UTC
start: 0 14 * * *
end: 0 16 * * *
desiredReplicas: "15"HTTP-Based Triggers
HTTP Request Count
triggers:
- type: prometheus
metadata:
serverAddress: http://prometheus:9090
query: sum(rate(nginx_http_requests_total[1m]))
threshold: "1000"Database Triggers
PostgreSQL
triggers:
- type: postgresql
metadata:
connectionFromEnv: PG_CONNECTION
query: "SELECT COUNT(*) FROM pending_jobs WHERE status = 'pending'"
targetQueryValue: "10"MySQL
triggers:
- type: mysql
metadata:
connectionStringFromEnv: MYSQL_CONNECTION
query: "SELECT COUNT(*) FROM work_queue"
queryValue: "5"Authentication
TriggerAuthentication
apiVersion: keda.sh/v1alpha1
kind: TriggerAuthentication
metadata:
name: aws-credentials
spec:
secretTargetRef:
- parameter: awsAccessKeyID
name: aws-secrets
key: AWS_ACCESS_KEY_ID
- parameter: awsSecretAccessKey
name: aws-secrets
key: AWS_SECRET_ACCESS_KEYClusterTriggerAuthentication
For cluster-wide auth:
apiVersion: keda.sh/v1alpha1
kind: ClusterTriggerAuthentication
metadata:
name: aws-credentials-cluster
spec:
secretTargetRef:
- parameter: awsAccessKeyID
name: aws-secrets
key: AWS_ACCESS_KEY_ID
namespace: kedaAdvanced Configuration
Activation Threshold
Don't scale from 0 until threshold met:
spec:
minReplicaCount: 0
advanced:
horizontalPodAutoscalerConfig:
behavior:
scaleDown:
stabilizationWindowSeconds: 300
triggers:
- type: prometheus
metadata:
threshold: "100"
metricType: AverageValueCool Down Period
spec:
cooldownPeriod: 300 # Wait 5 min before scaling downPolling Interval
spec:
pollingInterval: 30 # Check every 30 secondsMCP Commands
# List ScaledObjects
keda_scaledobjects_list_tool(namespace)
# Get ScaledObject details
keda_scaledobject_get_tool(name, namespace)
# List TriggerAuthentications
keda_triggerauths_list_tool(namespace)
# Get TriggerAuthentication
keda_triggerauth_get_tool(name, namespace)
# List KEDA-managed HPAs
keda_hpa_list_tool(namespace)Troubleshooting
ScaledObject Not Scaling
keda_scaledobject_get_tool(name, namespace)
# Check status conditions
get_events(namespace)Common Issues:
- Invalid trigger configuration
- Authentication failure
- Metric not found
Metric Query Issues
# For Prometheus, test query manually:
# curl prometheus:9090/api/v1/query?query=<your-query>