Try Sailor Cloud - 25% off!

Claim Now
Back to all posts

Multi-Container Pods: Sidecar, Init, and Ambassador Patterns

Multi-Container Pods: Sidecar, Init, and Ambassador Patterns

Pods can contain multiple containers that work together. Understanding these patterns is essential for CKAD.

Why Multi-Container Pods?

  • Share network namespace (localhost communication)
  • Share storage volumes
  • Coordinate lifecycle
  • Separation of concerns

Init Containers

Run before main containers start. Must complete successfully.

Use Cases

  • Wait for dependencies
  • Setup configuration
  • Download assets
apiVersion: v1
kind: Pod
metadata:
  name: init-demo
spec:
  initContainers:
  - name: wait-for-db
    image: busybox
    command: ['sh', '-c', 'until nc -z db-service 5432; do sleep 2; done']
  - name: download-config
    image: busybox
    command: ['wget', '-O', '/config/app.conf', 'http://config-service/app.conf']
    volumeMounts:
    - name: config
      mountPath: /config
  containers:
  - name: app
    image: my-app
    volumeMounts:
    - name: config
      mountPath: /etc/app
  volumes:
  - name: config
    emptyDir: {}

Sidecar Pattern

Helper container runs alongside main container.

Use Cases

  • Log shipping
  • Metrics collection
  • Proxy/service mesh
apiVersion: v1
kind: Pod
metadata:
  name: sidecar-demo
spec:
  containers:
  - name: app
    image: my-app
    volumeMounts:
    - name: logs
      mountPath: /var/log/app
  - name: log-shipper
    image: fluentd
    volumeMounts:
    - name: logs
      mountPath: /var/log/app
  volumes:
  - name: logs
    emptyDir: {}

Ambassador Pattern

Proxy container handles external communication.

Use Cases

  • Database connection pooling
  • External service proxy
  • Rate limiting
apiVersion: v1
kind: Pod
metadata:
  name: ambassador-demo
spec:
  containers:
  - name: app
    image: my-app
    env:
    - name: DB_HOST
      value: "localhost"  # Talks to ambassador
  - name: db-ambassador
    image: haproxy
    ports:
    - containerPort: 5432

Adapter Pattern

Transform data format between application and external systems.

spec:
  containers:
  - name: app
    image: legacy-app
    volumeMounts:
    - name: logs
      mountPath: /var/log
  - name: adapter
    image: log-adapter
    volumeMounts:
    - name: logs
      mountPath: /var/log

Container Communication

# Containers share localhost
# Container 1 listens on :8080
# Container 2 can access via localhost:8080

Shared Volumes

volumes:
- name: shared-data
  emptyDir: {}
# All containers can mount and access

Exam Tips

  • Init containers run sequentially
  • Sidecar containers run in parallel
  • Use emptyDir for shared storage
  • Containers share network namespace

Practice Multi-Container Pods

These patterns appear frequently in CKAD exams. Practice at Sailor.sh.

Start Free Practice