Verteilter Anwendungsbetrieb

Was ist Container-Orchestrierung?

Container Orchestration

Container-Orchestrierung ist die automatische Verwaltung vieler Container über mehrere Rechner hinweg: Eine zentrale Steuerung verteilt sie auf die verfügbaren Knoten, startet ausgefallene Instanzen neu und hält den beschriebenen Soll-Zustand ohne Handarbeit aufrecht.

Sobald mehr als eine Handvoll Container auf mehreren Rechnern läuft, ist nicht mehr die Frage, wie du sie startest, sondern wer sie um drei Uhr nachts neu startet.

KI-generiertDieses Bild wurde mit KI erzeugt · Yves Hoppe / KI / cmt
Arbeitet mit
Einem beschriebenen Soll-Zustand
De-facto-Standard
Kubernetes, dazu Distributionen wie OpenShift
Braucht
Grenzwerte für Speicher und Rechenzeit
Verwechselt mit
Container-Laufzeitumgebung

Der Soll-Zustand wird beschrieben, nicht gestartet

Statt einzelne Startbefehle abzusetzen, legst du in einer Datei fest, was gelten soll: drei Kopien dieses Dienstes, dieses Image, so viel Arbeitsspeicher, erreichbar unter diesem Namen. Die Steuerungsebene vergleicht diesen Wunschzustand laufend mit der Wirklichkeit und gleicht Abweichungen selbst aus. Löscht jemand versehentlich eine Instanz, ist sie Sekunden später wieder da.

Dieses ständige Nachregeln ist der eigentliche Unterschied zu einem Skript, das Container startet. Ein Skript läuft einmal, eine Orchestrierung läuft immer. Deshalb reicht es auch nicht, eine Anwendung einmal auszurollen: Sie muss selbst melden können, ob sie betriebsbereit ist, sonst weiß die Plattform nicht, was sie reparieren soll.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: shop
spec:
  replicas: 3
  selector:
    matchLabels: {app: shop}
  template:
    metadata:
      labels: {app: shop}
    spec:
      containers:
      - name: shop
        image: registry.example.com/shop:1.4.2
        resources:
          requests: {cpu: 250m, memory: 256Mi}
          limits: {memory: 512Mi}
        readinessProbe:
          httpGet: {path: /health, port: 8080}

So sieht ein Soll-Zustand in Kubernetes aus. Die Datei sagt nicht, auf welchem Rechner die drei Kopien laufen, sondern nur, dass es drei sein sollen, mit welchem Image, wie viel Ressourcen jede braucht und woran die Plattform erkennt, dass eine Kopie Anfragen annehmen kann. Den Rest erledigt der Cluster.

Die Bausteine am Beispiel Kubernetes

Kubernetes ist der verbreitetste Orchestrator und hat die Begriffe geprägt, die auch andere Plattformen verwenden. Wer diese fünf kennt, kann fast jede Architekturskizze lesen.

  • Control Plane

    Die Steuerungsebene mit API-Server, Scheduler und der Datenbank etcd, in der der gewünschte Zustand des ganzen Clusters liegt.

  • Node

    Ein Arbeitsrechner, physisch oder virtuell, auf dem der Agent kubelet die zugewiesenen Container über eine Container-Laufzeit wie containerd startet.

  • Pod

    Die kleinste Einheit, die Kubernetes verteilt: ein oder mehrere Container, die sich Netzwerkadresse und Speicher teilen.

  • Deployment

    Beschreibt, wie viele Kopien eines Pods laufen sollen und in welcher Version, und sorgt bei Updates für den schrittweisen Austausch.

  • Service

    Ein fester interner Name mit stabiler Adresse, hinter dem sich die wechselnden Pods verbergen, samt einfacher Lastverteilung.

Verteilung, Selbstheilung und Skalierung im Betrieb

Der Scheduler sucht für jeden neuen Pod einen Knoten, der genug freie Ressourcen hat und die geforderten Bedingungen erfüllt, etwa eine bestimmte Region oder einen Knoten mit Grafikkarte. Fällt ein Knoten aus, verteilt die Plattform die betroffenen Instanzen auf die übrigen. Bei Lastspitzen kommen zusätzliche Kopien hinzu und verschwinden wieder, wenn die Last sinkt.

Neue Versionen rollen schrittweise aus: Erst wird eine Instanz getauscht und geprüft, dann die nächste. Meldet die neue Version sich nicht als bereit, stoppt der Vorgang, statt die ganze Anwendung mitzureißen, und die alte Version läuft weiter.

Kubernetes und die Alternativen

Kubernetes ist Open Source und wird von der Cloud Native Computing Foundation betreut. In Unternehmen läuft es selten pur, sondern als Distribution mit zusätzlicher Verwaltung, etwa Red Hat OpenShift oder Rancher, oder als verwalteter Dienst der großen Cloud-Anbieter wie Amazon EKS, Azure Kubernetes Service und Google Kubernetes Engine. Dort betreibt der Anbieter die Steuerungsebene, du kümmerst dich um die Knoten und die Anwendungen.

Daneben gibt es schlankere Orchestratoren. Docker Swarm ist in Docker eingebaut und für kleine Umgebungen schnell eingerichtet, HashiCorp Nomad verteilt neben Containern auch gewöhnliche Programme. Für einen einzelnen Rechner ist Docker Compose oder Podman mit systemd oft genug, auch wenn das streng genommen keine Orchestrierung über mehrere Knoten ist.

KI-generiertDieses Bild wurde mit KI erzeugt · Yves Hoppe / KI / cmt
Nicht verwechseln

Container-Orchestrierung und was oft damit gleichgesetzt wird

Container-Orchestrierung gegen Container-Laufzeitumgebung

Die Laufzeitumgebung, etwa containerd oder CRI-O, startet einen einzelnen Container auf einem einzelnen Rechner. Die Orchestrierung entscheidet, welcher Container auf welchem Rechner läuft, wie viele Kopien es gibt und was bei Ausfall passiert.

Container-Orchestrierung gegen Docker Compose

Compose beschreibt mehrere zusammengehörige Container in einer Datei und startet sie gemeinsam, aber nur auf einem Host. Es startet abgestürzte Container zwar neu, verteilt aber nichts auf andere Rechner und fängt den Ausfall der Maschine nicht auf.

Container-Orchestrierung gegen Virtualisierung

Eine virtuelle Maschine bringt ein eigenes Betriebssystem mit, ein Container teilt sich den Kernel des Hosts. Orchestrierung setzt meist auf virtuellen Maschinen auf, ersetzt sie aber nicht.

Container-Orchestrierung gegen CI/CD-Pipeline

Die Pipeline baut und testet dein Image und übergibt es an die Plattform. Was danach im laufenden Betrieb damit geschieht, regelt die Orchestrierung.

KI-generiertDieses Bild wurde mit KI erzeugt · Yves Hoppe / KI / cmt
In der Praxis

Der Cluster tut, was in den Dateien steht, nicht was gemeint war

Ohne angegebenen Bedarf und ohne Obergrenze kann der Scheduler nicht planen. Ein Dienst mit einem Speicherleck zieht dann den ganzen Knoten leer, das Betriebssystem beendet Prozesse nach eigenem Ermessen, und es trifft ausgerechnet den Nachbarn, der nichts falsch gemacht hat. Danach wandert die Störung von Knoten zu Knoten, weil die verschobenen Container den Fehler mitnehmen. Realistische Angaben zu Bedarf und Grenze sind deshalb keine Feinjustierung, sondern die Voraussetzung dafür, dass Ausfälle lokal bleiben.

Zustandsbehaftete Dienste sind der zweite wunde Punkt. Eine Datenbank im Cluster braucht Speicher, der ihr folgt, wenn sie auf einem anderen Knoten neu gestartet wird. Hängt der Speicher lokal am Blech oder erlaubt er nur einen schreibenden Zugriff, steht der Dienst nach dem Verschieben ohne seine Daten da. Das fällt im Testbetrieb mit kleinen Datenmengen nie auf.

Am meisten Schaden richten falsch gesetzte Prüfungen an, mit denen der Cluster feststellt, ob ein Dienst bereit und ob er noch am Leben ist. Ist die Frist zu knapp für eine Anwendung, die beim Start eine Minute braucht, startet der Cluster sie unermüdlich neu, und der Fehler sieht aus wie ein Absturz. Miss die tatsächliche Startzeit, bevor du die Werte setzt.

Container-Orchestrierung lernen

Wie du einen Cluster aufbaust, absicherst und im Störungsfall wieder einfängst, üben die Zertifizierungen der Linux Foundation an eigenen Umgebungen.

Ob ein Cluster wirklich gesund ist, siehst du erst mit passender Messtechnik, dafür gibt es eigene Kurse zur Überwachung verteilter Systeme.

Wissen prüfen

Sitzt Container-Orchestrierung schon?

Lesen fühlt sich schnell nach Können an. Ein kurzer Test zeigt dir, was davon schon sitzt und wo sich ein Kurs lohnt. Kostenlos, ohne Anmeldung, mit einer Erklärung zu jeder Antwort.

Häufige Fragen

Brauche ich Kubernetes, wenn ich nur drei Container betreibe?
Meistens nicht. Der Aufwand für Betrieb, Netzwerk und Rechteverwaltung lohnt sich erst, wenn mehrere Teams unabhängig ausrollen, wenn Ausfälle automatisch aufgefangen werden müssen oder wenn die Last stark schwankt. Für eine Handvoll stabiler Dienste reicht oft ein Compose-Aufbau.
Was passiert mit meinen Daten, wenn eine Instanz neu gestartet wird?
Alles, was im Container selbst liegt, ist weg. Daten, die überleben sollen, gehören in ein eingebundenes Volume, in Kubernetes ein Persistent Volume, oder in eine Datenbank außerhalb des Clusters. Das ist der häufigste Grund, warum eine Anwendung im Test funktioniert und im Cluster plötzlich Dateien verliert.
Wie viele Knoten braucht ein produktiver Cluster?
Für die Steuerungsebene sind drei Knoten üblich, damit bei einem Ausfall noch eine Mehrheit für Entscheidungen zusammenkommt. Die Anzahl der Arbeitsknoten richtet sich nach der Last, zwei sind das Minimum, damit Wartung ohne Ausfall möglich bleibt.
Ist Docker selbst schon eine Orchestrierung?
Nein, Docker baut Images und startet Container auf einem Rechner. Erst der eingebaute Swarm-Modus macht daraus einen kleinen Orchestrator über mehrere Hosts. Kubernetes nutzt Docker-Images problemlos, startet sie aber über eine eigene Laufzeit wie containerd.

Passt thematisch dazu

Ob sich der Aufwand für euch lohnt, hängt an Teamgröße und Lastprofil, und die Abwägung zeigt, ab welcher Größe sich ein Cluster rechnet.

Wer sich für Kubernetes entschieden hat, steht vor der nächsten Frage, und dafür gibt es die Rechnung zwischen verwaltetem Cluster und Eigenbetrieb.

Persönlich für dich da

Deine Ansprechpartner

Du willst das Thema nicht nur nachschlagen, sondern anwenden können? Wir beraten dich persönlich und kostenlos.

Yves Hoppe

Yves Hoppe

Weiterbildung & Beratung

Ordnet mit dir ein, welcher Kurs zu deinem Vorwissen passt.

Norbert Jansen

Norbert Jansen

Beratung & Inhouse

Plant Inhouse-Trainings, die an euren eigenen Daten und Abläufen ansetzen.

Container-Orchestrierung im Kurs statt im Lexikon

Nachschlagen bringt dich bis zum Verstehen. Anwenden lernst du an echten Aufgaben.