Kubernetes Cheatsheet
Deployments Reference
Use this Kubernetes reference while you build software engineering projects, review code for technical interview prep, or polish examples for a software engineer resume.
Deployment Manifest
apiVersion: apps/v1 kind: Deployment metadata: name: api namespace: production spec: replicas: 3 selector: matchLabels: app: api # must match template labels template: metadata: labels: app: api version: "2.1" spec: containers: - name: api image: myrepo/api:2.1 ports: - containerPort: 8080 resources: requests: cpu: "250m" memory: "256Mi" limits: cpu: "1" memory: "512Mi"
Rollout Strategy
RollingUpdate (default)
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1 # or "25%"
maxSurge: 1 # or "25%"- New Pods come up before old ones go down (zero-downtime).
maxUnavailable: how many Pods can be down at once.maxSurge: how many extra Pods can exist abovereplicas.
Recreate
spec:
strategy:
type: Recreate # terminate all old Pods, then create new onesUse when old and new versions cannot run simultaneously (DB schema breaks backward compat).
kubectl Deployment Commands
| Command | What it does |
|---|---|
kubectl apply -f deploy.yaml | Create or update deployment |
kubectl get deployments | List deployments |
kubectl describe deployment api | Events, replica counts, conditions |
kubectl rollout status deployment/api | Watch rollout progress |
kubectl rollout history deployment/api | Show revision history |
kubectl rollout undo deployment/api | Roll back to previous revision |
kubectl rollout undo deployment/api --to-revision=3 | Roll back to revision 3 |
kubectl rollout restart deployment/api | Rolling restart (re-pull image) |
kubectl scale deployment api --replicas=5 | Scale manually |
kubectl set image deployment/api api=myrepo/api:2.2 | Update image |
kubectl delete deployment api | Delete deployment + pods |
Image Update and Rollback
# update image (triggers rolling update) kubectl set image deployment/api api=myrepo/api:2.2 # annotate so rollout history is readable kubectl annotate deployment/api kubernetes.io/change-cause="release v2.2" # check history kubectl rollout history deployment/api # undo kubectl rollout undo deployment/api # undo to specific revision kubectl rollout undo deployment/api --to-revision=2 # pause / resume a rollout kubectl rollout pause deployment/api kubectl rollout resume deployment/api
Deployment Conditions
| Condition | Meaning |
|---|---|
Available | ≥ minReadySeconds after last container restart |
Progressing | New ReplicaSet scaling up or old one scaling down |
ReplicaFailure | ReplicaSet failed to create a Pod |
kubectl get deployment api -o jsonpath='{.status.conditions[*].type}'Pod Disruption Budget
Prevent too many replicas going down during voluntary disruptions (drains, upgrades):
apiVersion: policy/v1 kind: PodDisruptionBudget metadata: name: api-pdb spec: minAvailable: 2 # or maxUnavailable: 1 selector: matchLabels: app: api
StatefulSet vs. Deployment
| Feature | Deployment | StatefulSet |
|---|---|---|
| Pod identity | Random suffix | Stable (app-0, app-1) |
| Start/stop order | Parallel | Ordered (0 → n / n → 0) |
| Storage | Shared or ephemeral | Per-Pod PVC (volumeClaimTemplates) |
| Use case | Stateless apps | DBs, queues, Zookeeper |
apiVersion: apps/v1 kind: StatefulSet metadata: name: postgres spec: serviceName: postgres # headless Service required replicas: 3 selector: matchLabels: app: postgres template: metadata: labels: app: postgres spec: containers: - name: postgres image: postgres:16 volumeMounts: - name: data mountPath: /var/lib/postgresql/data volumeClaimTemplates: - metadata: name: data spec: accessModes: ["ReadWriteOnce"] resources: requests: storage: 10Gi
DaemonSet
Runs exactly one Pod per (matching) Node:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-exporter
spec:
selector:
matchLabels:
app: node-exporter
template:
metadata:
labels:
app: node-exporter
spec:
containers:
- name: exporter
image: prom/node-exporter:latest
ports:
- containerPort: 9100
tolerations:
- operator: Exists # run on control-plane nodes too