Zum Inhalt

Sidecar Container

Sidecar Container laufen parallel zum Hauptcontainer im selben Pod und teilen sich Netzwerk und Storage.

Übersicht

Sidecar Container haben dieselbe Funktionalität wie der Hauptcontainer, mit einer Einschränkung:

Keine Port-Exposition

Sidecar Container können keine Container-Ports exponieren. Ports werden nur über den Hauptcontainer definiert.

Basis-Konfiguration

chart:
  enabled: true

  container:
    image: myapp/api:latest
    ports:
      - name: http
        containerPort: 8080

  sidecar:
    enabled: true
    image: nginx:alpine

Anwendungsfälle

Logging-Sidecar

Ein Sidecar, der Logs sammelt und weiterleitet:

chart:
  container:
    image: myapp/api:latest
    volumeMounts:
      - name: logs
        mountPath: /var/log/app

  sidecar:
    enabled: true
    image: fluent/fluent-bit:latest
    volumeMounts:
      - name: logs
        mountPath: /var/log/app
    env:
      - name: FLUENT_ELASTICSEARCH_HOST
        value: elasticsearch.logging.svc.cluster.local

  deploymentVolume:
    volumes:
      - name: logs
        emptyDir: {}

Proxy-Sidecar

Ein Sidecar als Reverse Proxy oder Service Mesh:

chart:
  container:
    image: myapp/api:latest
    ports:
      - name: http
        containerPort: 8080

  sidecar:
    enabled: true
    image: envoyproxy/envoy:latest
    env:
      - name: UPSTREAM_HOST
        value: localhost
      - name: UPSTREAM_PORT
        value: "8080"

Datenbank-Backup-Sidecar

Ein Sidecar für periodische Backups:

chart:
  container:
    image: postgres:14
    ports:
      - name: postgres
        containerPort: 5432

  sidecar:
    enabled: true
    image: mycompany/pg-backup:latest
    env:
      - name: BACKUP_SCHEDULE
        value: "0 2 * * *"
      - name: POSTGRES_HOST
        value: localhost
      - name: S3_BUCKET
        value: my-backups

Konfigurationsoptionen

Ressourcen

chart:
  sidecar:
    enabled: true
    image: fluent/fluent-bit:latest
    resources:
      limits:
        cpu: 200m
        memory: 256Mi
      requests:
        cpu: 50m
        memory: 64Mi

Health Checks

chart:
  sidecar:
    enabled: true
    image: nginx:alpine
    livenessProbe:
      httpGet:
        path: /health
        port: 8081
      initialDelaySeconds: 10
      periodSeconds: 5
    readinessProbe:
      httpGet:
        path: /ready
        port: 8081
      initialDelaySeconds: 5
      periodSeconds: 3

Umgebungsvariablen

chart:
  sidecar:
    enabled: true
    image: myproxy:latest
    staticEnv:
      - name: PROXY_MODE
        value: "reverse"
    env:
      - name: CONFIG_FILE
        value: /etc/proxy/config.yaml
    extraEnv:
      - name: DEBUG
        value: "true"

Shared Volumes

Hauptcontainer und Sidecar können Volumes teilen:

chart:
  container:
    image: myapp/api:latest
    volumeMounts:
      - name: shared-data
        mountPath: /data
      - name: shared-config
        mountPath: /config

  sidecar:
    enabled: true
    image: myapp/processor:latest
    volumeMounts:
      - name: shared-data
        mountPath: /data
      - name: shared-config
        mountPath: /config

  deploymentVolume:
    volumes:
      - name: shared-data
        emptyDir: {}
      - name: shared-config
        configMap:
          name: app-config

Best Practices

  1. Begrenzen Sie Ressourcen für Sidecars, um den Hauptcontainer nicht zu beeinträchtigen
  2. Verwenden Sie Health Checks um sicherzustellen, dass der Sidecar funktioniert
  3. Teilen Sie Volumes nur wenn nötig für bessere Isolation
  4. Loggen Sie separat für einfacheres Debugging
  5. Verwenden Sie leichtgewichtige Images für Sidecars um Pod-Startzeiten zu minimieren

Siehe auch