Spring Boot-toepassing implementeren in Azure Kubernetes Service
Notitie
Voor Spring Boot-toepassingen wordt u aangeraden Azure Container Apps te gebruiken. U kunt er echter nog steeds voor kiezen om Azure Kubernetes Service als bestemming te gebruiken. Zie De juiste Azure-services kiezen voor uw Java-toepassingenvoor meer informatie.
In deze zelfstudie leert u hoe u Kubernetes en Docker combineert voor het ontwikkelen en implementeren van een Spring Boot-toepassing in Microsoft Azure. Meer specifiek gebruikt u Spring Boot- voor het ontwikkelen van toepassingen, Kubernetes- voor containerimplementatie en Azure Kubernetes Service (AKS) om uw toepassing te hosten.
Kubernetes en Docker- zijn opensource-oplossingen waarmee ontwikkelaars de implementatie, schaalaanpassing en het beheer van hun toepassingen in containers kunnen automatiseren.
Voorwaarden
- Een Azure-abonnement; Als u nog geen Azure-abonnement hebt, kunt u de voordelen van uw MSDN-abonnee activeren of u aanmelden voor een gratis Azure-account.
- De Azure Command-Line Interface (CLI).
- Een ondersteunde Java Development Kit (JDK). Zie Java-ondersteuning voor Azure en Azure Stackvoor meer informatie over de JDK's die beschikbaar zijn voor gebruik bij het ontwikkelen in Azure.
- Het hulpprogramma voor Maven build (versie 3) van Apache.
- Een Git-client.
- Een Docker-client.
- De ACR Docker-referentiebeheerprogramma.
Notitie
Vanwege de virtualisatievereisten van deze zelfstudie kunt u de stappen in dit artikel niet volgen op een virtuele machine; u moet een fysieke computer gebruiken waarvoor virtualisatiefuncties zijn ingeschakeld.
Creëer de Docker Spring Boot webapplicatie 'Aan de slag'
De volgende stappen helpen u bij het bouwen van een Spring Boot-webtoepassing en het lokaal testen ervan.
Open een opdrachtprompt en maak een lokale map om uw toepassing op te slaan en ga naar die map; bijvoorbeeld:
mkdir C:\SpringBoot cd C:\SpringBoot
-- of --
mkdir /users/$USER/SpringBoot cd /users/$USER/SpringBoot
Kloon het Spring Boot on Docker Getting Started voorbeeldproject in de directory.
git clone https://github.com/spring-guides/gs-spring-boot-docker.git
Ga naar de map van het voltooide project.
cd gs-spring-boot-docker cd complete
Gebruik Maven om de voorbeeld-app te bouwen en uit te voeren.
mvn package spring-boot:run
Test de web-app door te bladeren naar
http://localhost:8080
of met de volgendecurl
opdracht:curl http://localhost:8080
Het volgende bericht wordt weergegeven: Hello Docker World
Een Azure Container Registry maken met behulp van de Azure CLI
Open een opdrachtprompt.
Meld u aan bij uw Azure-account:
az login
Kies uw Azure-abonnement:
az account set -s <YourSubscriptionID>
Maak een resourcegroep voor de Azure-resources die in deze zelfstudie worden gebruikt.
az group create --name=wingtiptoys-kubernetes --location=eastus
Maak een privé-Azure-containerregister in de resourcegroep. In de handleiding wordt de voorbeeldapp in latere stappen als een Docker-image naar dit register geplaatst. Vervang
wingtiptoysregistry
door een unieke naam voor uw register.az acr create --resource-group wingtiptoys-kubernetes --location eastus \ --name wingtiptoysregistry --sku Basic
Uw app via Jib naar het containerregister pushen
Meld u aan bij uw Azure Container Registry vanuit de Azure CLI.
# 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
Open het pom.xml-bestand met een teksteditor; bijvoorbeeld Visual Studio Code.
code pom.xml
Werk de
<properties>
-verzameling in het pom.xml-bestand bij met de registernaam voor uw Azure Container Registry en de nieuwste versie van jib-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>
Werk de
<plugins>
verzameling in het pom.xml-bestand bij zodat het<plugin>
element een vermelding voor dejib-maven-plugin
bevat, zoals wordt weergegeven in het volgende voorbeeld. Houd er rekening mee dat we een basisimage van het Microsoft Container Registry (MCR) gebruiken:mcr.microsoft.com/openjdk/jdk:11-ubuntu
, die een officieel ondersteunde JDK voor Azure bevat. Zie Installatie van de Microsoft Build van OpenJDK voor andere MCR-basisbeelden met officieel ondersteunde JDK's..<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>
Navigeer naar de voltooide projectmap voor uw Spring Boot-toepassing en voer de volgende opdracht uit om de installatiekopie te bouwen en de installatiekopie naar het register te pushen:
az acr login && mvn compile jib:build
Notitie
Vanwege het beveiligingsprobleem van Azure Cli en Azure Container Registry is de referentie die door az acr login
is gemaakt gedurende 1 uur geldig. Als er een 401 Unauthorized
fout wordt weergegeven, kunt u de opdracht az acr login --name <your registry name>
opnieuw uitvoeren om opnieuw te verifiëren. Als u een Read timed out
fout ziet, kunt u proberen time-outs te verhogen met mvn -Djib.httpTimeout=7200000 jib:dockerBuild
of -Djib.httpTimeout=0
voor een oneindige time-out.
Een Kubernetes-cluster maken in AKS met behulp van de Azure CLI
Maak een Kubernetes-cluster in Azure Kubernetes Service. Met de volgende opdracht maakt u een kubernetes-cluster in de
wingtiptoys-kubernetes
resourcegroep, metwingtiptoys-akscluster
als clusternaam, waarbij ACR (Azure Container Registry)wingtiptoysregistry
is gekoppeld enwingtiptoys-kubernetes
als het DNS-voorvoegsel:az aks create --resource-group=wingtiptoys-kubernetes --name=wingtiptoys-akscluster \ --attach-acr wingtiptoysregistry \ --dns-name-prefix=wingtiptoys-kubernetes --generate-ssh-keys
Het kan even duren voordat deze opdracht is voltooid.
Installeer
kubectl
met behulp van de Azure CLI. Linux-gebruikers moeten deze opdracht mogelijk vooraf laten gaan doorsudo
omdat de Kubernetes CLI wordt geïmplementeerd in/usr/local/bin
.az aks install-cli
Download de clusterconfiguratiegegevens zodat u uw cluster kunt beheren via de Kubernetes-webinterface en
kubectl
.az aks get-credentials --resource-group=wingtiptoys-kubernetes --name=wingtiptoys-akscluster
Implementeer de containerimage in uw Kubernetes-cluster
In deze zelfstudie wordt de app geïmplementeerd met behulp van kubectl
. Vervolgens kunt u de implementatie verkennen via de Kubernetes-webinterface.
Implementeren met kubectl
Open een opdrachtprompt.
Voer uw container uit in het Kubernetes-cluster met behulp van de opdracht
kubectl run
. Geef een servicenaam en de volledige image-naam op voor uw app in Kubernetes. Bijvoorbeeld:kubectl run gs-spring-boot-docker --image=wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest
In deze opdracht:
De containernaam
gs-spring-boot-docker
wordt direct na de opdrachtrun
opgegevenDe parameter
--image
specificeert de gecombineerde aanmeldserver en imagenaam alswingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest
Maak uw Kubernetes-cluster extern beschikbaar met behulp van de opdracht
kubectl expose
. Geef uw servicenaam, de openbare TCP-poort op die wordt gebruikt voor toegang tot de app en de interne doelpoort waarop uw app luistert. Bijvoorbeeld:kubectl expose pod gs-spring-boot-docker --type=LoadBalancer --port=80 --target-port=8080
In deze opdracht:
De containernaam
gs-spring-boot-docker
wordt direct na de opdrachtexpose pod
opgegeven.De parameter
--type
geeft aan dat het cluster gebruikmaakt van load balancer.De parameter
--port
geeft de openbare TCP-poort van 80 op. U opent de app op deze poort.De
--target-port
parameter geeft de interne TCP-poort van 8080. De load balancer stuurt aanvragen door naar uw app op deze poort.
Zodra de app is geïmplementeerd in het cluster, voert u een query uit op het externe IP-adres en opent u deze in uw webbrowser:
kubectl get services -o=jsonpath='{.items[*].status.loadBalancer.ingress[0].ip}'
Implementeren met de Kubernetes-resourceweergave
Selecteer toevoegen uit een van de resourceweergaven (naamruimte, workloads, services en ingresses, opslag of configuratie).
Plak de volgende YAML:
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:latest
Selecteer Toevoegen onderaan de YAML-editor om de toepassing te implementeren.
Nadat u de
Deployment
hebt geïmplementeerd, selecteert u Toevoegen onder aan de YAML-editor omService
te implementeren met behulp van de volgende YAML:apiVersion: v1 kind: Service metadata: name: gs-spring-boot-docker spec: type: LoadBalancer ports: - port: 80 targetPort: 8080 selector: app: gs-spring-boot-docker
Zodra het YAML-bestand is toegevoegd, toont de resourceviewer uw Spring Boot-toepassing. De externe service bevat een gekoppeld extern IP-adres, zodat u de toepassing eenvoudig in uw browser kunt bekijken.
Selecteer externe IP-. Vervolgens ziet u dat uw Spring Boot-toepassing wordt uitgevoerd in Azure.
Volgende stappen
Ga naar het Documentatiecentrum van Spring op Azure voor meer informatie over Spring en Azure.
Zie ook
Zie het volgende artikel voor meer informatie over het gebruik van Spring Boot in Azure:
Zie de Azure voor Java-ontwikkelaars en de Werken met Azure DevOps en Javavoor meer informatie over het gebruik van Azure met Java.
Zie Java-zelfstudies voor Visual Studio Codevoor meer informatie over het implementeren van een Java-toepassing in Kubernetes met Visual Studio Code.
Zie Spring Boot op Docker Aan de slagvoor meer informatie over het Spring Boot-voorbeeldproject in Docker.
De volgende koppelingen bevatten aanvullende informatie over het maken van Spring Boot-toepassingen:
- Zie de Spring Initializr op https://start.spring.io/voor meer informatie over het maken van een eenvoudige Spring Boot-toepassing.
De volgende koppelingen bevatten aanvullende informatie over het gebruik van Kubernetes met Azure:
Meer informatie over het gebruik van de Kubernetes-opdrachtregelinterface is beschikbaar in de kubectl gebruikershandleiding op https://kubernetes.io/docs/reference/kubectl/.
De Kubernetes-website bevat verschillende artikelen die het gebruik van afbeeldingen in privéregistraties bespreken.
Zie Een aangepaste Docker-installatiekopie gebruiken voor Azure Web App in Linuxvoor aanvullende voorbeelden voor het gebruik van aangepaste Docker-installatiekopieën met Azure.
Zie Aan de slag met Azure Dev Spaces met Java voor informatie over het herhaaldelijk uitvoeren en debuggen van containers in Azure Kubernetes Service (AKS) met Azure Dev Spaces.