Übung: Bereitstellen eines Microservicecontainers in Kubernetes
Kubernetes führt Container für Sie aus. Sie beschreiben, was Kubernetes über eine YAML-Datei tun soll. Diese Übung führt Sie durch die Erstellung der Datei, damit Sie den Back-End-Dienst auf Kubernetes bereitstellen und ausführen können.
Von Bedeutung
Bevor Sie fortfahren, müssen Sie sicherstellen, dass eine Kubernetes-Implementierung installiert ist. Wir verwenden die im Codespace ausgeführte k3d-Implementierung . Wir starten das Lab, indem wir diese Implementierung installieren.
Installieren von Kubernetes-Tools und -Implementierungen
Wir müssen sowohl das Kubectl-Tool als auch die k3d Kubernetes-Implementierung installieren:
Wechseln Sie im Codespace zur Registerkarte TERMINAL , und führen Sie dann die folgenden Befehle aus, um die erforderlichen Komponenten zu installieren:
sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curlFühren Sie als Nächstes die folgenden Befehle aus, um den Signaturschlüssel für die Kubernetes-Paketrepositorys herunterzuladen:
sudo mkdir /etc/apt/keyrings curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpgWenn sie eine Fehlermeldung erhalten, dass das Verzeichnis bereits vorhanden ist, führen Sie den
curlBefehl separat aus.Fügen Sie das Kubernetes-Repository zu Ihrer passenden Konfiguration hinzu:
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.listJetzt können Sie das Kubectl-Tool installieren:
sudo apt-get update sudo apt-get install -y kubectlInstallieren Sie schließlich die k3d-Implementierung von Kubernetes, und erstellen Sie einen Cluster:
curl -s https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash k3d cluster create devcluster --config k3d.yml
Erstellen einer Bereitstellungsdatei für den Back-End-Dienst
Sie können eine Dateiverwaltungscontainerbereitstellung in Kubernetes mit einer YAML-Datei erstellen. Erstellen wir eine Datei zum Bereitstellen des Back-End-Diensts.
Erstellen Sie eine neue Datei im Ordner donet-kubernetes des Codespaces mit dem Namen backend-deploy.yml.
Kopieren Sie den folgenden Text in die Datei, und speichern Sie ihn.
--- apiVersion: apps/v1 kind: Deployment metadata: name: productsbackend spec: replicas: 1 template: metadata: labels: app: productsbackend spec: containers: - name: productsbackend image: [YOUR DOCKER USER NAME]/productservice:latest ports: - containerPort: 80 env: - name: ASPNETCORE_URLS value: http://*:80 selector: matchLabels: app: productsbackend --- apiVersion: v1 kind: Service metadata: name: productsbackend spec: type: NodePort ports: - port: 80 targetPort: 80 nodePort: 32001 selector: app: productsbackendErsetzen Sie den Platzhalter
[YOUR DOCKER USER NAME]durch Ihren tatsächlichen Docker-Benutzernamen.
Diese Datei erledigt ein paar Dinge.
Der erste Teil definiert eine Bereitstellungsspezifikation für den Container, der in Kubernetes bereitgestellt werden soll. Es gibt ein Replikat an, in dem das Containerimage gefunden werden soll, welche Ports für den Container geöffnet werden sollen, und legt einige Umgebungsvariablen fest. In diesem ersten Teil werden auch Bezeichnungen und Namen definiert, die verwendet werden können, um auf den Container und die Spezifikation zu verweisen.
Der zweite Teil definiert dann, dass der Container als Kubernetes NodePort-Dienst ausgeführt wird. Für dieses Modul müssen Sie nicht alle Besonderheiten von NodePorts verstehen. Sie sollten jedoch wissen, dass dieser Diensttyp eine externe IP-Adresse verfügbar macht, damit Sie den Dienst außerhalb des Clusters testen können.
Bereitstellen und Ausführen des Back-End-Microservice
Als Nächstes stellen wir den Microservice bereit und führen es aus.
Führen Sie auf der Registerkarte TERMINAL den folgenden Befehl aus:
kubectl apply -f backend-deploy.ymlDieser Befehl teilt Kubernetes mit, die von uns erstellte Datei auszuführen. Es lädt das Image von Docker Hub herunter und erstellt den Container.
Der
kubectl applyBefehl wird schnell zurückgegeben. Die Containererstellung kann jedoch eine Weile dauern. Verwenden Sie den folgenden Code, um den Fortschritt anzuzeigen.kubectl get podsIn der resultierenden Ausgabe haben Sie eine Zeile mit productsbackend gefolgt von einer Zeichenfolge von zufälligen Zeichen unter der Spalte NAME . Wenn alles bereit ist, wird unter der Spalte BEREIT die Zeichenfolge 1/1 und unter der Spalte STATUS der Text Wird ausgeführt angezeigt.
Um den Dienst zu testen, wechseln Sie zur Registerkarte "PORTS ", und wählen Sie in der Nähe der lokalen Adresse für den Back-End-Port das Globussymbol aus. Der Browser öffnet an dieser Adresse eine neue Registerkarte.
Um einige Produkte abzufragen, fügen Sie die Adresse mit "/api/product " an, und drücken Sie dann die EINGABETASTE. Einige Produktinformationen sollten im JSON-Format aufgeführt sein.
[ { "id": 1, "name": "Solar Powered Flashlight", "description": "A fantastic product for outdoor enthusiasts", "price": 19.99, "imageUrl": "product1.png" }, { "id": 2, "name": "Hiking Poles", "description": "Ideal for camping and hiking trips", "price": 24.99, "imageUrl": "product2.png" }, { "id": 3, "name": "Outdoor Rain Jacket", "description": "This product will keep you warm and dry in all weathers", "price": 49.99, "imageUrl": "product3.png" }, ...
Erstellen einer Bereitstellungsdatei und Ausführen des Frontend-Diensts
Ähnlich wie der Back-End-Dienst benötigen wir auch eine Bereitstellungsdatei für das Frontend.
Erstellen einer neuen Datei im Ordner "donet-kubernetes " mit dem Namen frontend-deploy.yml
Fügen Sie den folgenden Code in die Datei ein:
--- apiVersion: apps/v1 kind: Deployment metadata: name: storefrontend spec: replicas: 1 template: metadata: labels: app: storefrontend spec: containers: - name: storefrontend image: [YOUR DOCKER USER NAME]/storeimage:latest ports: - containerPort: 80 env: - name: ASPNETCORE_URLS value: http://*:80 - name: ProductEndpoint value: http://productsbackend selector: matchLabels: app: storefrontend --- apiVersion: v1 kind: Service metadata: name: storefrontend spec: type: NodePort ports: - port: 80 targetPort: 80 nodePort: 32000 selector: app: storefrontendErsetzen Sie den Platzhalter
[YOUR DOCKER USERNAME]durch Ihren tatsächlichen Docker-Benutzernamen.Beachten Sie, dass diese Datei dem für den Back-End-Microservice erstellten ähnelt. Es gibt zwei Unterschiede:
- Wir geben unter dem Wert
spec.template.spec.containers.imageder Bereitstellung einen anderen Container für die Ausführung an. - Unter dem
spec.template.spec.containers.envAbschnitt gibt es eine neue Umgebungsvariable. Der Code in der storefrontend-Anwendung ruft das Back-End auf, aber da wir keinen vollqualifizierten Domänennamen (Fully Qualified Domain Name, FQDN) angegeben haben, wissen wir nicht die IP-Adresse des Back-End-Microservice, wir verwenden den Namen, den wir unter demmetadata.nameKnoten desDeployment. Kubernetes kümmert sich um den Rest.
- Wir geben unter dem Wert
Stellen Sie den Container mit dem folgenden Befehl in Kubernetes bereit:
kubectl apply -f frontend-deploy.ymlSie können erneut
kubectl get podsverwenden, um den Status der Bereitstellung anzuzeigen. Sobald in der Zeile für storefrontend in der Spalte STATUS der Status Wird ausgeführt angezeigt wird, ist alles einsatzbereit.Wechseln Sie zum Testen des Front-End-Diensts zur Registerkarte PORTS, und wählen Sie dann rechts neben der lokalen Adresse für den Front-End-Port das Globussymbol aus. Im Browser wird die Homepage angezeigt.
Wählen Sie "Produkte" aus. Im Katalog werden die Waren von Contoso angezeigt.
In dieser Übung haben Sie eine Bereitstellungsdatei erstellt, die genau beschrieben hat, wie die Container in Kubernetes ausgeführt werden sollen. Anschließend ließ man Kubernetes das Image von Docker Hub herunterladen und die Container starten.