20 Application Deployment

Kubernetes Deployment kubectl Befehle

Kubernetes Pods stellen die grundlegenden Bausteine einer Kubernetes-Anwendung dar. Jeder Pod repräsentiert eine Laufzeitumgebung für einen oder mehrere Container, die eng zusammenarbeiten. Innerhalb des Pods teilen sich die Container Netzwerk- und Speicherressourcen und bilden eine logische Einheit für die Anwendungsdeployment.

Ein Deployment in Kubernetes ist ein höheres Konstrukt, das Pods und ReplicaSets verwaltet. Es ermöglicht das deklarative Update von Pods und ReplicaSets. Ein Deployment beschreibt einen gewünschten Zustand der Anwendung, und der Deployment Controller ändert den aktuellen Zustand zum gewünschten Zustand mit einer bestimmten Geschwindigkeit (Rolling-Update oder Rollback).

ReplicaSets sind eine weitere Schlüsselkomponente. Ein ReplicaSet stellt sicher, dass eine spezifizierte Anzahl von Pod-Replikaten zu jedem Zeitpunkt ausgeführt wird. Es bietet Redundanz und Stabilität für die Anwendung, indem es den Ausfall einzelner Instanzen von Pods handhabt. Wenn ein Pod fehlschlägt oder gelöscht wird, erstellt das ReplicaSet einen neuen, um die gewünschte Anzahl an Replikaten beizubehalten.

Die Architektur von Kubernetes mit Pods, ReplicaSets und Deployments wurde gewählt, um eine zuverlässige und skalierbare Orchestrierung von Containern zu ermöglichen. Sie fördert die Unabhängigkeit von einzelnen Container-Instanzen, indem sie Redundanz und Selbstheilung auf Pod-Ebene einführt. Diese Abstraktionsebenen erlauben es den Entwicklern und Administratoren, komplexe Anwendungen einfach zu verwalten und fortlaufend zu aktualisieren, ohne sich um die individuelle Container-Instanzen kümmern zu müssen.

20.1 Kubernetes Deployment

Ein Kubernetes Deployment ist eine höhere Abstraktionsebene über Pods und ReplicaSets und ermöglicht die automatische Aktualisierung von Container-Images und Replikation. Es bietet Funktionen wie Zero-Downtime-Updates und Rollback.

20.1.1 Merkmale

20.1.2 Manifest

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: my-image:1.0

Kommandos

20.1.2.1 Skalierung

Skalieren kann entweder durch Änderung der replicas in der YAML-Datei oder durch den Befehl kubectl scale erfolgen:

kubectl scale deployment my-deployment --replicas=4

20.1.2.2 Health Check

Liveness und Readiness Probes können zur Überwachung der Pod-Gesundheit hinzugefügt werden.

        livenessProbe:
          httpGet:
            path: /health
            port: 8080
        readinessProbe:
          httpGet:
            path: /ready
            port: 8080

20.1.2.3 Best Practices