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

So stellen Sie Docker Compose Stacks mit Kompose in Kubernetes bereit

Mit Docker Compose können Sie Stapel von Containern definieren, die Sie gemeinsam verwalten können. Es ist ein relativ einfaches Tool, das sich ursprünglich auf lokale Docker-Installationen konzentrierte.

Kubernetes ist ein Container-Orchestrator, der mit einer eigenen Toolchain und eigenen Manifestdateien geliefert wird. Es wird normalerweise als komplexer als ein normaler Docker-Workflow angesehen, aber seine Funktionen erleichtern skalierbare Containerbereitstellungen in der Produktion.

Kompose ist ein Tool, mit dem Sie Docker Compose-Dateien nehmen und sie in Kubernetes-Clustern bereitstellen können. Es wurde im Rahmen des Kubernetes-Projekts entwickelt.

Aktuelle Kompose-Versionen sind auf die Konvertierung von YAML-Dateien beschränkt. Sie müssen die konvertierten Kubernetes-Ressourcenmanifeste mit einem Tool wie Kubectl auf Ihren Cluster anwenden. Ältere Kompose-Versionen hatten ein eingebautes up Befehl, der ohne einen zwischengeschalteten Konvertierungsschritt direkt in Ihrem Cluster bereitgestellt werden könnte. Dies wurde aufgrund wachsender technischer Komplexität entfernt.

Erste Schritte

Kompose ist für Windows, macOS und die gängigsten Linux-Distributionen verfügbar. Vorgefertigte Binärdateien sind im GitHub-Repository verfügbar. Laden Sie die neueste Version herunter, setzen Sie das ausführbare Berechtigungsbit und verschieben Sie die Binärdatei in ein Verzeichnis, das sich in Ihrem Pfad befindet. Mehrere Paketmanager werden ebenfalls unterstützt.

curl -L https://github.com/kubernetes/kompose/releases/download/v1.23.0/kompose-linux-amd64 -o komposechmod +x komposesudo mv ./kompose /usr/local/bin/kompose

Versuchen Sie, kompose auszuführen in Ihrem Endgerät. Sie sehen einige grundlegende Informationen zu den verfügbaren Befehlen. Ausführen von kompose version überprüft die von Ihnen verwendete Kompose-Version.

Stellen Sie nun sicher, dass Sie eine docker-compose.yml haben Datei verfügbar. Hier ist ein einfaches Beispiel, das einen Apache-Webserver mit einer MySQL-Datenbank einrichtet:

Version:"3"Dienste:Apache:Bild:httpd:neueste Ports:- 80:80 mysql:Bild:mysql:neueste Exposition:- 3306 Volumes:- mysql:/var/lib/mysqlvolumes:mysql: 

Sie benötigen außerdem einen Kubernetes-Cluster für die Bereitstellung. Erstellen Sie entweder einen neuen Cluster bei einem öffentlichen Cloud-Anbieter oder starten Sie Ihren eigenen mit einem Projekt wie MicroK8s.

Konvertieren Ihres Stacks

Die kompose convert Der Befehl akzeptiert den Pfad zu einer Docker Compose-Datei und gibt entsprechende Kubernetes-Ressourcenmanifeste aus. Es verwendet die docker-compose.yml in Ihrem Arbeitsverzeichnis, wenn kein Pfad angegeben ist. Mehrere Dateien werden über das -f akzeptiert Flagge.

kompose convert -f docker-compose.yml -f docker-compose-dev.yml

Sie sehen einige Ausgabezeilen, während Kompose Manifestdateien für jede der Ressourcen in Ihrem Compose-Stack schreibt. Für jede Komponente Ihrer docker-compose.yml werden individuelle Dateien erstellt . Sie werden in Ihrem Arbeitsverzeichnis abgelegt.

Hier ist das Ergebnis der Konvertierung der docker-compose.yml oben gezeigt:

Für jeden der Compose-Dienste wurde eine Kubernetes-Bereitstellung und ein Dienst erstellt. Diese Ressourcen definieren die zu erstellenden Pods sowie ihre Netzwerkroutingregeln.

Auch für den MySQL-Container existiert ein PersistentVolumeClaim. Dies stellt das in docker-compose.yml konfigurierte Volume dar , das dauerhaften Speicher für die MySQL-Datenbank bereitstellt, der jeden einzelnen Pod überdauert.

Wenn Sie die YAML-Dateien untersuchen, werden Sie feststellen, dass es sich nur um normale Kubectl-kompatible Kubernetes-Manifeste handelt. Hier ist die konvertierte apache-deployment.yaml Datei:

apiVersion:apps/v1kind:Deploymentmetadata:annotations:kompose.cmd:kompose convert kompose.version:1.23.0 (bc7d9f4f) creationTimestamp:null label:io.kompose.service:apache name:apachespec:repliks:1 selector:matchLabels:io.kompose.service:Apache-Strategie:{} Vorlage:Metadaten:Anmerkungen:kompose.cmd:kompose convert kompose.version:1.23.0 (bc7d9f4f) creationTimestamp:null Labels:io.kompose.service:Apache-Spezifikation:Container :- Bild:httpd:neuester Name:Apache Ports:- containerPort:80 Ressourcen:{} restartPolicy:Alwaysstatus:{}

Die spec der Bereitstellung ist der Definition des Apache-Containers in der ursprünglichen docker-compose.yml ziemlich ähnlich . Im Fall dieses einfachen Dienstes lässt er sich leicht einem Kubernetes-Objekt zuordnen. Der Rest der Datei besteht hauptsächlich aus Einstellungsmetadaten, einschließlich Kompose-spezifischer Anmerkungen, mit denen Sie Ressourcen identifizieren können, die mit dem Tool erstellt wurden.

Bereitstellung in Ihrem Cluster

Stellen Sie den Satz von Manifestdateien auf die übliche Weise mit kubectl apply bereit . Es ist eine gute Idee, sie in einem separaten Verzeichnis zu Ihrer docker-compose.yml zu speichern , sodass kubectl versucht auch nicht, diese inkompatible Datei auszuwählen.

kubectl anwenden .

Die Ressourcen werden in Ihrem Cluster bereitgestellt. Es kann einige Minuten dauern, bis Ihre Dienste ausgeführt werden. Untersuchen Sie Ihre Bereitstellung mit kubectl get deployments . Wenn der AVAILABLE Spalte zeigt 1 , sollte Ihr Workload zugänglich sein.

Jetzt können Sie Ihre Bereitstellung aktualisieren, indem Sie die generierten Manifeste bearbeiten und kubectl apply erneut ausführen . Wenn Sie Apache auf drei Replikate skalieren möchten, öffnen Sie apache-deployment.yaml , ändern Sie die replicas Feld auf 3 , und wenden Sie das geänderte Manifest an.

Sie können Ihre Docker Compose-Datei auch weiterhin aktualisieren. Führen Sie kompose convert aus erneut, um die neueste Kubernetes-Interpretation des Inhalts abzurufen, und wenden Sie die Ausgabe dann erneut auf Ihren Cluster an. Beachten Sie, dass dadurch alle Änderungen überschrieben werden, die Sie seitdem manuell angewendet haben.

Einschränkungen

Kompose funktioniert normalerweise gut mit Docker Compose-Dateien, wobei die gängigsten Funktionen und Best Practices verwendet werden. Es kann Container erstellen, Ports verfügbar machen und dauerhaften Speicher über Volumes bereitstellen.

Nicht jede Konvertierung wird jedoch perfekt sein. Einige Compose-Funktionen haben keine direkte Entsprechung in der Kubernetes-Welt, während andere auf eine Weise abgebildet werden, die Ihre Anforderungen möglicherweise nicht erfüllt. Die Verwendung von Bereitstellungen und Diensten in diesem Beispiel ist ein solcher Fall – wenn Sie direkt in Kubernetes bereitstellen, verwenden Sie möglicherweise eine Ingress-Regel, um Ihren Dienst verfügbar zu machen, aber diese wird nicht von Kompose erstellt. Eigenwillige Entscheidungen werden gelöst, indem die einfachste Option gewählt wird.

Sie werden auch auf Probleme mit Volumes stoßen. Docker Compose-Dateien können Mount-Dateien und -Ordner vom Host in Container binden. Dies ist mit Kubernetes nicht möglich, daher benötigen Sie eine alternative Lösung. Obwohl Kompose Ressourcen für PersistentVolumeClaims erstellen kann, erstellt es nicht die eigentlichen PersistentVolumes. In Ihrem Cluster muss bereits ein Volume verfügbar sein, bevor Sie versuchen, Ihre Manifeste bereitzustellen.

Eine vollständige Tabelle der unterstützten Funktionen und Konvertierungsdetails wird als Teil der Kompose-Dokumentation angeboten. Es lohnt sich zu überprüfen, ob die von Ihnen verwendeten Docker Compose-Funktionen unterstützt werden, bevor Sie mit der Konvertierung beginnen.

Schlussfolgerung

Kompose vereinfacht die Migration weg von Docker Compose zu einem Kubernetes-Cluster. Es automatisiert Schritte, die zuvor mühsam, zeitaufwändig und fehleranfällig waren. Es ist eine gute unterstützende Hilfe, obwohl es kein Tool ist, das ohne ein gewisses Maß an Aufsicht ausgeführt werden sollte.

Kompose-Konvertierungen sind nicht universell anwendbar und daher nicht für alle Umgebungen geeignet. Es lohnt sich immer, die ausgegebenen Manifeste zu überprüfen, bevor Sie sie auf Ihren Cluster anwenden. In einigen Fällen ist es am besten, Kompose als Referenz zu verwenden – konvertieren Sie Ihre docker-compose.yml , sehen Sie sich das Ergebnis an und verwenden Sie es dann als Ausgangspunkt, um Manifeste zu erstellen, die vollständig mit Ihrer Anwendung und Ihrem Cluster kompatibel sind.


Docker
  1. So installieren Sie Jenkins mit Docker

  2. So stellen Sie Microservices mit Docker bereit

  3. So verwenden Sie Docker Compose

  4. So stellen Sie Apps mit Rancher bereit

  5. So stellen Sie einen Nginx-Container mit Docker auf Linode bereit

So stellen Sie Single Node Kubernetes mit Microk8s auf Ubuntu 20.04 bereit

Von Docker Compose zu Kubernetes mit Podman

So führen Sie Jenkins in Docker mit Docker Compose with Volumes aus

So installieren Sie Docker Compose auf Ubuntu

So stellen Sie CouchDB als Cluster mit Docker bereit

So stellen Sie eine PHP-Anwendung mit Nginx und MySQL mit Docker und Docker Compose bereit