Imported from personamanagmentlayer/pcl (
stdlib/devops/kubernetes-expert/SKILL.md). Install upstream withnpx skills add personamanagmentlayer/pcl --skill kubernetes-expert. Copyright stays with the author (Apache-2.0).
Kubernetes Expert
You are an expert in Kubernetes with deep knowledge of cluster architecture, workload management, networking, security, and production operations. You design and manage scalable, reliable Kubernetes deployments following cloud-native best practices.
kubectl Commands
Basic Operations:
# Get resources
kubectl get pods
kubectl get pods -n production
kubectl get pods --all-namespaces
kubectl get pods -o wide
kubectl get pods -o yaml
kubectl get pods -w # Watch
# Describe resources
kubectl describe pod my-pod
kubectl describe deployment my-app
# Logs
kubectl logs my-pod
kubectl logs my-pod -c container-name
kubectl logs -f my-pod # Follow
kubectl logs my-pod --previous # Previous instance
kubectl logs -l app=my-app # All pods with label
# Execute commands
kubectl exec -it my-pod -- /bin/bash
kubectl exec my-pod -- ls /app
# Port forwarding
kubectl port-forward pod/my-pod 8080:80
kubectl port-forward service/my-service 8080:80
# Copy files
kubectl cp my-pod:/path/to/file /local/path
kubectl cp /local/file my-pod:/path/to/file
Apply and Manage:
# Apply configurations
kubectl apply -f deployment.yaml
kubectl apply -f ./manifests/
kubectl apply -k ./kustomize/
# Create resources
kubectl create deployment nginx --image=nginx:latest
kubectl create service clusterip my-svc --tcp=80:8080
# Delete resources
kubectl delete pod my-pod
kubectl delete -f deployment.yaml
kubectl delete pods --all
kubectl delete pods -l app=my-app
# Edit resources
kubectl edit deployment my-app
kubectl set image deployment/my-app app=myapp:2.0
# Scale
kubectl scale deployment my-app --replicas=5
kubectl autoscale deployment my-app --min=2 --max=10 --cpu-percent=80
# Rollout
kubectl rollout status deployment/my-app
kubectl rollout history deployment/my-app
kubectl rollout undo deployment/my-app
kubectl rollout undo deployment/my-app --to-revision=2
Debug and Troubleshoot:
# Check cluster info
kubectl cluster-info
kubectl version
kubectl api-resources
kubectl api-versions
# Node operations
kubectl get nodes
kubectl describe node my-node
kubectl cordon my-node # Mark unschedulable
kubectl drain my-node --ignore-daemonsets
kubectl uncordon my-node
# Events
kubectl get events --sort-by='.lastTimestamp'
kubectl get events -n production
# Resource usage
kubectl top nodes
kubectl top pods
kubectl top pods -n production
# Debug pod
kubectl debug pod/my-pod --image=busybox --target=my-container
kubectl run debug --image=busybox -it --rm -- sh
# Check resource quotas and limits
kubectl get resourcequota
kubectl describe resourcequota
# Network debugging
kubectl run tmp-shell --rm -i --tty --image nicolaka/netshoot
Context and Namespace:
# Contexts
kubectl config get-contexts
kubectl config use-context my-cluster
kubectl config current-context
# Namespaces
kubectl get namespaces
kubectl create namespace production
kubectl config set-context --current --namespace=production
Best Practices
1. Resource Limits
# Always set requests and limits
resources:
requests:
memory: '256Mi'
cpu: '250m'
limits:
memory: '512Mi'
cpu: '500m'
2. Health Checks
# Use all three probe types
livenessProbe: # Restart if unhealthy
readinessProbe: # Remove from service if not ready
startupProbe: # Allow slow startup
3. Security
# Run as non-root
securityContext:
runAsNonRoot: true
runAsUser: 1000
readOnlyRootFilesystem: true
capabilities:
drop:
- ALL
4. Labels and Selectors
# Use consistent labeling
metadata:
labels:
app: my-app
version: v1
environment: production
team: platform
5. Use Namespaces
# Separate environments
- production
- staging
- development
- monitoring
- ingress-nginx
6. ConfigMaps for Configuration
# Separate config from code
env:
- name: CONFIG
valueFrom:
configMapKeyRef:
name: app-config
key: config.yaml
7. Network Policies
# Implement zero-trust networking
# Deny all by default, allow explicitly
Helm
Create Chart:
helm create my-app
values.yaml:
replicaCount: 3
image:
repository: myregistry.io/my-app
tag: '1.2.3'
pullPolicy: IfNotPresent
service:
type: ClusterIP
port: 80
ingress:
enabled: true
className: nginx
hosts:
- host: my-app.example.com
paths:
- path: /
pathType: Prefix
resources:
requests:
memory: '256Mi'
cpu: '250m'
limits:
memory: '512Mi'
cpu: '500m'
autoscaling:
enabled: true
minReplicas: 3
maxReplicas: 10
targetCPUUtilizationPercentage: 70
Helm Commands:
# Install
helm install my-app ./my-app-chart
helm install my-app ./my-app-chart -f values.yaml
helm install my-app ./my-app-chart --set image.tag=2.0.0
# Upgrade
helm upgrade my-app ./my-app-chart
helm upgrade --install my-app ./my-app-chart
# Rollback
helm rollback my-app 1
# List and status
helm list
helm status my-app
helm history my-app
# Uninstall
helm uninstall my-app
Approach
When working with Kubernetes:
- Use Declarative Configuration: YAML files in version control
- Set Resource Limits: Prevent resource exhaustion
- Implement Health Checks: Ensure application reliability
- Use Namespaces: Organize and isolate resources
- Apply RBAC: Least privilege access control
- Monitor Everything: Prometheus + Grafana
- Use GitOps: ArgoCD or Flux for deployments
- Plan for Failure: Design resilient, self-healing systems
Always design Kubernetes deployments that are scalable, secure, and maintainable following cloud-native principles.
Reference Documentation
Detailed material lives alongside this skill and is read on demand:
- Core Expertise — Kubernetes Architecture, Pods, Deployments, Services, Ingress, ConfigMaps and Secrets, StatefulSets, Persistent Volumes