Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Hinweis
Verwenden Sie für Spring Boot-Anwendungen Azure Container Apps. Sie können Azure Kubernetes Service jedoch weiterhin als Ziel verwenden. Weitere Informationen finden Sie unter Auswählen der richtigen Azure-Dienste für Ihre Java-Anwendungen.
In diesem Lernprogramm erfahren Sie, wie Sie Kubernetes und Docker zum Entwickeln und Bereitstellen einer Spring Boot-Anwendung zum Microsoft Azure verwenden. Genauer gesagt verwenden Sie Spring Boot für die Anwendungsentwicklung, Kubernetes für die Containerbereitstellung und Azure Kubernetes Service (AKS), um Ihre Anwendung zu hosten.
Kubernetes und Docker sind Open Source-Lösungen, mit denen Entwickelnde die Bereitstellung, Skalierung und Verwaltung ihrer in Containern ausgeführten Anwendungen automatisieren können.
Voraussetzungen
- Ein Azure-Abonnement. Wenn Sie noch nicht über ein Azure-Abonnement verfügen, aktivieren Sie Ihre MSDN-Abonnentenvorteile oder registrieren Sie sich für ein kostenloses Azure Konto.
- Die Azure-Befehlszeilenschnittstelle (CLI)
- Ein unterstütztes Java Development Kit (JDK). Weitere Informationen zu den JDKs, die für die Entwicklung in Azure verfügbar sind, finden Sie im Artikel zur Java-Unterstützung in Azure und Azure Stack.
- Das Erstellungstool Apache Maven (Version 3)
- Einen Git-Client
- Einen Docker-Client
- Das Hilfsprogramm für ACR-Docker-Anmeldeinformationen
Hinweis
Aufgrund der Virtualisierungsanforderungen dieses Lernprogramms können Sie die Schritte in diesem Artikel auf einem virtuellen Computer nicht ausführen. Sie müssen einen physischen Computer mit aktivierten Virtualisierungsfeatures verwenden.
Erstellen der Web-App für erste Schritte mit Spring Boot in Docker
Im Folgenden werden die Schritte zum Erstellen einer Spring Boot-Webanwendung und zum lokalen Testen dieser Anwendung beschrieben.
Öffnen Sie eine Eingabeaufforderung, und erstellen Sie ein lokales Verzeichnis, um Ihre Anwendung zu speichern, und wechseln Sie zu diesem Verzeichnis. Zum Beispiel:
mkdir C:\SpringBoot cd C:\SpringBoot– oder –
mkdir /users/$USER/SpringBoot cd /users/$USER/SpringBootKlonen Sie das Beispielprojekt Spring Boot on Docker Getting Started in das Verzeichnis.
git clone https://github.com/spring-guides/gs-spring-boot-docker.gitWechseln Sie in das Verzeichnis mit dem abgeschlossenen Projekt.
cd gs-spring-boot-docker cd completeVerwenden Sie Maven zum Erstellen und Ausführen der Beispiel-App.
mvn package spring-boot:runTesten Sie die Web-App, indem Sie zu
http://localhost:8080navigieren oder den folgenden Befehlcurlverwenden:curl http://localhost:8080Die folgende Meldung wird angezeigt: Hello Docker World
Erstellen einer Azure Container Registry-Instanz über die Azure-Befehlszeilenschnittstelle
Öffnen Sie eine Eingabeaufforderung.
Melden Sie sich bei Ihrem Azure-Konto an:
az loginWählen Sie Ihr Azure-Abonnement aus:
az account set -s <YourSubscriptionID>Erstellen Sie eine Ressourcengruppe für die Azure-Ressourcen, die in diesem Lernprogramm verwendet werden.
az group create --name=wingtiptoys-kubernetes --location=eastusErstellen Sie eine private Azure Container Registry-Instanz in der Ressourcengruppe. Die Beispiel-App wird in diesem Tutorial in späteren Schritten als Docker-Image per Push in diese Registrierung übertragen. Ersetzen Sie
wingtiptoysregistrydurch einen eindeutigen Namen für die Registrierung.az acr create --resource-group wingtiptoys-kubernetes --location eastus \ --name wingtiptoysregistry --sku Basic
Pushen der App in die Containerregistrierung über Jib
Melden Sie sich über die Azure CLI bei Ihrer Azure Container Registry an.
# set the default name for Azure Container Registry, otherwise you need to specify the name in "az acr login" az config set defaults.acr=wingtiptoysregistry az acr loginÖffnen Sie die pom.xml-Datei mit einem Text-Editor, z. B. Visual Studio Code.
code pom.xmlAktualisieren Sie den
<properties>-Abschnitt in der Datei pom.xml mit dem Registrynamen für Ihre Azure Container Registry und der neuesten Version vonjib-maven-plugin.<properties> <!-- Note: If your ACR name contains upper case characters, be sure to convert them to lower case characters. --> <docker.image.prefix>wingtiptoysregistry.azurecr.io</docker.image.prefix> <jib-maven-plugin.version>2.5.2</jib-maven-plugin.version> <java.version>1.8</java.version> </properties>Aktualisieren Sie die
<plugins>-Sammlung in der Datei pom.xml so, dass das<plugin>-Element einen Eintrag für diejib-maven-pluginenthält, wie im folgenden Beispiel gezeigt. Verwenden Sie ein Basisimage aus der Microsoft Containerregistrierung (MCR):mcr.microsoft.com/openjdk/jdk:11-ubuntuenthält ein offiziell unterstütztes JDK für Azure. Weitere MCR-Basisimages mit offiziell unterstützten JDKs finden Sie unter Installieren des Microsoft-Build von OpenJDK.<plugin> <artifactId>jib-maven-plugin</artifactId> <groupId>com.google.cloud.tools</groupId> <version>${jib-maven-plugin.version}</version> <configuration> <from> <image>mcr.microsoft.com/openjdk/jdk:11-ubuntu</image> </from> <to> <image>${docker.image.prefix}/gs-spring-boot-docker</image> </to> </configuration> </plugin>Wechseln Sie zum abgeschlossenen Projektverzeichnis für Ihre Spring Boot-Anwendung, und führen Sie den folgenden Befehl aus, um das Image zu erstellen und das Image an die Registrierung zu übertragen:
az acr login && mvn compile jib:build
Hinweis
Aus Sicherheitsgründen ist die Anmeldeinformation, die Sie mit az acr login erstellen, eine Stunde lang gültig. Wenn ein 401 Unauthorized Fehler angezeigt wird, führen Sie den az acr login --name <your registry name> Befehl erneut aus, um die Authentifizierung erneut zu erstellen. Wenn der Fehler Read timed out angezeigt wird, versuchen Sie, die Timeouts mit mvn -Djib.httpTimeout=7200000 jib:dockerBuild zu erhöhen, oder verwenden Sie -Djib.httpTimeout=0 für ein unbegrenztes Timeout.
Erstellen eines Kubernetes-Clusters auf AKS mithilfe der Azure CLI
Erstellen Sie einen Kubernetes-Cluster in Azure Kubernetes Service. Mit dem folgenden Befehl wird in der Ressourcengruppe
wingtiptoys-kubernetesein Kubernetes-Cluster erstellt, wobeiwingtiptoys-aksclusterder Clustername ist, Azure Container Registry (ACR)wingtiptoysregistryangefügt ist undwingtiptoys-kubernetesals DNS-Präfix verwendet wird:az aks create --resource-group=wingtiptoys-kubernetes --name=wingtiptoys-akscluster \ --attach-acr wingtiptoysregistry \ --dns-name-prefix=wingtiptoys-kubernetes --generate-ssh-keysDie Ausführung dieses Befehls kann einige Minuten dauern.
Installieren Sie
kubectlüber die Azure-Befehlszeilenschnittstelle. Linux-Benutzer müssen diesem Befehl möglicherweisesudovoranstellen, da dadurch die Kubernetes-CLI unter/usr/local/bininstalliert wird.az aks install-cliLaden Sie die Konfigurationsinformationen des Clusters herunter, damit Sie den Cluster über die Kubernetes-Weboberfläche und
kubectlverwalten können.az aks get-credentials --resource-group=wingtiptoys-kubernetes --name=wingtiptoys-akscluster
Stellen Sie das Image in Ihrem Kubernetes-Cluster bereit
In diesem Lernprogramm wird die App mit kubectl bereitgestellt, und anschließend können Sie die Bereitstellung über die Kubernetes-Weboberfläche erkunden.
Bereitstellen mit kubectl
Öffnen Sie eine Eingabeaufforderung.
Führen Sie den Container im Kubernetes-Cluster mit dem Befehl
kubectl runaus. Geben Sie einen Dienstnamen für die App in Kubernetes und den vollständigen Imagenamen an. Zum Beispiel:kubectl run gs-spring-boot-docker --image=wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latestIn diesem Befehl:
Sie geben den Containernamen
gs-spring-boot-dockerunmittelbar hinter demrunBefehl an.Der
--image-Parameter gibt den kombinierten Anmeldeserver und Imagenamen alswingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latestan.
Machen Sie den Kubernetes-Cluster mit dem Befehl
kubectl exposeextern verfügbar. Geben Sie den Dienstnamen, den öffentlichen TCP-Port für den Zugriff auf die App und den internen Zielport, auf dem die App lauscht, an. Zum Beispiel:kubectl expose pod gs-spring-boot-docker --type=LoadBalancer --port=80 --target-port=8080In diesem Befehl:
Sie geben den Containernamen
gs-spring-boot-dockerunmittelbar hinter demexpose podBefehl an.Der Parameter
--typegibt an, dass der Cluster einen Lastenausgleicher verwendet.Der Parameter
--portgibt den öffentlichen TCP-Port 80 an. Sie greifen über diesen Port auf die App zu.Der Parameter
--target-portgibt den internen TCP-Port 8080 an. Der Load Balancer leitet über diesen Port Anforderungen an die App weiter.
Nachdem Sie die App im Cluster bereitgestellt haben, fragen Sie die externe IP-Adresse ab, und öffnen Sie sie in Ihrem Webbrowser:
kubectl get services -o=jsonpath='{.items[*].status.loadBalancer.ingress[0].ip}'
Bereitstellen über die Kubernetes-Ressourcenansicht
Wählen Sie in einer der Ressourcenansichten („Namespace“, „Workloads“ oder „Dienste und Eingänge“, „Speicher“ und „Konfiguration“) Hinzuzufügen aus.
Fügen Sie den folgenden YAML-Code ein:
apiVersion: apps/v1 kind: Deployment metadata: name: gs-spring-boot-docker spec: replicas: 1 selector: matchLabels: app: gs-spring-boot-docker template: metadata: labels: app: gs-spring-boot-docker spec: containers: - name: gs-spring-boot-docker image: wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latestWählen Sie unten im YAML-Editor Hinzufügen aus, um die Anwendung bereitzustellen.
Nach der Bereitstellung von
Deploymentwählen Sie, genau wie im vorherigen Schritt, unten im YAML-Editor Hinzufügen aus, umServicemithilfe der folgenden YAML-Definition bereitzustellen:apiVersion: v1 kind: Service metadata: name: gs-spring-boot-docker spec: type: LoadBalancer ports: - port: 80 targetPort: 8080 selector: app: gs-spring-boot-dockerNachdem Sie die YAML-Datei hinzugefügt haben, zeigt der Ressourcenanzeige ihre Spring Boot-Anwendung an. Der externe Dienst umfasst eine verknüpfte externe IP-Adresse, sodass Sie die Anwendung bequem in Ihrem Browser anzeigen können.
Wählen Sie Externe IP aus. Ihre Spring Boot-Anwendung wird auf Azure ausgeführt.
Nächste Schritte
Weitere Informationen zu Spring und Azure finden Sie im Dokumentationscenter zu Spring in Azure.
Weitere Informationen
Weitere Informationen zur Verwendung von Spring Boot in Azure finden Sie im folgenden Artikel:
Weitere Informationen zur Verwendung von Azure mit Java finden Sie in den Anleitungen "Azure für Java-Entwickler" und "Arbeiten mit Azure DevOps und Java".
Weitere Informationen zum Bereitstellen einer Java-Anwendung in Kubernetes mit Visual Studio Code finden Sie in den Visual Studio Code-Tutorials für Java.
Weitere Informationen zum Spring Boot-Beispielprojekt in Docker finden Sie unter Spring Boot on Docker Getting Started (Erste Schritte mit Spring Boot in Docker).
Die folgenden Links enthalten weitere Informationen zum Erstellen von Spring Boot-Anwendungen:
- Weitere Informationen zum Erstellen einer einfachen Spring Boot-Anwendung finden Sie im Spring Initializr unter https://start.spring.io/.
Die folgenden Links enthalten weitere Informationen zur Verwendung von Kubernetes mit Azure:
Weitere Informationen zur Verwendung der Kubernetes-Befehlszeilenschnittstelle finden Sie im Kubectl-Benutzerhandbuch unter https://kubernetes.io/docs/reference/kubectl/.
Die Kubernetes-Website umfasst mehrere Artikel zur Verwendung von Images in privaten Registrierungen:
- Konfigurieren von Dienstkonten für Pods
- Namespaces
- Pullen eines Images aus einer privaten Registrierung
Weitere Beispiele für die Verwendung von benutzerdefinierten Docker-Images mit Azure finden Sie unter Verwenden eines benutzerdefinierten Docker-Images für Azure Web App unter Linux.
Weitere Informationen zum iterativen Ausführen und Debuggen von Containern direkt in Azure Kubernetes Service (AKS) mit Azure Dev Spaces finden Sie unter "Erste Schritte mit Azure Dev Spaces mit Java".