Auf dieser Seite werden Kubernetes Deployment-Objekte und ihre Verwendung in Google Kubernetes Engine (GKE) beschrieben.
Was ist ein Deployment?
Deployments stellen eine Gruppe mehrerer identischer Pods ohne eindeutige Identitäten dar. Ein Deployment führt mehrere Replikate einer Anwendung aus und ersetzt automatisch alle Instanzen, die fehlschlagen oder nicht mehr reagieren. Auf diese Weise sorgen Deployments dafür, dass eine oder mehrere Instanzen einer Anwendung für Nutzeranfragen verfügbar sind. Deployments werden vom Kubernetes-Deployment-Controller verwaltet.
Deployments verwenden eine Pod-Vorlage, die eine Spezifikation für die zugehörigen Pods enthält. Die Pod-Spezifikation legt fest, wie die einzelnen Pods aussehen: welche Anwendungen in den Containern ausgeführt werden, welche Volumes die Pods bereitstellen sollen, welche Labels sie haben usw.
Bei Änderung der Pod-Vorlage eines Deployments werden neue Pods automatisch der Reihe nach erstellt.
Nutzungsmuster
Deployments eignen sich gut für zustandslose Anwendungen, die ReadOnlyMany- oder ReadWriteMany-Volumes verwenden, die auf mehreren Replikaten installiert sind, aber nicht gut für Arbeitslasten, die ReadWriteOnce-Volumes verwenden. Verwenden Sie für zustandsorientierte Anwendungen, die ReadWriteOnce-Volumes nutzen, StatefulSets. StatefulSets wurden entwickelt, um zustandsorientierte Anwendungen und Clusteranwendungen bereitzustellen, die Daten in nichtflüchtigem Speicher beispielsweise von Compute Engine ablegen. StatefulSets eignen sich für das Bereitstellen von Kafka-, MySQL-, Redis-, ZooKeeper- und anderen Anwendungen, die eindeutige, dauerhafte Identitäten und stabile Hostnamen benötigen.
Deployments erstellen
Erstellen Sie ein Deployment mithilfe der Befehle kubectl apply
oder kubectl create
.
Nach dem Erstellen sorgt das Deployment dafür, dass die gewünschte Anzahl von Pods ausgeführt wird und jederzeit verfügbar ist. Das Deployment ersetzt automatisch Pods, für die Fehler auftreten oder die aus den Knoten entfernt werden.
Nachfolgend ein Beispiel für eine Deployment-Manifest-Datei im YAML-Format:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80
Für dieses Beispiel gilt Folgendes:
- Ein Deployment mit dem Namen
nginx
wird erstellt. Dies wird vom Feldmetadata: name
angezeigt. - Das Deployment erstellt drei replizierte Pods. Dies wird vom Feld
replicas
angegeben. - Die Pod-Vorlage bzw. das Feld
spec: template
gibt an, dass die zugehörigen Pods mit dem Labelapp: nginx
gekennzeichnet sind. - Die Spezifikation der Pod-Vorlage bzw. das Feld
template: spec
gibt an, dass die Pods einen Containernginx
ausführen. Dieser führt dasnginx
Docker Hub-Image in der Version 1.7.9 aus. - Das Deployment öffnet Port 80 zur Verwendung durch die Pods.
Weitere Informationen zu Deployment-Spezifikationen finden Sie in der Dokumentation zur Kubernetes API.
Zusammengefasst enthält die Pod-Vorlage die folgenden Anweisungen für Pods, die von diesem Deployment erstellt wurden:
- Jeder Pod ist mit dem Label
app: nginx
gekennzeichnet. - Erstellen Sie einen Container und nennen Sie ihn
nginx
. - Führen Sie das Image
nginx
in der Version1.7.9
aus. - Port
80
öffnen, um Traffic zu senden und zu empfangen.
Weitere Informationen zum Erstellen von Deployments finden Sie unter Deployment erstellen.
Deployments aktualisieren
Sie können ein Deployment aktualisieren, indem Sie Änderungen an der Spezifikation der zugehörigen Pod-Vorlage vornehmen. Durch Änderungen am Spezifikationsfeld wird automatisch ein Update-Rollout ausgelöst. Sie können kubectl
, die Kubernetes API oder das Menü "GKE-Arbeitslasten" in der Google Cloud Console verwenden.
Wenn ein Deployment eine Aktualisierung auslöst, stoppt das Deployment standardmäßig die Pods, skaliert die Anzahl der Pods schrittweise auf null, zieht die Pods dann ab und beendet sie. Anschließend verwendet das Deployment die aktualisierte Pod-Vorlage, um neue Pods zu erstellen.
Alte Pods werden erst entfernt, wenn eine ausreichende Anzahl neuer Pods ausgeführt wird. Neue Pods werden erst erstellt, nachdem eine ausreichende Anzahl alter Pods entfernt wurde.
Wenn Sie sehen möchten, in welcher Reihenfolge Pods erstellt und entfernt werden, können Sie kubectl describe deployments
ausführen.
Deployments können dafür sorgen, dass mindestens ein Replikat weniger als gewünscht ausgeführt wird, wobei höchstens ein Pod nicht verfügbar ist. Auf ähnliche Weise können Deployments dafür sorgen, dass höchstens ein Replikat mehr als gewünscht mit höchstens einem aktiven Pod mehr als gewünscht ausgeführt wird.
Mit dem Befehl kubectl rollout undo
lässt sich eine Aktualisierung rückgängig machen. Sie können auch kubectl rollout pause
verwenden, um ein Deployment vorübergehend zu stoppen.
Deployments verwalten
Nachfolgend sind die häufigsten Verwaltungsaufgaben für Deployments aufgelistet:
- Deployment überprüfen
- Deployment skalieren
- Deployment mithilfe eines
HorizontalPodAutoscaler
-Objekts automatisch skalieren - Deployment löschen
Status und Lebenszyklus
Deployments können sich während ihres Lebenszyklus in einem von drei Zuständen befinden: fortlaufend, abgeschlossen oder fehlgeschlagen.
Der Status fortlaufend zeigt an, dass die Deployment-Aufgaben ausgeführt werden, z. B. das Erstellen oder Skalieren der Pods.
Der Status abgeschlossen zeigt an, dass die Deployment-Aufgaben erfolgreich abgeschlossen wurden, alle Pods mit der neuesten Spezifikation ausgeführt werden und verfügbar sind sowie keine alten Pods mehr ausgeführt werden.
Der Status fehlgeschlagen weist darauf hin, dass beim Deployment ein oder mehrere Probleme aufgetreten sind, die einen Abschluss der Aufgaben verhindern. Zu den Ursachen zählen unzureichende Kontingente oder Berechtigungen, Image-Pull-Fehler, Grenzwertbereiche oder Laufzeitfehler. Sie können kubectl get deployment [DEPLOYMENT+NAME] -o yaml
ausführen und die Meldungen im Feld status: conditions
überprüfen, um die Ursachen für das Fehlschlagen eines Deployments zu untersuchen.
Mit dem Befehl kubectl rollout status
können Sie den Fortschritt eines Deployments überwachen oder seinen Status überprüfen.
Nächste Schritte
- Erfahren Sie, wie Sie eine zustandslose Anwendung bereitstellen.
- Weitere Informationen zu Pods
- Weitere Informationen zu Deployments in der Kubernetes-Dokumentation
- Weitere Informationen zu Kubernetes