Kubernetes YAML Workloads

YAML patterns for Deployments, StatefulSets, DaemonSets, Jobs, CronJobs, HPAs, and PodDisruptionBudgets.

View
StandardDetailedCompact
Export
Copy the compact sheet, download it, or print it.
Download
`D` dense toggle · `C` copy all
## StatefulSets
Basic StatefulSet YAML
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: postgres
spec:
  serviceName: postgres
  replicas: 3
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
        - name: postgres
          image: postgres:17
          ports:
            - containerPort: 5432
              name: postgres
          volumeMounts:
            - name: data
              mountPath: /var/lib/postgresql/data
  volumeClaimTemplates:
    - metadata:
        name: data
      spec:
        accessModes: ["ReadWriteOnce"]
        resources:
          requests:
            storage: 20Gi

# Run stateful replicas with stable ordinals.

Set rolling update partition
updateStrategy:
  type: RollingUpdate
  rollingUpdate:
    partition: 1

# Control StatefulSet ordinal rollout.

## DaemonSets
Basic DaemonSet YAML
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: node-exporter
spec:
  selector:
    matchLabels:
      app: node-exporter
  template:
    metadata:
      labels:
        app: node-exporter
    spec:
      hostNetwork: true
      tolerations:
        - operator: Exists
      containers:
        - name: node-exporter
          image: prom/node-exporter:v1.8.2
          ports:
            - name: metrics
              containerPort: 9100

# Deploy a log collector or node agent everywhere.

Restart a DaemonSet rollout
kubectl rollout restart daemonset/node-exporter

# Trigger rollout after a config change.

## Jobs and CronJobs
Basic Job YAML
apiVersion: batch/v1
kind: Job
metadata:
  name: db-migration
spec:
  backoffLimit: 3
  template:
    spec:
      restartPolicy: Never
      containers:
        - name: migrate
          image: ghcr.io/example/api:1.0.0
          command: ["./bin/migrate"]

# Run a one-time batch task with retries.

Basic CronJob YAML
apiVersion: batch/v1
kind: CronJob
metadata:
  name: nightly-report
spec:
  schedule: "0 2 * * *"
  concurrencyPolicy: Forbid
  successfulJobsHistoryLimit: 3
  failedJobsHistoryLimit: 1
  jobTemplate:
    spec:
      template:
        spec:
          restartPolicy: Never
          containers:
            - name: report
              image: ghcr.io/example/reporter:1.0.0
              args: ["generate"]

# Schedule recurring batch work.

Run CronJob template on demand
kubectl create job --from=cronjob/nightly-report nightly-report-manual

# Instantiate a Job from a CronJob definition.

## Autoscaling and Availability
HorizontalPodAutoscaler YAML
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: api
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: api
  minReplicas: 2
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 70

# Scale Deployment based on CPU utilization.

PodDisruptionBudget YAML
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  name: api
spec:
  minAvailable: 2
  selector:
    matchLabels:
      app: api

# Protect minimum availability during voluntary disruption.

Recommended next

No recommendations yet.