Deployments und ReplicaSets bilden das Rückgrat der Anwendungsorchestrierung in OpenShift und implementieren deklarative Mechanismen für Container-Lifecycle-Management. Diese Konstrukte abstrahieren komplexe Orchestrierungslogik und ermöglichen zuverlässige, skalierbare Anwendungsbereitstellung mit minimalen operativen Eingriffen.
Deployments fungieren als übergeordnete Abstraktionsebene, die gewünschte Anwendungszustände definiert, während ReplicaSets die operative Implementierung dieser Zustände gewährleisten. Diese hierarchische Struktur ermöglicht sowohl strategische Konfiguration als auch taktische Ausführung von Container-Management-Operationen.
Ein Deployment erstellt und verwaltet ReplicaSets automatisch basierend auf Änderungen in der Deployment-Spezifikation. Diese Controller-basierte Architektur gewährleistet kontinuierliche Konvergenz zwischen gewünschtem und aktuellem Systemzustand durch Reconciliation-Loops.
apiVersion: apps/v1
kind: Deployment
metadata:
name: webapp-deployment
spec:
replicas: 3
selector:
matchLabels:
app: webapp
template:
metadata:
labels:
app: webapp
spec:
containers:
- name: webapp
image: nginx:1.20
ports:
- containerPort: 80Dieses Deployment erstellt automatisch ein ReplicaSet, das wiederum drei Pod-Instanzen verwaltet. ReplicaSets übernehmen die direkte Pod-Verwaltung und implementieren Überwachungs- und Wiederherstellungsmechanismen für einzelne Container-Instanzen. Diese operative Ebene abstrahiert komplexe Pod-Lifecycle-Management-Details von Anwendungsentwicklern.
OpenShift unterstützt verschiedene Deployment-Strategien für unterschiedliche Anwendungsanforderungen. Die Wahl der Strategie beeinflusst sowohl Verfügbarkeit während Updates als auch Ressourcenverbrauch.
Rolling Deployment-Strategien ermöglichen unterbrechungsfreie Anwendungsupdates durch schrittweisen Austausch alter Container-Instanzen mit neuen Versionen. Diese Strategie minimiert Service-Unterbrechungen und ermöglicht kontinuierliche Verfügbarkeit während Updates.
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1Konfigurationsparameter: - maxUnavailable: Maximale Anzahl Pods, die während des Updates nicht verfügbar sein dürfen - maxSurge: Maximale Anzahl zusätzlicher Pods, die während des Updates erstellt werden dürfen
Blue-Green-Deployment-Muster können über Deployment-Konfigurationen implementiert werden, wobei vollständige Umgebungsreplikation instantane Umschaltung zwischen Versionen ermöglicht. Diese Strategie eignet sich für kritische Anwendungen, die absolute Verfügbarkeit erfordern.
Implementierung: Zwei separate Deployments (Blue und Green) laufen parallel, Service-Selector wird zwischen den Versionen umgeschaltet.
Canary-Deployments ermöglichen graduellen Traffic-Shift zu neuen Anwendungsversionen durch parallele Deployment-Instanzen. Diese risikominimierende Strategie unterstützt A/B-Testing und Performance-Validierung vor vollständiger Ausrollung.
Praktische Umsetzung: Schrittweise Erhöhung der Replica-Anzahl der neuen Version bei gleichzeitiger Reduzierung der alten Version.
Horizontale Skalierung erfolgt über Replica-Count-Anpassungen in Deployment-Spezifikationen. Diese deklarative Skalierung ermöglicht sowohl manuelle als auch automatisierte Kapazitätsanpassung basierend auf Last- oder Performance-Metriken.
# Skalierung über CLI
oc scale deployment webapp-deployment --replicas=5
# Skalierung über YAML-Update
spec:
replicas: 5Horizontal Pod Autoscaler (HPA) kann mit Deployments konfiguriert werden:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: webapp-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: webapp-deployment
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70ReplicaSets implementieren Desired State Management für Pod-Replicas und gewährleisten kontinuierliche Übereinstimmung zwischen konfigurierter und tatsächlicher Pod-Anzahl. Ausgefallene Pods werden automatisch ersetzt, um Verfügbarkeits-SLAs zu erfüllen.
Pod Disruption Budgets können mit Deployments konfiguriert werden, um minimale verfügbare Replica-Anzahl während Wartungsoperationen zu garantieren:
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: webapp-pdb
spec:
minAvailable: 2
selector:
matchLabels:
app: webappResource Requests und Limits definieren CPU- und Memory-Anforderungen für Deployment-Pods und ermöglichen Scheduler-basierte Platzierungsentscheidungen. Diese Spezifikationen gewährleisten angemessene Ressourcenallokation und verhindern Resource Starvation.
spec:
containers:
- name: webapp
image: nginx:1.20
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "512Mi"Quality of Service-Klassifikationen ergeben sich automatisch aus Resource-Spezifikationen:
| QoS-Klasse | Bedingung | Priorität bei Ressourcenknappheit |
|---|---|---|
| Guaranteed | Requests = Limits | Höchste (zuletzt terminiert) |
| Burstable | Requests < Limits | Mittlere |
| BestEffort | Keine Limits/Requests | Niedrigste (zuerst terminiert) |
Node Affinity und Anti-Affinity-Regeln können in Deployment-Templates definiert werden:
spec:
template:
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: node-type
operator: In
values: ["compute"]
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values: ["webapp"]
topologyKey: kubernetes.io/hostnameHealth Checks sind essentiell für zuverlässige Anwendungsbereitstellung und automatisierte Fehlerbehebung. OpenShift bietet verschiedene Probe-Typen für unterschiedliche Überwachungsszenarien.
Readiness Probes bestimmen, wann neue Pod-Instanzen Traffic empfangen können:
spec:
containers:
- name: webapp
readinessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 10
periodSeconds: 5Liveness Probes identifizieren defekte Pods für Restart:
spec:
containers:
- name: webapp
livenessProbe:
httpGet:
path: /alive
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
failureThreshold: 3Startup Probes adressieren Anwendungen mit langen Initialisierungszeiten:
spec:
containers:
- name: webapp
startupProbe:
httpGet:
path: /startup
port: 8080
initialDelaySeconds: 10
periodSeconds: 5
failureThreshold: 12 # 60 Sekunden Startup-ZeitLifecycle Hooks ermöglichen Anwendungscode-Ausführung bei Pod-Start und vor Pod-Terminierung:
spec:
containers:
- name: webapp
lifecycle:
postStart:
exec:
command: ["/bin/sh", "-c", "echo 'Container started' > /var/log/startup.log"]
preStop:
exec:
command: ["/bin/sh", "-c", "nginx -s quit"]Volume Mount-Konfigurationen in Deployment-Templates ermöglichen Persistent Storage-Anbindung für stateful Anwendungen. Diese Integration abstrahiert Storage-Komplexität und ermöglicht portable Anwendungsdefinitionen.
spec:
template:
spec:
containers:
- name: webapp
volumeMounts:
- name: webapp-storage
mountPath: /var/www/html
volumes:
- name: webapp-storage
persistentVolumeClaim:
claimName: webapp-pvcInit Container können in Deployments definiert werden, um Storage-Initialisierung oder Anwendungsvorbereitung durchzuführen:
spec:
template:
spec:
initContainers:
- name: setup
image: busybox
command: ['sh', '-c', 'cp -r /source/* /destination/']
volumeMounts:
- name: webapp-storage
mountPath: /destination
containers:
- name: webapp
# ... Hauptcontainer-KonfigurationShared Volume-Konfigurationen ermöglichen Datenaustausch zwischen Containern innerhalb derselben Pod-Instanz:
spec:
template:
spec:
containers:
- name: webapp
volumeMounts:
- name: shared-data
mountPath: /shared
- name: sidecar
volumeMounts:
- name: shared-data
mountPath: /data
volumes:
- name: shared-data
emptyDir: {}Deployment-Revision-History ermöglicht Rollback zu vorherigen Anwendungsversionen bei Problemen oder Fehlern. Diese Version-Control-Funktionalität auf Deployment-Ebene unterstützt schnelle Wiederherstellung und Risk Mitigation.
# Rollback zum vorherigen Deployment
oc rollout undo deployment/webapp-deployment
# Rollback zu spezifischer Revision
oc rollout undo deployment/webapp-deployment --to-revision=2
# Status des Rollouts prüfen
oc rollout status deployment/webapp-deployment
# Rollout-Historie anzeigen
oc rollout history deployment/webapp-deploymentRevision Limits begrenzen die Anzahl gespeicherter ReplicaSet-Versionen:
spec:
revisionHistoryLimit: 10 # Standard: 10Annotations und Labels auf Deployment- und ReplicaSet-Ebene ermöglichen Metadaten-Management:
metadata:
name: webapp-deployment
labels:
app: webapp
tier: frontend
environment: production
annotations:
deployment.kubernetes.io/revision: "3"
kubernetes.io/change-cause: "Update to nginx 1.20"Selector-basierte Pod-Identifikation verbindet Deployments mit Service-Definitionen für automatische Service Discovery. Diese lose Kopplung ermöglicht flexible Service-Topologien und vereinfacht Anwendungsarchitektur-Evolution.
# Service-Definition
apiVersion: v1
kind: Service
metadata:
name: webapp-service
spec:
selector:
app: webapp # Muss mit Deployment-Labels übereinstimmen
ports:
- port: 80
targetPort: 8080
---
# Deployment mit entsprechenden Labels
apiVersion: apps/v1
kind: Deployment
metadata:
name: webapp-deployment
spec:
selector:
matchLabels:
app: webapp
template:
metadata:
labels:
app: webapp # Service-Selector-MatchLabel-basierte Gruppierung unterstützt komplexe Service-Mesh-Konfigurationen und Traffic-Routing-Strategien:
metadata:
labels:
app: webapp
version: v2
tier: frontend
track: stableDiese Metadaten-gesteuerte Architektur ermöglicht sophisticated Traffic Management ohne Code-Änderungen und unterstützt Service Mesh-Implementierungen wie Istio oder OpenShift Service Mesh.
Rolling Update-Parameter sollten an
Anwendungscharakteristika angepasst werden: - Schnell startende
Anwendungen: maxSurge: 50%, maxUnavailable: 0 -
Ressourcen-intensive Anwendungen:
maxSurge: 1, maxUnavailable: 1
Health Checks sollten realistisch konfiguriert
werden: - initialDelaySeconds basierend auf tatsächlicher
Startup-Zeit - periodSeconds häufig genug für zeitnahe
Erkennung - failureThreshold tolerant genug für temporäre
Probleme
Wichtige Metriken für Deployment-Monitoring: - Pod-Restart-Rate (indiziert Anwendungsprobleme) - Rollout-Dauer (Performance-Indikator) - Resource-Utilization (Skalierungsgrund) - Readiness-Probe-Erfolgsrate (Service-Qualität)