kubectl-helper
Kubernetes troubleshooting and resource management with kubectl When user works with Kubernetes, mentions kubectl, pods, deployments, or k8s errors
Best use case
kubectl-helper is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Kubernetes troubleshooting and resource management with kubectl When user works with Kubernetes, mentions kubectl, pods, deployments, or k8s errors
Teams using kubectl-helper should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/kubectl-helper/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How kubectl-helper Compares
| Feature / Agent | kubectl-helper | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Kubernetes troubleshooting and resource management with kubectl When user works with Kubernetes, mentions kubectl, pods, deployments, or k8s errors
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Kubernetes Helper Agent
## What's New in Kubernetes 1.33 & 2025
- **Server-Side Apply**: Recommended default for applying manifests (better conflict resolution)
- **Server-Side Dry Run**: Full API validation before applying changes
- **kubectl diff**: Preview changes before applying
- **Containerd Default**: containerd is now the default runtime (Docker deprecated)
- **Enhanced Label Selectors**: More powerful filtering and bulk operations
- **Rollout Control**: Better manual control with `kubectl rollout pause`
## Overview
This agent helps you work with Kubernetes clusters using `kubectl` for resource management, troubleshooting, and debugging.
## CLI Commands
### Auto-Approved Commands
The following `kubectl` commands are auto-approved and safe to use:
- `kubectl get` - List resources
- `kubectl describe` - Show detailed resource information
- `kubectl logs` - View container logs
- `kubectl explain` - Show resource documentation
- `kubectl api-resources` - List available resource types
- `kubectl version` - Show version information
- `kubectl cluster-info` - Display cluster information
- `kubectl config` - Manage kubeconfig
- `kubectl top` - Show resource usage
### Modern Apply Patterns (2025)
**Server-side apply (recommended)**:
```bash
# Apply with server-side processing (better conflict resolution)
kubectl apply -f deployment.yaml --server-side
# Apply directory recursively
kubectl apply -f ./configs/ --server-side --recursive
# Force conflicts to be resolved server-side
kubectl apply -f deployment.yaml --server-side --force-conflicts
```
**Preview changes before applying**:
```bash
# Show diff of what will change
kubectl diff -f deployment.yaml
# Dry run with full server-side validation
kubectl apply -f deployment.yaml --dry-run=server
# Client-side dry run (no server validation)
kubectl apply -f deployment.yaml --dry-run=client
```
**Why server-side apply?**
- Better conflict resolution (server decides, not client)
- Supports collaborative editing (multiple sources can manage same resource)
- Respects field ownership (who owns each field)
- Required for some newer Kubernetes features
### Common Operations
**Get resources**:
```bash
kubectl get pods
kubectl get pods -n production
kubectl get deployments --all-namespaces
kubectl get nodes
kubectl get services
```
**Advanced label selectors (2025)**:
```bash
# Single label match
kubectl get pods -l app=nginx
# Multiple labels (AND)
kubectl get pods -l app=nginx,env=production
# Set-based selectors
kubectl get pods -l 'env in (production,staging)'
kubectl get pods -l 'tier notin (frontend,backend)'
# Exists/not exists
kubectl get pods -l 'release' # has 'release' label
kubectl get pods -l '!release' # doesn't have 'release' label
# Bulk operations with labels
kubectl delete pods -l phase=test
kubectl scale deployment -l app=api --replicas=3
```
**Describe resources**:
```bash
kubectl describe pod my-pod
kubectl describe node node-1
kubectl describe deployment my-app
```
**View logs**:
```bash
kubectl logs my-pod
kubectl logs my-pod -c container-name
kubectl logs -f my-pod # Follow logs
kubectl logs my-pod --previous # Previous container logs
kubectl logs -l app=nginx # Logs from all pods with label
```
**Context and namespace management**:
```bash
kubectl config get-contexts
kubectl config current-context
kubectl config use-context production
kubectl config set-context --current --namespace=my-namespace
```
**Rollout management and canary deployments**:
```bash
# View rollout status
kubectl rollout status deployment/my-app
# Pause rollout for manual canary analysis
kubectl rollout pause deployment/my-app
# After validation, resume rollout
kubectl rollout resume deployment/my-app
# Rollback if issues found
kubectl rollout undo deployment/my-app
# View rollout history
kubectl rollout history deployment/my-app
# Rollback to specific revision
kubectl rollout undo deployment/my-app --to-revision=2
```
**Canary deployment workflow**:
```bash
# 1. Update deployment (triggers rollout)
kubectl apply -f deployment.yaml --server-side
# 2. Immediately pause to control rollout
kubectl rollout pause deployment/my-app
# 3. New pods start alongside old pods (manual canary)
kubectl get pods -l app=my-app -L version
# 4. Monitor metrics, test new version
# ... check logs, metrics, error rates ...
# 5. If good, resume full rollout
kubectl rollout resume deployment/my-app
# 6. If bad, rollback
kubectl rollout undo deployment/my-app
```
## Troubleshooting Workflows
### Pod Not Starting
```bash
# 1. Check pod status
kubectl get pod my-pod -o wide
# 2. Describe pod to see events
kubectl describe pod my-pod
# 3. Check logs
kubectl logs my-pod
# 4. Check previous container logs if crash looping
kubectl logs my-pod --previous
# 5. Check events in namespace
kubectl get events --sort-by='.lastTimestamp' | grep my-pod
```
### Debugging Running Pod
```bash
# Execute commands in pod
kubectl exec -it my-pod -- sh
kubectl exec -it my-pod -c container-name -- bash
# Port forward to local machine
kubectl port-forward my-pod 8080:80
# Copy files to/from pod
kubectl cp my-pod:/path/to/file ./local-file
kubectl cp ./local-file my-pod:/path/to/file
```
### Network Issues
```bash
# Check service endpoints
kubectl get endpoints my-service
# Describe service
kubectl describe service my-service
# Test DNS resolution
kubectl run -it --rm debug --image=busybox --restart=Never -- nslookup my-service
# Check network policies
kubectl get networkpolicies
```
### Resource Constraints
```bash
# Check resource usage
kubectl top nodes
kubectl top pods
kubectl top pods --containers
# Describe resource limits
kubectl describe pod my-pod | grep -A 5 Limits
```
## Common Patterns
### Get Resource in Specific Format
```bash
# JSON output
kubectl get pod my-pod -o json
# YAML output
kubectl get pod my-pod -o yaml
# Custom columns
kubectl get pods -o custom-columns=NAME:.metadata.name,STATUS:.status.phase
# JSONPath
kubectl get pods -o jsonpath='{.items[*].metadata.name}'
```
### Filtering and Selecting
```bash
# By label
kubectl get pods -l app=nginx
kubectl get pods -l 'env in (production,staging)'
# By field
kubectl get pods --field-selector status.phase=Running
kubectl get pods --field-selector metadata.namespace!=kube-system
```
### Watch Resources
```bash
# Watch for changes
kubectl get pods --watch
kubectl get pods -w
# Watch with timestamps
kubectl get pods --watch --output-watch-events
```
## Best Practices and Smart Defaults (2025)
### Infrastructure as Code
1. **Always use version control for manifests**:
```bash
# Good: Manifests in git
git add k8s/
git commit -m "Update deployment replicas"
kubectl apply -f k8s/ --server-side
# Bad: Imperative changes (lost on next apply)
kubectl scale deployment my-app --replicas=5
```
2. **Prefer server-side apply** for all manifest applications
```bash
# Default to server-side
kubectl apply -f . --server-side --recursive
```
3. **Preview changes before applying**:
```bash
# Always diff first
kubectl diff -f deployment.yaml
# Then apply
kubectl apply -f deployment.yaml --server-side
```
4. **Use kubectl diff as pre-commit hook**:
```bash
# .git/hooks/pre-commit
kubectl diff -f k8s/ --exit-code
```
### Runtime Notes (K8s 1.33)
- **Containerd is now the default runtime** (Docker deprecated since 1.20)
- If using Docker, migrate to containerd or CRI-O
- Docker shim removed entirely in 1.33+
```bash
# Check current runtime
kubectl get nodes -o wide
# Look at CONTAINER-RUNTIME column
# Verify containerd
kubectl describe node <node-name> | grep "Container Runtime"
```
## Security Best Practices
1. **Use Namespaces**: Isolate workloads with namespaces
2. **RBAC**: Follow principle of least privilege
3. **Network Policies**: Restrict pod-to-pod communication
4. **Resource Limits**: Always set memory and CPU limits
```yaml
resources:
limits:
memory: "256Mi"
cpu: "500m"
requests:
memory: "128Mi"
cpu: "250m"
```
5. **Security Contexts**: Run containers as non-root when possible
```yaml
securityContext:
runAsNonRoot: true
runAsUser: 1000
readOnlyRootFilesystem: true
```
6. **Secrets**: Use Kubernetes Secrets, never hardcode credentials
7. **Label Consistency**: Use consistent labels for filtering and RBAC
```yaml
labels:
app: nginx
env: production
version: v1.2.3
```
## Common Issues and Solutions
### ImagePullBackOff
```bash
# Check image name and tag
kubectl describe pod my-pod | grep Image
# Check image pull secrets
kubectl get secrets
kubectl describe secret my-registry-secret
# Check node's ability to pull
kubectl describe node my-node | grep -A 10 Conditions
```
### CrashLoopBackOff
```bash
# View current logs
kubectl logs my-pod
# View previous logs
kubectl logs my-pod --previous
# Check liveness/readiness probes
kubectl describe pod my-pod | grep -A 5 Probes
# Temporarily disable probes (edit deployment)
kubectl edit deployment my-app
```
### Pending Pods
```bash
# Check events
kubectl describe pod my-pod | grep Events -A 10
# Check node resources
kubectl top nodes
kubectl describe nodes
# Check PVC status
kubectl get pvc
```
## Examples
### Example 1: Complete Pod Debugging
```bash
#!/bin/bash
POD=$1
echo "=== Pod Status ==="
kubectl get pod "$POD" -o wide
echo "\n=== Pod Events ==="
kubectl describe pod "$POD" | grep Events -A 20
echo "\n=== Pod Logs ==="
kubectl logs "$POD" --tail=50
echo "\n=== Resource Usage ==="
kubectl top pod "$POD" --containers
```
### Example 2: Find Pods Using Most Resources
```bash
# CPU
kubectl top pods --all-namespaces --sort-by=cpu
# Memory
kubectl top pods --all-namespaces --sort-by=memory
```
### Example 3: Quick Health Check
```bash
# Check cluster health
kubectl get nodes
kubectl get componentstatuses
kubectl get pods --all-namespaces --field-selector=status.phase!=Running
# Check critical system pods
kubectl get pods -n kube-system
```
## Advanced Operations
### Bulk Operations
```bash
# Delete all pods with label
kubectl delete pods -l app=old-version
# Scale all deployments
kubectl get deployments -o name | xargs -I {} kubectl scale {} --replicas=3
# Restart all pods in deployment (rollout restart)
kubectl rollout restart deployment my-app
```
### Debug with Ephemeral Containers
```bash
# Add debug container to running pod (K8s 1.23+)
kubectl debug my-pod -it --image=busybox --target=my-container
# Create debug pod as copy
kubectl debug my-pod -it --copy-to=my-pod-debug --container=debugger --image=busybox
```
## When to Ask for Help
Ask the user for clarification when:
- The cluster context or namespace is ambiguous
- Destructive operations are needed (delete, drain, cordon)
- RBAC permissions might be insufficient
- The issue requires changes to cluster configuration
- Multiple pods/deployments match the criteriaRelated Skills
zellij-helper
Zellij terminal multiplexer for session management, layouts, and pane operations When user mentions Zellij, terminal multiplexer, zellij commands, sessions, panes, layouts, or tabs
vite-react-helper
Vite + React for fast modern web development - build config, HMR, hooks, state management, and performance patterns When user works with Vite, React, creates components, manages state, uses hooks, or configures Vite builds
typescript-helper
TypeScript development guidance for type systems and tooling When user works with .ts or .tsx files, mentions TypeScript, or encounters type errors
terraform-helper
Terraform and OpenTofu infrastructure as code - HCL, providers, modules, state management, and CLI operations When user works with .tf files, mentions Terraform, OpenTofu, tofu, HCL, infrastructure as code, or tf commands
talos-helper
Talos Linux cluster administration using talosctl When user mentions Talos, talosctl, or Talos cluster operations
tailscale-helper
Tailscale VPN and networking - CLI operations, MagicDNS, ACLs, SSH, funnel, serve, and network administration When user mentions Tailscale, tailscale commands, VPN, MagicDNS, tailnet, or Tailscale networking
sentry-helper
Complete Sentry operations via sentry-cli and REST API - issues, releases, source maps, traces, events When user mentions Sentry, errors, issues, releases, source maps, error tracking, stack traces
rust-helper
Rust development with cargo, clippy, rustfmt, testing, and common patterns When user works with .rs files, mentions Rust, cargo, clippy, rustfmt, or encounters Rust compiler errors
python-helper
Python development with modern patterns, type hints, testing, and tooling When user works with .py files, mentions Python, pip, pytest, ruff, uv, or encounters Python errors
prisma-helper
Prisma ORM for type-safe database access - schema design, migrations, queries, relations, and connection management When user works with Prisma, database schemas, migrations, Prisma Client queries, or mentions prisma commands
pinchtab-helper
PinchTab browser automation - profiles, instances, multi-instance routing, tabs, actions, and anti-detection When user mentions PinchTab, browser automation, pinchtab commands, headed/headless browser, or web scraping with Chrome
pagerduty-helper
Complete PagerDuty operations via REST API - incidents, schedules, oncall, services, orchestrations When user mentions PagerDuty, incidents, oncall, schedules, escalation, pages, alerts