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¶
- Begrenzen Sie Ressourcen für Sidecars, um den Hauptcontainer nicht zu beeinträchtigen
- Verwenden Sie Health Checks um sicherzustellen, dass der Sidecar funktioniert
- Teilen Sie Volumes nur wenn nötig für bessere Isolation
- Loggen Sie separat für einfacheres Debugging
- Verwenden Sie leichtgewichtige Images für Sidecars um Pod-Startzeiten zu minimieren