| name | kubernetes |
| description | Kubernetes container orchestration platform. Use for K8s clusters, deployments, pods, services, networking, storage, configuration, and DevOps tasks. |
Kubernetes Skill
Comprehensive assistance with Kubernetes development, operations, and troubleshooting, generated from official documentation.
When to Use This Skill
This skill should be triggered when users:
Working with Kubernetes Resources
- Creating, updating, or deleting Kubernetes resources (Pods, Deployments, Services, etc.)
- Writing or modifying YAML manifests
- Managing ConfigMaps, Secrets, or PersistentVolumes
- Working with StatefulSets, DaemonSets, or Jobs
Using kubectl Commands
- Running kubectl commands or asking about kubectl syntax
- Querying cluster resources (
kubectl get,kubectl describe) - Debugging pods or containers (
kubectl logs,kubectl exec) - Applying or managing configurations (
kubectl apply,kubectl rollout)
Cluster Operations
- Setting up or configuring Kubernetes clusters
- Managing namespaces and RBAC (Role-Based Access Control)
- Troubleshooting cluster issues or resource problems
- Monitoring cluster health or resource usage
Networking & Services
- Configuring Services (ClusterIP, NodePort, LoadBalancer)
- Setting up Ingress controllers or network policies
- Working with DNS resolution in Kubernetes
- Debugging network connectivity issues
Storage & Configuration
- Configuring PersistentVolumes and PersistentVolumeClaims
- Working with StorageClasses
- Managing application configuration via ConfigMaps and Secrets
- Setting up encryption at rest
Advanced Topics
- Implementing custom resource definitions (CRDs)
- Working with operators or controllers
- Setting up autoscaling (HPA, VPA)
- Implementing security policies and admission controllers
Quick Reference
Essential kubectl Commands
Cluster Info & Context
# View cluster information
kubectl cluster-info
# Get current context
kubectl config current-context
# Switch context
kubectl config use-context <context-name>
# Set default namespace
kubectl config set-context --current --namespace=<namespace-name>
Resource Management
# Apply configuration from file or directory
kubectl apply -f <file.yaml>
kubectl apply -f <directory>
# Create resource imperatively
kubectl create deployment nginx --image=nginx
# Delete resources
kubectl delete -f <file.yaml>
kubectl delete pod <pod-name>
kubectl delete pods,services -l <label-key>=<label-value>
Viewing Resources
# List resources
kubectl get pods
kubectl get pods -o wide
kubectl get all -n <namespace>
kubectl get pods --all-namespaces
# View multiple resource types
kubectl get pods,services,deployments
# Describe resource details
kubectl describe pod <pod-name>
kubectl describe node <node-name>
# Watch resources for changes
kubectl get pods --watch
Output Formats
# JSON output
kubectl get pod <pod-name> -o json
# YAML output
kubectl get pod <pod-name> -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 & Selection
# Filter by label
kubectl get pods -l app=nginx
kubectl get pods -l 'env in (prod,staging)'
# Filter by field
kubectl get pods --field-selector=status.phase=Running
kubectl get pods --field-selector=spec.nodeName=<node-name>
# Sort output
kubectl get pods --sort-by=.metadata.creationTimestamp
Debugging & Troubleshooting
# View logs
kubectl logs <pod-name>
kubectl logs <pod-name> -c <container-name>
kubectl logs <pod-name> --follow
kubectl logs <pod-name> --previous
# Execute commands in container
kubectl exec <pod-name> -- <command>
kubectl exec -it <pod-name> -- /bin/bash
kubectl exec <pod-name> -c <container-name> -- <command>
# Port forwarding
kubectl port-forward <pod-name> <local-port>:<remote-port>
kubectl port-forward service/<service-name> <local-port>:<remote-port>
# Copy files
kubectl cp <pod-name>:/path/to/file /local/path
kubectl cp /local/path <pod-name>:/path/to/file
Node Management
# Mark node as unschedulable
kubectl cordon <node-name>
# Drain node for maintenance
kubectl drain <node-name> --ignore-daemonsets
# Mark node as schedulable
kubectl uncordon <node-name>
# View node resources
kubectl top nodes
kubectl top pods
Deployments & Scaling
# Create deployment
kubectl create deployment <name> --image=<image>
# Scale deployment
kubectl scale deployment <name> --replicas=<count>
# Autoscale deployment
kubectl autoscale deployment <name> --min=<min> --max=<max> --cpu-percent=<percent>
# Update image
kubectl set image deployment/<name> <container>=<new-image>
# View rollout status
kubectl rollout status deployment/<name>
# View rollout history
kubectl rollout history deployment/<name>
# Rollback deployment
kubectl rollout undo deployment/<name>
kubectl rollout undo deployment/<name> --to-revision=<revision>
Services & Networking
# Expose deployment as service
kubectl expose deployment <name> --port=<port> --target-port=<target-port>
# Create service
kubectl create service clusterip <name> --tcp=<port>:<target-port>
# View endpoints
kubectl get endpoints
# Test DNS resolution
kubectl run -it --rm debug --image=busybox --restart=Never -- nslookup <service-name>
Configuration & Secrets
# Create ConfigMap from literal
kubectl create configmap <name> --from-literal=<key>=<value>
# Create ConfigMap from file
kubectl create configmap <name> --from-file=<path>
# Create Secret
kubectl create secret generic <name> --from-literal=<key>=<value>
kubectl create secret tls <name> --cert=<cert-file> --key=<key-file>
# View Secret data (base64 encoded)
kubectl get secret <name> -o jsonpath='{.data}'
Labels & Annotations
# Add label
kubectl label pod <pod-name> <key>=<value>
# Remove label
kubectl label pod <pod-name> <key>-
# Update label
kubectl label pod <pod-name> <key>=<value> --overwrite
# Add annotation
kubectl annotate pod <pod-name> <key>=<value>
Resource Quotas & Limits
# View resource usage
kubectl describe resourcequota -n <namespace>
kubectl describe limitrange -n <namespace>
# View pod resource requests/limits
kubectl get pods -o custom-columns=NAME:.metadata.name,MEMORY:.spec.containers[*].resources.requests.memory,CPU:.spec.containers[*].resources.requests.cpu
Advanced Operations
# Edit resource
kubectl edit deployment <name>
# Patch resource
kubectl patch deployment <name> -p '{"spec":{"replicas":3}}'
# Replace resource
kubectl replace -f <file.yaml>
# Diff changes before applying
kubectl diff -f <file.yaml>
# Explain resource fields
kubectl explain pod
kubectl explain pod.spec.containers
# View API resources
kubectl api-resources
kubectl api-versions
Common Use Cases
1. Deploying an Application
Create Deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.21
ports:
- containerPort: 80
Apply and verify:
kubectl apply -f deployment.yaml
kubectl get deployments
kubectl get pods -l app=nginx
kubectl describe deployment nginx-deployment
2. Exposing an Application
Create Service:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
Apply and test:
kubectl apply -f service.yaml
kubectl get service nginx-service
kubectl describe service nginx-service
3. Debugging a Pod
# Check pod status
kubectl get pod <pod-name> -o wide
# View detailed information
kubectl describe pod <pod-name>
# Check logs
kubectl logs <pod-name>
kubectl logs <pod-name> --previous # Previous container logs
# Get shell access
kubectl exec -it <pod-name> -- /bin/sh
# Check events
kubectl get events --sort-by=.metadata.creationTimestamp
# Check resource usage
kubectl top pod <pod-name>
4. Working with ConfigMaps and Secrets
Create ConfigMap:
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
database_url: "postgres://localhost:5432"
log_level: "info"
Use in Pod:
spec:
containers:
- name: app
image: myapp:latest
envFrom:
- configMapRef:
name: app-config
Create and use Secret:
# Create secret
kubectl create secret generic db-secret \
--from-literal=username=admin \
--from-literal=password=secret123
# Use in pod
env:
- name: DB_USER
valueFrom:
secretKeyRef:
name: db-secret
key: username
5. Setting Up Persistent Storage
PersistentVolumeClaim:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: app-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: standard
Use in Deployment:
spec:
containers:
- name: app
volumeMounts:
- name: data
mountPath: /data
volumes:
- name: data
persistentVolumeClaim:
claimName: app-pvc
6. Implementing Health Checks
spec:
containers:
- name: app
image: myapp:latest
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
7. Managing Updates with Rolling Updates
# Update image
kubectl set image deployment/nginx nginx=nginx:1.22
# Watch rollout
kubectl rollout status deployment/nginx
# Pause rollout
kubectl rollout pause deployment/nginx
# Resume rollout
kubectl rollout resume deployment/nginx
# Rollback if needed
kubectl rollout undo deployment/nginx
8. Working with Namespaces
# Create namespace
kubectl create namespace dev
# List all namespaces
kubectl get namespaces
# Set default namespace for context
kubectl config set-context --current --namespace=dev
# Delete namespace (careful!)
kubectl delete namespace dev
# Get resources across all namespaces
kubectl get pods --all-namespaces
9. DNS Resolution in Kubernetes
Service DNS format:
<service-name>.<namespace>.svc.cluster.local
Example:
# From within a pod in the same namespace
curl http://my-service
# From a different namespace
curl http://my-service.production.svc.cluster.local
# Test DNS resolution
kubectl run -it --rm debug --image=busybox --restart=Never -- nslookup my-service
10. Checking Connectivity
# Test port connectivity from within cluster
kubectl run -it --rm netcat --image=busybox --restart=Never -- nc -zv <service-name> <port>
# Test from specific pod
kubectl exec -it <pod-name> -- nc -zv <host> <port>
# Check if load balancer is accessible
nc -zv -w 2 <LOAD_BALANCER_IP> <PORT>
Reference Files
This skill includes comprehensive documentation in references/:
- api.md - Complete API reference documentation
- concepts.md - Core Kubernetes concepts and architecture
- configuration.md - Configuration best practices
- getting_started.md - Getting started guides and tutorials
- security.md - Security policies and encryption
- services.md - Services, networking, and DNS
- storage.md - Storage classes and persistent volumes
- workloads.md - Deployments, StatefulSets, Jobs, and more
- tasks.md - Step-by-step task guides
- tutorials.md - End-to-end tutorials
- other.md - Additional resources and references
Use Read to access specific reference files when detailed information is needed.
Working with This Skill
For Beginners
Start with the getting_started.md or tutorials.md reference files for foundational concepts. Focus on:
- Understanding Pods, Deployments, and Services
- Basic kubectl commands
- YAML manifest structure
For Specific Features
Use the appropriate category reference file:
- api.md - kubectl commands and API resources
- workloads.md - Deployments, Jobs, CronJobs
- services.md - Networking and service discovery
- storage.md - Persistent storage configuration
- security.md - RBAC, Secrets, and encryption
For Operations & Troubleshooting
- Check tasks.md for step-by-step procedures
- Use concepts.md to understand underlying architecture
- Reference configuration.md for best practices
Additional Resources
Helper Scripts (scripts/)
Add automation scripts here for common tasks:
- Cluster health checks
- Resource cleanup utilities
- Deployment automation
- Backup and restore scripts
Templates (assets/)
Store reusable templates:
- Deployment YAML templates
- Service definitions
- ConfigMap and Secret templates
- Ingress configurations
- NetworkPolicy examples
Best Practices
Manifest Organization
- Use declarative configurations (YAML files)
- Store manifests in version control
- Organize by namespace or application
- Use Kustomize or Helm for complex deployments
Resource Management
- Always set resource requests and limits
- Use namespaces to organize resources
- Apply labels consistently for filtering
- Use annotations for metadata
Security
- Follow principle of least privilege with RBAC
- Use Secrets for sensitive data
- Enable encryption at rest
- Implement NetworkPolicies
- Scan images for vulnerabilities
High Availability
- Run multiple replicas for production apps
- Use PodDisruptionBudgets
- Configure liveness and readiness probes
- Implement proper health checks
Monitoring & Logging
- Aggregate logs centrally
- Monitor resource usage
- Set up alerts for critical metrics
- Use kubectl top for quick checks
Troubleshooting Guide
Pod Issues
Pod stuck in Pending:
kubectl describe pod <pod-name>
# Check: Events, resource availability, PVC binding
Pod in CrashLoopBackOff:
kubectl logs <pod-name>
kubectl logs <pod-name> --previous
kubectl describe pod <pod-name>
# Check: Application errors, liveness probe failures
ImagePullBackOff:
kubectl describe pod <pod-name>
# Check: Image name, registry credentials, network access
Service Issues
Service not reachable:
kubectl get endpoints <service-name>
kubectl describe service <service-name>
# Check: Selector labels match pods, endpoints exist
DNS not resolving:
kubectl get pods -n kube-system -l k8s-app=kube-dns
kubectl run -it --rm debug --image=busybox -- nslookup <service>
# Check: CoreDNS pods running, service exists
Node Issues
Node NotReady:
kubectl describe node <node-name>
kubectl get pods -n kube-system
# Check: kubelet logs, network connectivity, resource pressure
Version Information
This skill was automatically generated from official Kubernetes documentation and includes information accurate for Kubernetes 1.25+. While most concepts remain consistent across versions, always verify specific API versions and features for your cluster version:
kubectl version
kubectl api-versions
Notes
- This skill was automatically generated from official documentation
- Reference files preserve the structure and examples from source docs
- Code examples include language detection for better syntax highlighting
- Quick reference patterns are extracted from common usage examples in the docs
Updating
To refresh this skill with updated documentation:
- Re-run the scraper with the same configuration
- The skill will be rebuilt with the latest information
- Verify all reference files are up to date