GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

So skalieren Sie Docker-Container serverübergreifend mit Kubernetes

Docker ist eine entwicklerorientierte Containerisierungsplattform, mit der Sie Anwendungen als eigenständige Container verpacken können. Sie werden überall ausgeführt, wo eine kompatible Containerlaufzeit verfügbar ist.

Die Popularität von Docker hat es fast zum Synonym für Container gemacht, aber es ist nicht die perfekte Technologie für alle Anwendungsfälle. Die Verwendung von Docker im Ist-Zustand stellt Herausforderungen in der Produktion dar, da die Befehlszeilenschnittstelle nur für die Verwaltung einzelner Container ausgestattet ist.

Kubernetes ist eine Orchestrierungsplattform, die Stapel von Containern verwaltet und sie über mehrere Server hinweg skaliert. Sie können auf einer ganzen Flotte physischer Maschinen bereitstellen und so die Redundanz und Ausfallsicherheit Ihres Dienstes verbessern. So können Sie Ihren eigenen Cluster starten, um Ihre „Docker“-Container zu skalieren.

Kubernetes-Grundlagen

Das Erkennen einiger wichtiger Kubernetes-Begriffe hilft Ihnen, die Unterschiede zu Docker zu verstehen. Das Kubernetes-Wörterbuch beschreibt Dutzende von Ressourcen, die Sie Ihrem Cluster hinzufügen können. Für diesen Artikel sind nur die Komponenten relevant, die die Containerplanung steuern.

Auf hoher Ebene ist eine Kubernetes-Installation ein Cluster von „Knoten“. Knoten sind unabhängige physische Maschinen, die Ihre Workloads hosten. Ein einzelner „Master“-Knoten ist für die Koordinierung („Orchestrierung“) der Vorgänge des Clusters verantwortlich, indem neue Container dem am besten geeigneten Worker-Knoten „geplant“ werden.

Hier sind einige wichtige Begriffe:

  • Meister – Der Masterknoten betreibt den Cluster. Dies ist die Maschine, auf der Sie Kubernetes installieren. Es führt die Steuerungsebene aus und delegiert das Hosten von containerisierten Anwendungen an Worker-Knoten.
  • Steuerungsebene – Die Steuerungsebene ist die Softwarekomponente des Masterknotens. Es enthält mehrere Dienste, darunter einen API-Server, einen Konfigurationsspeicher und einen Container-Scheduler.
  • Knoten – Ein Knoten ist eine Maschine, die Ihre Container hostet. Jeder Worker führt eine Kubernetes-Komponente namens Kubelet aus. Diese bleibt in Kontakt mit der Kontrollebene und erhält Planungsanweisungen, die sie zur Bereitstellung neuer Container einsetzt.
  • Pod – Ein Pod ist die kleinste Recheneinheit in einem Kubernetes-Cluster, die eine Gruppe von Containerinstanzen darstellt. Mit der Pod-Abstraktion können Sie mit mehreren laufenden Containern insgesamt interagieren.
  • Replik-Set – Replikatsätze sind für die Skalierung von Pods verantwortlich, um sicherzustellen, dass eine bestimmte Anzahl von Replikaten verfügbar ist. Wenn Sie drei Replikate eines Pods anfordern, garantiert der Replikatsatz, dass die Verfügbarkeitsbeschränkung erfüllt wird. Pods werden automatisch ersetzt, wenn sie ausfallen, sodass Sie die Containerreplikation serverübergreifend automatisieren können.

Das Erstellen eines skalierbaren Clusters erfordert einen Master-Knoten, mindestens zwei Worker-Knoten und eine Bereitstellung, die mehrere Replikate bereitstellt. Kubernetes kann Ihre Pods über alle verfügbaren Knoten hinweg planen, sodass Sie widerstandsfähig sind, falls einer ausfällt.

Cluster erstellen

Kubernetes ist als verwaltetes Angebot von den meisten großen Cloud-Anbietern verfügbar. Diese bieten eine Möglichkeit, mit einem Klick Ihre Steuerungsebene zu erstellen und eine variable Anzahl von Worker-Knoten hinzuzufügen.

Sie können einen Cluster auf Ihrer eigenen Hardware ausführen, indem Sie eine eigenständige Kubernetes-Distribution wie MicroK8s verwenden. Sie benötigen mindestens zwei isolierte physische oder virtuelle Maschinen, wenn Sie redundante Planungsunterstützung wünschen.

Installieren Sie MicroK8s auf beiden Maschinen. Legen Sie einen Knoten als Master fest und verwenden Sie den add-node Befehl zum Starten des Knotenregistrierungsprozesses:

microk8s add-node

Dadurch wird ein microk8s join ausgegeben Befehl. Wechseln Sie zu Ihrem sekundären Knoten und führen Sie den Befehl aus. Er wird dem ersten Cluster als neuer Worker beitreten. Jetzt sind beide Maschinen bereit, Ihre Container-Workloads zu hosten.

Definieren einer horizontal skalierenden Bereitstellung

Eine Anwendung, die auf mehreren Servern läuft, wird als „horizontal skaliert“ bezeichnet. Es breitet sich über mehrere unterschiedliche Umgebungen aus. Die vertikale Skalierung eines Systems beinhaltet das Hinzufügen von Ressourcen zu einer bestehenden Umgebung.

Der einfachste Weg, eine Kubernetes-Workload zu definieren, ist ein Deployment. Dieser Ressourcentyp erstellt Pods aus einem Container-Image und richtet öffentliche Netzwerkrouten über einen Dienst ein. Bereitstellungen sind standardmäßig eine einzelne Pod-Instanz, können aber mit mehreren Replikaten konfiguriert werden.

Hier ist ein einfaches Bereitstellungsmanifest:

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:latest
        ports:
        - containerPort: 80

Wenden Sie das Manifest mit Kubectl auf Ihren Cluster an:

microk8s kubectl apply -f ./manifest.yaml

Kubernetes erstellt drei Pods, von denen jeder einen NGINX-Webserver hostet, der aus nginx:latest erstellt wurde Bild. Port 80 wird als Containerport bereitgestellt, um eingehenden Datenverkehr zu ermöglichen.

Pods werden automatisch über die Knoten Ihres Clusters verteilt. Ein Knoten ist berechtigt, einen Pod zu hosten, wenn er genügend Ressourcen bereitstellen kann.

Sie können die Anzahl der Replikate jederzeit aktualisieren. Ändern Sie die replicas Feld in Ihrem Manifest und wenden Sie es erneut auf Ihren Cluster an. Der Kubernetes-Scheduler wird Maßnahmen ergreifen, um neue Pods bereitzustellen oder alte Pods nach Bedarf zu beenden. Wenn Sie replicas skalieren auf 0 herunter, können Sie Ihre Anwendung offline schalten, ohne die Bereitstellung oder die zugehörigen Ressourcen tatsächlich zu löschen.

Knoten dynamisch hinzufügen

Durch die Aktualisierung der Replikatanzahl können Sie die vorhandenen Ressourcen in Ihrem Cluster nutzen. Letztendlich könnten Sie Ihre kombinierte Knotenkapazität vollständig erschöpfen, wodurch verhindert wird, dass neue Pods geplant werden. Kubernetes bietet eine Einrichtung zur automatischen Clusterskalierung, die Knoten erstellen und zerstören kann , was effektiv die Anzahl der Pods ändert, die geplant werden können.

Die Einrichtung der automatischen Skalierung ist relativ aufwendig. Der genaue Prozess hängt von der Hosting-Umgebung Ihres Clusters ab. Es erfordert die Integration mit einem Cluster Autoscaler, der sich in Ihren Host einklinken kann, um Bedarfsänderungen zu erkennen. Offizielle Dokumentation ist für Google Cloud verfügbar; Lösungen sind auch von Amazon EKS und Microsoft AKS erhältlich.

Die automatische Skalierung funktioniert, indem eine ständige Überprüfung auf Pods durchgeführt wird, die aufgrund unzureichender Clusterkapazität nicht geplant werden können. Es wird auch bewertet, ob die erfolgreich geplanten Pods tatsächlich mit einer reduzierten Anzahl von Knoten zusammengelegt werden könnten. Der Auto-Scaler verwendet dann die API Ihres Cloud-Anbieters, um Recheninstanzen hinzuzufügen und zu entfernen, und passt die Ressourcen Ihres Clusters dynamisch an. Dies kann sich auf Ihre Rechnung auswirken, da das Erstellen einer neuen Instanz normalerweise kostenpflichtig ist.

Zusammenfassung

Kubernetes erleichtert die Verteilung von Containerinstanzen auf mehrere Server. Registrieren Sie Ihre Maschinen als Knoten oder verwenden Sie einen verwalteten Cloud-Cluster und erstellen Sie dann Bereitstellungen mit den replicas Feld gesetzt. Sie können Ihre Arbeitslast skalieren, indem Sie die Anzahl der angeforderten Replikate aktualisieren.

Wenn schwerwiegende Nachfrageänderungen zu erwarten sind, verwenden Sie die automatische Skalierung, um die Kapazität dynamisch zu erweitern. Mit dieser Funktion können Sie im Handumdrehen neue Knoten erstellen und zusätzliche Ressourcen hinzufügen, sodass Sie die Anzahl Ihrer Replikate weiter erhöhen können.

Wenn Sie Pods skalieren, müssen Sie daran denken, dass auch eine Form der Verteilung des eingehenden Datenverkehrs erforderlich ist. Wenn Sie Port 80 verfügbar machen, muss Kubernetes in der Lage sein, Anfragen auf beliebigen Port 80 zuzuordnen der Knoten. Dies funktioniert automatisch mit Bereitstellungen und Diensten. Kubernetes erstellt einen Load Balancer, der Pods kontinuierlich überwacht, um herauszufinden, wohin der Datenverkehr geleitet werden kann.


Docker
  1. So installieren Sie WordPress mit Docker

  2. So verwenden Sie Docker Compose

  3. So verbinden Sie Docker-Container

  4. So übergeben Sie Umgebungsvariablen an Docker-Container

  5. So listen Sie Docker-Container auf

So reduzieren Sie die Docker-Image-Größe in Docker-Containern

So führen Sie Docker-Container aus

So entfernen Sie Docker-Container

So stoppen Sie Docker-Container

So benennen oder umbenennen Sie Docker-Container

So konfigurieren Sie Netzwerk-Namespaces in Docker-Containern