Kubernetes — Commands & Recipes
Cluster Operations
# Cluster info
kubectl cluster-info
kubectl get nodes -o wide
kubectl top nodes
# Drain node for maintenance
kubectl drain node-1 --ignore-daemonsets --delete-emptydir-data
kubectl uncordon node-1
# Check component health
kubectl get componentstatuses
kubectl get --raw '/healthz?verbose'
Workload Management
# Deploy and scale
kubectl apply -f deployment.yaml
kubectl scale deployment myapp --replicas=5
kubectl rollout status deployment myapp
# Rolling update
kubectl set image deployment/myapp app=myapp:v2.0
kubectl rollout undo deployment/myapp # rollback
# Restart pods (rolling)
kubectl rollout restart deployment/myapp
# Port forward for debugging
kubectl port-forward svc/myapp 8080:80
# Run one-off debug pod
kubectl run debug --rm -it --image=nicolaka/netshoot -- /bin/bash
Debugging
# Pod debugging
kubectl describe pod myapp-xxx # events, conditions
kubectl logs myapp-xxx -c app --previous # previous crash logs
kubectl logs -l app=myapp --all-containers -f # follow all pods
# Exec into running pod
kubectl exec -it myapp-xxx -- /bin/sh
# Debug node
kubectl debug node/node-1 -it --image=ubuntu
# Check events (sorted by time)
kubectl get events --sort-by='.lastTimestamp' -A
# Resource usage
kubectl top pods --sort-by=cpu -A
kubectl top pods --sort-by=memory
Networking
# View services and endpoints
kubectl get svc -o wide
kubectl get endpoints myapp
# DNS debugging
kubectl run dns-test --rm -it --image=busybox:1.36 -- nslookup myapp.default.svc.cluster.local
# View network policies
kubectl get networkpolicies -A
RBAC
# Check permissions
kubectl auth can-i create pods --namespace=production
kubectl auth can-i '*' '*' --all-namespaces # am I cluster-admin?
# Create service account with role
kubectl create serviceaccount deployer
kubectl create rolebinding deployer-binding \
--clusterrole=edit \
--serviceaccount=default:deployer
Helm
# Install chart
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install mydb bitnami/postgresql --set auth.postgresPassword=secret
# Upgrade with values
helm upgrade mydb bitnami/postgresql -f values.yaml
# Rollback
helm rollback mydb 1
# Template (dry-run render)
helm template mydb bitnami/postgresql -f values.yaml > rendered.yaml
Manifest Patterns
# Deployment with resource limits, probes, and topology spread
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
topologySpreadConstraints:
- maxSkew: 1
topologyKey: topology.kubernetes.io/zone
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
app: myapp
containers:
- name: app
image: myapp:latest
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 500m
memory: 512Mi
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 3
periodSeconds: 5
Sources