Een Spring Boot-toepassing implementeren in Azure Kubernetes Service
Notitie
Voor Spring Boot-toepassingen raden we u aan Azure Spring Apps te gebruiken. U kunt er echter nog steeds voor kiezen om Azure Kubernetes Service als bestemming te gebruiken. Zie De juiste Azure-services voor uw Java-toepassingen kiezen voor 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. Om precies te zijn, gebruikt u Spring Boot voor toepassingsontwikkeling, Kubernetes voor containerimplementatie en de Azure Kubernetes service (AKS) om uw toepassing te hosten.
Kubernetes en Docker zijn opensource-oplossingen die ontwikkelaars helpen bij het automatiseren van de implementatie, het schalen en het beheren van hun toepassingen die in containers worden uitgevoerd.
Vereisten
- Een Azure-abonnement; als u nog geen Azure-abonnement hebt, kunt u uw voordelen als MSDN-abonnee activeren of u aanmelden voor een gratis Azure-account.
- De Azure-opdrachtregelinterface (CLI).
- Een ondersteunde JDK (Java Development Kit). Zie Java-ondersteuning voor Azure en Azure Stack voor meer informatie over de JDK's die beschikbaar zijn voor gebruik bij het ontwikkelen in Azure.
- Het build-hulpprogramma Maven van Apache (versie 3).
- Een Git-client.
- Een Docker-client.
- De ACR Docker-referentiehelper.
Notitie
Als gevolg van de vereisten voor virtualisatie van deze zelfstudie, kunt u de stappen in dit artikel niet volgen op een virtuele machine. U moet een fysieke computer gebruiken waarop de functies voor virtualisatie zijn ingeschakeld.
De web-app Aan de slag met Spring Boot in Docker maken
De volgende stappen helpen u bij het bouwen van een Spring Boot-web-app en bij het lokaal testen van de web-app.
Open een opdrachtprompt, maak een lokale map voor de toepassing en ga naar die map, bijvoorbeeld:
mkdir C:\SpringBoot cd C:\SpringBoot
-- of --
mkdir /users/$USER/SpringBoot cd /users/$USER/SpringBoot
Kloon het voorbeeldproject Aan de slag met Spring Boot in Docker in de map.
git clone https://github.com/spring-guides/gs-spring-boot-docker.git
Ga naar de map met 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 naar
http://localhost:8080
te bladeren of met de volgende opdrachtcurl
:curl http://localhost:8080
Het volgende bericht wordt weergegeven: Hallo Docker World
Een Azure Container Registry maken met 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 zelfstudie wordt in latere stappen de voorbeeld-app als een Docker-installatiekopie naar dit register gepusht. 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 vanaf 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 verzameling
<properties>
in het bestand pom.xml 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 verzameling
<plugins>
in het bestand pom.xml bij zodat het element<plugin>
een vermelding bevat voor dejib-maven-plugin
, zoals weergegeven in het volgende voorbeeld. U ziet dat we een basisinstallatiekopie uit het MCR (Microsoft-containerregister) gebruiken:mcr.microsoft.com/openjdk/jdk:11-ubuntu
. Deze bevat een officieel ondersteunde JDK voor Azure. Zie De Microsoft Build van OpenJDK installeren voor andere MCR-basisinstallatiekopieën 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>
Ga naar de map met het voltooide project voor uw Spring Boot-toepassing en voer de volgende opdracht uit om de installatiekopie te bouwen en deze 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 is az acr login
gemaakt gedurende 1 uur geldig. Als er een fout 401 Niet-geautoriseerd wordt weergegeven, kunt u de az acr login --name <your registry name>
opdracht opnieuw uitvoeren om opnieuw te verifiëren. Als er een time-outfout opgetreden bij lezen wordt weergegeven, 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 op AKS met behulp van de Azure CLI
Een Kubernetes-cluster maken in Azure Kubernetes Service. Met de volgende opdracht maakt u een kubernetes-cluster in de wingtiptoys-kubernetes-resourcegroep, met wingtiptoys-akscluster als clusternaam, waarbij Azure Container Registry (ACR)
wingtiptoysregistry
is gekoppeld en wingtiptoys-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 voltooien van deze opdracht kan enige tijd duren.
Installeer
kubectl
met behulp van de Azure CLI. Linux-gebruikers moeten deze opdracht mogelijk vooraf laten gaan doorsudo
aangezien dit de Kubernetes CLI implementeert 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
De installatiekopie implementeren naar 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 de container uit in het Kubernetes-cluster met behulp van de opdracht
kubectl run
. Geef in Kubernetes een servicenaam op voor uw app en de volledige naam van de installatiekopie. Voorbeeld:kubectl run gs-spring-boot-docker --image=wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest
In deze opdracht:
Wordt de containernaam
gs-spring-boot-docker
direct na de opdrachtrun
opgegevenWorden met de parameter
--image
de gecombineerde aanmeldingsserver en de naam van de installatiekopie opgegeven alswingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest
Maak uw Kubernetes-cluster extern beschikbaar met behulp van de opdracht
kubectl expose
. Geef uw servicenaam op, evenals de openbare TCP-poort die wordt gebruikt voor toegang tot de app en de interne doelpoort waarop uw app luistert. Voorbeeld:kubectl expose pod gs-spring-boot-docker --type=LoadBalancer --port=80 --target-port=8080
In deze opdracht:
Wordt de containernaam
gs-spring-boot-docker
direct na de opdrachtexpose pod
opgegeven.Wordt met de parameter
--type
aangegeven dat het cluster load balancer gebruikt.Wordt met de parameter
--port
de openbare TCP-poort 80 gespecificeerd. U hebt toegang tot de app op deze poort.Wordt met de parameter
--target-port
de openbare TCP-poort 8080 gespecificeerd. De load balancer stuurt op deze app aanvragen door naar uw app.
Zodra de app is geïmplementeerd in het cluster, moet u een query uitvoeren op het externe IP-adres en het openen 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
YAML-editor hebt geïmplementeerd, net zoals hierboven, selecteert u Toevoegen onderaan de YAML-editor om te implementerenService
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 Extern IP-adres. Vervolgens ziet u dat uw Spring Boot-toepassing wordt uitgevoerd in Azure.
Volgende stappen
Voor meer informatie over Spring en Azure gaat u door naar het documentatiecentrum van Spring op Azure.
Zie ook
Zie het volgende artikel voor meer informatie over het gebruik van Spring Boot in Azure:
Voor meer informatie over het gebruik van Azure met Java raadpleegt u de artikelen Azure voor Java-ontwikkelaars en de Werken met Azure DevOps en Java.
Zie Visual Studio Code Java Zelfstudies voor meer informatie over het implementeren van een Java-toepassing voor Kubernetes met Visual Studio Code.
Zie Aan de slag met Spring Boot in Docker voor meer informatie over het voorbeeldproject Spring Boot in Docker.
Via de volgende koppelingen vindt u aanvullende informatie over het maken van Spring Boot-apps:
- Zie de Spring Initializr op https://start.spring.io/ voor meer informatie over het maken van een eenvoudige Spring Boot-app.
Via de volgende koppelingen vindt u aanvullende informatie over het gebruiken van Kubernetes met Azure:
Meer informatie over het gebruik van de Kubernetes-opdrachtregelinterface vindt u in de gebruikershandleiding van kubectl op https://kubernetes.io/docs/reference/kubectl/.
Op de Kubernetes-website vindt u verschillende artikelen over het gebruik van installatiekopieën in privéregisters:
- Serviceaccounts configureren voor pods
- Naamruimten
- Een installatiekopie ophalen uit een privéregister
Zie Een aangepaste Docker-installatiekopie gebruiken voor Azure-web-apps in Linux voor meer voorbeelden over het gebruik van aangepaste Docker-installatiekopieën met Azure.
Zie Aan de slag met Azure Dev Spaces met Java voor meer informatie over het iteratief uitvoeren en het opsporen van fouten in containers in Azure Kubernetes Service (AKS) met Azure Dev Spaces