VM-basierte App in Kubernetes verschieben
Für dieses Lernprogramm können Kosten anfallen. Mit dem Kostenschätzer können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung generieren.
In diesem Lernprogramm erfahren Sie, wie Sie eine VM-basierte App mithilfe von Kubernetes Service in einen Kubernetes-Cluster verschieben. Kubernetes Service stellt leistungsfähige Tools bereit, indem Container- und Kubernetes-Technologien, eine intuitive Benutzererfahrung sowie integrierte Sicherheit und Isolation kombiniert werden, um die Bereitstellung, den Betrieb, die Skalierung und das Monitoring containerisierter Anwendungen in einem Cluster von Rechenhosts zu automatisieren.
Die Lerneinheiten in diesem Lernprogramm enthalten Konzepte dazu, wie eine vorhandene App genommen, containerisiert und auf einem Kubernetes-Cluster bereitgestellt wird. Zur Containerisierung Ihrer VM-basierten App können Sie unter den folgenden Optionen auswählen.
- Bestandteile einer Monolith-App identifizieren, die in einen eigenen Microservice aufgeteilt werden können. Sie können diese Mikrodienste in Containern bereitstellen und in Kubernetes implementieren.
- Containerisieren Sie die gesamte App und stellen Sie die App in einem Kubernetes-Cluster bereit.
Abhängig vom Typ der App, die Sie haben, können sich die Schritte für die Migration Ihrer App unterscheiden. In diesem Lernprogramm können Sie sich mit den allgemeinen Schritten vertraut machen, die Sie ausführen müssen, und Gesichtspunkte kennenlernen, die Sie vor der Migration Ihrer App berücksichtigen müssen.
Ziele
- Verstehen Sie, wie Sie Microservices in einer VM-basierten App identifizieren und wie Sie Komponenten zwischen VMs und Kubernetes zuordnen.
- Vorgehensweise zur Containerisierung einer VM-basierten App kennenlernen
- Vorgehensweise zur Bereitstellung des Containers auf einem Kubernetes-Cluster in Kubernetes Service kennenlernen
- Das Gelernte in die Praxis umsetzen und die App JPetStore im Cluster ausführen
Architektur
Traditionelle App-Architektur mit VMs
Das folgende Diagramm zeigt ein Beispiel für eine traditionelle App-Architektur, die auf virtuellen Maschinen (VMs) basiert.
- Der Benutzer sendet eine Anforderung an den öffentlichen Endpunkt der App. Der öffentliche Endpunkt wird durch einen Lastausgleichsservice dargestellt, der den eingehenden Netzverkehr zwischen den verfügbaren App-Serverinstanzen verteilt.
- Die Lastausgleichsfunktion wählt eine der einwandfreien App-Serverinstanzen aus, die auf einer VM ausgeführt werden, und leitet die Anforderung weiter. App-Dateien, wie der App-Code, Konfigurationsdateien und Abhängigkeiten, werden auf der VM des App-Servers gespeichert.
- Der App-Server speichert App-Daten in MySQL, die auf einer Datenbank-VM läuft.
Containerisierte Architektur
Das folgende Diagramm zeigt ein Beispiel für eine moderne Containerarchitektur, die in einem Kubernetes-Cluster ausgeführt wird.
- Der Benutzer sendet eine Anforderung an den öffentlichen Endpunkt der App. Der öffentliche Endpunkt wird durch eine Ingress-Lastausgleichsfunktion für Anwendungen (ALB) dargestellt, die eingehenden Netzverkehr auf die App-Pods im Cluster verteilt. Die ALB enthält eine Sammlung von Regeln, die eingehenden Netzverkehr an eine öffentlich zugänglich gemachte App zulassen.
- Die ALB leitet die Anforderung an einen der verfügbaren App-Pods im Cluster weiter. App-Pods werden auf Workerknoten ausgeführt, bei denen es sich um eine virtuelle oder eine physische Maschine handeln kann.
- App-Pods speichern Daten auf persistenten Datenträgern. Persistente Datenträger können verwendet werden, um Daten zwischen App-Instanzen oder Workerknoten gemeinsam zu nutzen.
- App-Pods speichern Daten in einem IBM Cloud-Datenbankservice. Sie können eine eigene Datenbank im Kubernetes-Cluster ausführen, jedoch ist die Verwendung einer verwalteten Database as a Service-Datenbank (DBaaS) in der Regel einfacher zu konfigurieren und stellt integrierte Backup- und Skalierungsfunktionen bereit. Im IBM Cloud-Katalog finden Sie viele Datenbanktypen.
VMs, Container und Kubernetes
Kubernetes Service bietet die Funktionalität zur Ausführung von containerisierten Apps in Kubernetes-Clustern und stellt die folgenden Tools und Funktionen zur Verfügung:
- Intuitive Benutzererfahrung und leistungsstarke Tools.
- Integrierte Sicherheit und Isolierung für eine schnelle Bereitstellung sicherer Anwendungen.
- Cloud-Dienste, die kognitive Fähigkeiten von Watson™ beinhalten.
- Fähigkeit, dedizierte Cluster-Ressourcen sowohl für zustandslose Anwendungen als auch für zustandsbehaftete Arbeitslasten zu verwalten.
Virtuelle Maschinen und Container im Vergleich
Virtuelle Maschinen (VMs) werden als traditionelle Apps auf nativer Hardware ausgeführt. Eine einzelne App verwendet in der Regel nicht den vollen Umfang der Ressourcen eines einzelnen Rechenhosts. Die meisten Organisationen versuchen, mehrere Apps auf einem Rechenhost auszuführen, um keine Ressourcen zu vergeuden. Sie könnten mehrere Kopien derselben App ausführen, jedoch können Sie zur Bereitstellung von Isolation VMs verwenden, um mehrere App-Instanzen (VMs) auf derselben Hardware auszuführen. Diese VMs verfügen über vollständige Betriebssystem-Stacks, die sie aufgrund von Duplizierungen sowohl zur Laufzeit als auch auf der Festplatte relativ ineffizient machen.
Container sind eine Standardmethode zur Paketierung von Apps und aller zugehörigen Abhängigkeiten, sodass sich die Apps nahtlos zwischen Umgebungen verschieben lassen. Im Gegensatz zu virtuellen Maschinen ist bei Containern das Betriebssystem nicht in das Paket einbezogen. Nur App-Code, Laufzeit, Systemtools, Bibliotheken und Einstellungen werden in Container gepackt. Container sind schlanker, leichter portierbar und effizienter als virtuelle Maschinen.
Darüber hinaus ermöglichen Container eine gemeinsame Nutzung des Hostbetriebssystems. Dadurch verringert sich die Duplizierung von Ressourcen, während die Isolationsfunktion erhalten bleibt. Container ermöglichen außerdem den Ausschluss nicht benötigter Dateien, wie Systembibliotheken und Binärdateien, um Speicherplatz einzusparen und Ihre potenzielle Angriffsfläche zu verkleinern. Weitere Informationen zu virtuellen Maschinen und Containern finden Sie unter Was sind Container?.
Kubernetes-Orchestrierung
Kubernetes ist ein Container-Orchestrator zur Verwaltung des Lebenszyklus von containerisierten Apps in einem Cluster von Arbeitsknoten. Ihre Apps benötigen für die Ausführung möglicherweise viele weitere Ressourcen, wie zum Beispiel Datenträger, Netze und geheime Schlüssel, die die Verbindung zu anderen Cloud-Services unterstützen, sowie sichere Schlüssel. Kubernetes hilft Ihnen, diese Ressourcen für Ihre App hinzuzufügen. Das Schlüsselparadigma von Kubernetes ist das deklarative Modell. Der Benutzer gibt den gewünschten Status an und Kubernetes versucht, den beschriebenen Status zu erfüllen und anschießend zu erhalten.
Dieser Kubernetes zum Selbststudium kann Ihnen dabei helfen, erste praktische Erfahrungen mit Kubernetes zu sammeln. Weitere Informationen zu den Konzepten von Kubernetes finden Sie auf der Dokumentationsseite Kubernetes konzepte.
Was IBM für Sie tut
Die Verwendung von Kubernetes-Clustern mit IBM Cloud Kubernetes Service bietet Ihnen die folgenden Vorteile:
- Mehrere Rechenzentren, in denen Sie Ihre Cluster bereitstellen können
- Unterstützung von Optionen für Netze mit Ingress- und Lastausgleichsfunktionen
- Unterstützung für dynamische persistente Datenträger
- Hoch verfügbare, von IBM verwaltete Kubernetes-Master
Cluster dimensionieren
Beim Entwurf Ihrer Clusterarchitektur wollen Sie die Aspekte der Kosten einerseits und die Aspekte der Verfügbarkeit, Zuverlässigkeit, Komplexität und Wiederherstellung andererseits gegeneinander abwägen. Kubernetes-Cluster in IBM Cloud Kubernetes Service stellen architekturbezogene Optionen entsprechend den Anforderungen Ihrer Apps bereit. Mit ein wenig Planung können Sie Ihre Cloudressource optimal nutzen, ohne die Architektur überzustrapazieren oder zu hohe Kosten aufzuwenden. Selbst wenn Sie zu hoch oder zu niedrig schätzen, können Sie Ihren Cluster ganz einfach vergrößern oder verkleinern, indem Sie entweder die Anzahl oder die Art der Arbeitsknoten ändern.
Berücksichtigen Sie für die Ausführung einer App auf Produktionsebene in der Cloud unter Verwendung von Kubernetes die folgenden Aspekte:
- Erwarten Sie Datenverkehr von einem bestimmten geografischen Standort? Wenn dies der Fall ist, wählen Sie den Standort (Position) aus, der sich Ihnen physisch am nächsten befindet, um die beste Leistung zu erzielen.
- Wie viele Replikate Ihres Clusters sollen für hohe Verfügbarkeit bereitgestellt werden? Ein guter Ausgangspunkt könnten drei Cluster sein: einer für die Entwicklung, einen für Tests und einen für die Produktion. Lesen Sie das Lösungshandbuch Best Practices für die Organisation von Ressourcen und die Zuweisung von Zugriff für die Erstellung mehrerer Umgebungen.
- Welche Hardware benötigen Sie für die Workerknoten? Virtuelle Maschinen oder Bare-Metal-Einheiten?
- Wie viele Workerknoten benötigen Sie? Dies hängt im Wesentlichen von der Skalierung (Scale) Ihrer App ab: je mehr Knoten Sie haben, desto ausfallsicherer ist Ihre App.
- Wie viele Replikate sollten Sie für hohe Verfügbarkeit haben? Stellen Sie Replikatcluster an mehreren Standorten (Positionen) bereit, um Ihre App verfügbarer zu machen und sie gegen Ausfallzeiten aufgrund von Standortfehlern zu schützen.
- Welche Ressourcen benötigt Ihre App mindestens, um gestartet zu werden? Sie können Ihre App testen, um ihren Speicherbedarf und den CPU-Bedarf für die Ausführung zu ermitteln. Ihre Workerknoten sollten über ausreichend Ressourcen verfügen, um die App bereitstellen und starten zu können. Stellen Sie sicher, dass Sie anschließend Ressourcenquoten (Größenbeschränkungen) im Rahmen der Podspezifikationen festlegen. Diese Einstellung wird von Kubernetes zur Auswahl (oder Planung) eines Workerknotens verwendet, der über ausreichend Kapazität zur Unterstützung der Anforderung verfügt. Schätzen Sie die Anzahl der Pods, die auf dem Workerknoten ausgeführt werden, und den Ressourcenbedarf für diese Pods.
- Wann sollte die Anzahl der Arbeitsknoten erhöht werden? Sie können die Clusternutzung überwachen und die Anzahl der Knoten bei Bedarf erhöhen. Siehe Überwachung des Zustands des Clusters.
- Benötigen Sie redundanten, zuverlässigen Speicher? Wenn ja, erstellen Sie einen persistenten Volume-Anspruch für NFS oder binden Sie IBM Cloud an Ihren Pod.
- Müssen Sie einen Cluster in der Virtual Private Cloud-Infrastruktur oder in der klassischen Infrastruktur bereitstellen? Die VPC gibt Ihnen die Sicherheit einer privaten Cloudumgebung mit der dynamischen Skalierbarkeit einer öffentlichen Cloud.
Um die vorherigen Schritte zu konkretisieren, nehmen wir an, dass Sie eine produktive Webanwendung in der Cloud ausführen möchten und mit einer mittleren bis hohen Auslastung rechnen. Ermitteln Sie die Ressourcen, die Sie zu diesem Zweck benötigen würden:
- Richten Sie drei Cluster ein: einen für die Entwicklung, einen für das Testen und einen für die Produktion.
- Die Entwicklungs- und Testcluster können mit einer minimalen RAM- und CPU-Option (z. B. 2 CPUs, 4GB und ein Arbeitsknoten für jeden Cluster) beginnen.
- Für den Produktionscluster können Sie aus Gründen der Leistung, hohen Verfügbarkeit und Ausfallsicherheit mehr Ressourcen nutzen. Wir könnten uns für eine dedizierte oder sogar eine Bare-Metal-Option entscheiden und mindestens 4 CPUs, 16GB und zwei Arbeitsknoten haben.
Zu verwendende Datenbankoption festlegen
Mit Kubernetes haben Sie zwei Optionen zur Handhabung von Datenbanken:
- Sie können Ihre Datenbank in einem Kubernetes-Cluster ausführen. Dazu müssten Sie einen Microservice zur Ausführung der Datenbank erstellen. Wenn Sie zum Beispiel eine MySQL-Datenbank verwenden, müssten Sie die folgenden Schritte durchführen:
- Erstellen Sie eine MySQL. Ein Beispiel MySQL finden Sie hier.
- Sie müssten geheime Schlüssel zum Speichern der Datenbankberechtigungsnachweise verwenden. Ein Beispiel hierzu finden Sie hier.
- Sie würden eine Datei
deployment.yamlmit der Konfiguration Ihrer Datenbank benötigen, die in bereitgestellt bereitgestellt werden soll. Ein Beispiel hierzu finden Sie hier.
- Die zweite Option bestünde aus der Verwendung der verwalteten Database as a Service-Option (DBaaS). Diese Option ist zumeist einfacher zu konfigurieren und stellt integrierte Backup- und Skalierungsfunktionen bereit. Im IBM Cloud-Katalog finden Sie viele Datenbanktypen. Zur Verwendung dieser Option müssten Sie wie folgt vorgehen:
- Erstellen Sie eine verwaltete Database as a Service (DBaaS) aus dem IBM Cloud-Katalog.
- Speichern Sie die Datenbankberechtigungsnachweise in einem geheimen Schlüssel. Mehr über Geheimnisse erfahren Sie im Abschnitt Speichern Sie Anmeldeinformationen in Kubernetes secrets.
- Verwenden Sie eine DBaaS-Instanz in Ihrer Anwendung.
Position zum Speichern von Anwendungsdateien festlegen
Kubernetes Service stellt verschiedene Optionen zur podübergreifenden Speicherung und gemeinsamen Nutzung von Daten bereit. Nicht alle Speicheroptionen bieten die gleiche Ebene von Persistenz und Verfügbarkeit bei Standortausfällen.
Nicht persistenter Datenspeicher
Container und Pods sind per Definition Komponenten mit kurzer Lebensdauer, die kurzfristig und unerwartet ausfallen können. Sie können Daten im lokalen Dateisystem eines Containers speichern. Daten in einem Container können nicht mit anderen Containern oder Pods gemeinsam genutzt werden und gehen verloren, wenn der Container ausfällt oder entfernt wird.
Erstellung des persistenten Datenspeichers für Apps kennenlernen
Sie können App-Daten und Container-Daten auf NFS oder Blockspeichern persistieren, indem Sie native persistente Kubernetes Volumes verwenden.
Zur Bereitstellung von NFS-Dateispeicher oder Blockspeicher müssen Sie Speicher für Ihren Pod anfordern, indem Sie einen Persistent Volume Claim (PVC, Anforderung für persistenten Datenträger) erstellen. In Ihrem PVC können Sie aus vordefinierten Speicherklassen auswählen, die die Art des Speichers, die Speicherkapazität in Gigabyte, IOPS, die Datenaufbewahrungsrichtlinie und die Lese- und Schreibberechtigungen für Ihren Speicher definieren. Ein PVC stellt einen persistenten Datenträger (PV - Persistent Volume) dynamisch bereit, der eine reale Speichereinheit in IBM Cloud darstellt. Sie können den PVC an Ihren Pod anhängen, um Lese- und Schreiboperationen auf dem PV auszuführen. Daten, die in PVs gespeichert werden, sind verfügbar, auch wenn der Container ausfällt oder der Pod neu geplant wird. NFS und der Blockspeicher, der die PV unterstützt, werden von IBM geclustert, um eine hohe Verfügbarkeit Ihrer Daten zu gewährleisten.
Informationen zur Erstellung eines PVC finden Sie in den Schritten, die in der Dokumentation zu Kubernetes Service-Speicher beschrieben werden.
Verschiebung vorhandener Daten in persistenten Speicher kennenlernen
Zum Kopieren von Daten von Ihrer lokalen Maschine auf Ihren persistenten Speicher müssen Sie den PVC an einen Pod anhängen. Anschließend können Sie Daten von Ihrer lokalen Maschine auf den persistenten Datenträger in Ihrem Pod kopieren.
-
Zum Kopieren von Daten müssen Sie zunächst eine Konfiguration erstellen, die etwa wie folgt aussieht:
kind: Pod apiVersion: v1 metadata: name: task-pv-pod spec: volumes: - name: task-pv-storage persistentVolumeClaim: claimName: mypvc containers: - name: task-pv-container image: nginx ports: - containerPort: 80 name: "http-server" volumeMounts: - mountPath: "/mnt/data" name: task-pv-storage -
Anschließend würden Sie einen Befehl wie den folgenden verwenden, um Daten von Ihrer lokalen Maschine in den Pod zu kopieren:
kubectl cp <local_filepath>/<filename> <namespace>/<pod>:<pod_filepath> -
Kopieren Sie Daten von einem Pod in Ihrem Cluster auf Ihre lokale Maschine:
kubectl cp <namespace>/<pod>:<pod_filepath>/<filename> <local_filepath>/<filename>
Backups für persistenten Speicher einrichten
Gemeinsam genutzte Dateiressourcen und Blockspeicher werden an derselben Position wie Ihr Cluster bereitgestellt. Der Speicher selbst wird von IBM auf Cluster-Servern gehostet, um hohe Verfügbarkeit bereitzustellen. Allerdings werden gemeinsam genutzte Dateiressourcen und Blockspeicher nicht automatisch durch Backups gesichert und können nicht mehr erreichbar sein, wenn ein gesamter Standort ausfällt. Wenn Sie Ihre Daten gegen Verlust oder Beschädigung schützen wollen, können Sie regelmäßige Backups einrichten, durch die Sie Ihre Daten bei Bedarf wiederherstellen können.
Weitere Informationen finden Sie unter "Planung von Speicheroptionen für NFS und Blockspeicher".
Code vorbereiten
12-Faktor-Prinzipien anwenden
Die Zwölf-Faktor-App ist eine Methodik zur Erstellung von Cloud-nativen Apps. Wenn Sie eine App containerisieren, diese App in die Cloud verschieben und sie mit Kubernetes orchestrieren wollen, ist es wichtig, einige dieser Prinzipien zu verstehen und anzuwenden. Einige dieser Prinzipien sind in IBM Cloud erforderlich.
Die folgenden Schlüsselprinzipien sind erforderlich:
- Codebasis - Sämtliche Quellcode- und Konfigurationsdateien werden in einem Versionssteuerungssystem verfolgt (z. B. in einem Git-Repository). Dies ist erforderlich, wenn eine DevOps-Pipeline für die Entwicklung genutzt wird.
- Build, Veröffentlichung, Ausführung - Die 12-Faktor-App verwendet eine strikte Trennung der Build-, Veröffentlichungs- und Ausführungsphase. Dies kann durch eine integrierte DevOps-Delivery Pipeline automatisiert werden, sodass die App erstellt (Build) und getestet wird, bevor sie im Cluster bereitgestellt wird. Lesen Sie das Lernprogramm App in Kubernetes, um zu erfahren, wie Sie eine Pipeline für kontinuierliche Integration und Bereitstellung einrichten. Es behandelt die Einrichtung von Phasen der Quellcodeverwaltung, Erstellung, Prüfung und Bereitstellung und zeigt Ihnen, wie Sie Integrationen wie Sicherheitsscanner, Benachrichtigungen und Analysen hinzufügen können.
- Konfiguration - Sämtliche Konfigurationsinformationen werden in Umgebungsvariablen gespeichert. Im App-Code werden keine Serviceberechtigungsnachweis fest codiert. Zum Speichern von Berechtigungsnachweisen können Sie geheime Kubernetes-Schlüssel verwenden. Weitere Informationen zu Berechtigungsnachweisen später.
Berechtigungsnachweise in geheimen Kubernetes-Schlüsseln speichern
Es ist in keinem Fall eine gute Idee, Berechtigungsnachweise im App-Code zu speichern. Stattdessen stellt Kubernetes sogenannte "Geheimnisse" bereit, die sensible Informationen wie Passwörter, OAuth-Token oder SSH-Schlüssel enthalten. Geheime Kubernetes-Schlüssel werden standardmäßig verschlüsselt, was geheime Schlüssel zu einer sichereren und flexibleren Option zum Speichern
sensibler Daten macht, als solche Daten buchstäblich in einer pod oder einem Container-Image zu speichern.
Eine Möglichkeit zur Verwendung von geheimen Schlüsseln in Kubernetes ist zum Beispiel die folgende:
-
Erstellen Sie die Datei
cloud-secrets.txtund speichern Sie darin die Serviceberechtigungsnachweise der Cloud-Services.{ "url": "<SERVICE_URL>", "api_key": <API_Key> } -
Erstellen Sie dann Kubernetes, indem Sie den folgenden Befehl ausführen, und überprüfen Sie, ob das Geheimnis erstellt wurde, indem Sie
kubectl get secretsverwenden, nachdem Sie den folgenden Befehl ausgeführt haben:kubectl create secret generic cloud-service-secret --from-file=cloud-secrets.txt=./cloud-secrets.txt
App containerisieren
Zum Containerisieren Ihrer App müssen Sie ein Container-Image erstellen.
Ein Image wird aus einer Docker-Datei erstellt, einer Datei, die Anweisungen und Befehle zum Erstellen des Images enthält. Eine Dockerfile kann in ihren Anweisungen Buildartefakte referenzieren, die separat gespeichert sind (z. B. eine App, die Konfiguration der App und die Abhängigkeiten der App).
Zum Erstellen einer eigenen Dockerfile für Ihre vorhandene App können Sie die folgenden Befehle verwenden:
- FROM - Wählt ein übergeordnetes Image aus, um die Containerlaufzeit zu definieren.
- ADD/COPY - Kopiert den Inhalt eines Verzeichnisses in den Container.
- WORKDIR - Legt das Arbeitsverzeichnis im Container fest.
- RUN - Installiert Softwarepakete, die von der App während der Ausführung benötigt werden.
- EXPOSE - Macht einen Port außerhalb des Containers verfügbar.
- ENV NAME - Definiert Umgebungsvariablen.
- CMD - Definiert Befehle, die beim Start des Containers ausgeführt werden.
Bilder werden in der Regel in einem Register gespeichert, das entweder öffentlich zugänglich ist (öffentliches Register) oder mit eingeschränktem Zugriff für eine Gruppe von Benutzern eingerichtet werden kann (privates Register). Öffentliche Registrys wie Docker Hub sind gut dafür geeignet, sich mit Docker und Kubernetes vertraut zu machen und die erste containerisierte App in einem Cluster zu erstellen. Bei Apps für ein Unternehmen sollten Sie jedoch eine private Registry, zum Beispiel die in IBM Cloud Container Registry bereitgestellte Registry, verwenden, um Ihre Images gegen Nutzung und Änderung durch nicht berechtigte Benutzer zu schützen.
Gehen Sie wie folgt vor, um eine App zu containerisieren und in IBM Cloud Container Registry zu speichern:
- Sie müssten eine Docker-Datei erstellen. Der folgende Code ist ein Beispiel für eine Docker-Datei.
# Build JPetStore war FROM openjdk:8 as builder COPY . /src WORKDIR /src RUN ./build.sh all # Use WebSphere Liberty base image from the Docker Store FROM websphere-liberty:latest # Copy war from build stage and server.xml into image COPY --from=builder /src/dist/jpetstore.war /opt/ibm/wlp/usr/servers/defaultServer/apps/ COPY --from=builder /src/server.xml /opt/ibm/wlp/usr/servers/defaultServer/ RUN mkdir -p /config/lib/global COPY lib/mysql-connector-java-3.0.17-ga-bin.jar /config/lib/global - Nach der Erstellung einer Dockerfile müssen Sie das Container-Image erstellen und durch eine Push-Operation in IBM Cloud Container Registry übertragen. Sie können einen Container mit einem Befehl wie dem folgenden erstellen:
docker build . -t <image_name> docker push <image_name>
App auf einem Kubernetes-Cluster bereitstellen
Wenn ein Container-Image erstellt und in die Cloud übertragen wurde, müssen Sie es als Nächstes in Ihrem Kubernetes-Cluster bereitstellen. Zu diesem Zweck müssen Sie eine Datei 'deployment.yaml' erstellen.
Erstellung einer Kubernetes-Bereitstellungsdatei 'deployment.yaml'
Zum Erstellen von Kubernetes-Dateien 'deployment.yaml' müssen Sie wie folgt vorgehen:
-
Erstellen Sie deployment.yaml. Hier ist ein Beispiel für eine deployment YAML-Datei.
-
In Ihrer deployment.yaml können Sie Ressourcenquoten für Ihre Container definieren, um festzulegen, wie viel CPU und Speicher jeder Container benötigt, um ordnungsgemäß zu starten. Wenn für Container Ressourcenquoten angegeben wurden, kann der Kubernetes-Scheduler bessere Entscheidungen darüber treffen, auf welchen Workerknoten Ihre Pods platziert werden sollen.
-
Als Nächstes können Sie die folgenden Befehle verwenden, um die erstellte Bereitstellung und die erstellten Dienste zu erstellen und anzuzeigen:
kubectl create -f <filepath/deployment.yaml> kubectl get deployments kubectl get services kubectl get pods
Zusammenfassung
In diesem Lernprogramm haben Sie Folgendes kennengelernt:
- Unterschiede zwischen VMs, Container und Kubernetes
- Vorgehensweise zur Definition von Clustern für verschiedene Umgebungstypen (Entwicklung, Testen und Produktion)
- Vorgehensweise zur Handhabung des Datenspeichers und Wichtigkeit von persistentem Datenspeicher
- Anwendung der 12-Faktor-Prinzipien auf Ihre App und Verwendung geheimer Schlüssel für Berechtigungsnachweise in Kubernetes
- Erstellung von Container-Images und ihre Push-Übertragung in IBM Cloud Container Registry
- Erstellung von Kubernetes-Bereitstellungsdateien und Bereitstellung des Container-Images in Kubernetes
Alles Gelernte in die Praxis umsetzen und App 'JPetStore' im Cluster ausführen
Um alles, was Sie gelernt haben, in die Praxis umzusetzen, folgen Sie der Demonstration, um JPetStore auf Ihrem Cluster auszuführen und die erlernten Konzepte anzuwenden. Die erweiterte Funktionalität der JPetStore-App bietet Ihnen die Möglichkeit, eine App in Kubernetes zu erweitern, indem Sie die Klassifizierung von Images als separaten Microservice ausführen.