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 above replicas.

Recreate

spec:
  strategy:
    type: Recreate          # terminate all old Pods, then create new ones

Use when old and new versions cannot run simultaneously (DB schema breaks backward compat).

kubectl Deployment Commands

CommandWhat it does
kubectl apply -f deploy.yamlCreate or update deployment
kubectl get deploymentsList deployments
kubectl describe deployment apiEvents, replica counts, conditions
kubectl rollout status deployment/apiWatch rollout progress
kubectl rollout history deployment/apiShow revision history
kubectl rollout undo deployment/apiRoll back to previous revision
kubectl rollout undo deployment/api --to-revision=3Roll back to revision 3
kubectl rollout restart deployment/apiRolling restart (re-pull image)
kubectl scale deployment api --replicas=5Scale manually
kubectl set image deployment/api api=myrepo/api:2.2Update image
kubectl delete deployment apiDelete 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

ConditionMeaning
Available≥ minReadySeconds after last container restart
ProgressingNew ReplicaSet scaling up or old one scaling down
ReplicaFailureReplicaSet 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

FeatureDeploymentStatefulSet
Pod identityRandom suffixStable (app-0, app-1)
Start/stop orderParallelOrdered (0 → n / n → 0)
StorageShared or ephemeralPer-Pod PVC (volumeClaimTemplates)
Use caseStateless appsDBs, 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