Delen via


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

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.

  1. 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
    
  2. Kloon het Spring Boot on Docker Getting Started voorbeeldproject in de directory.

    git clone https://github.com/spring-guides/gs-spring-boot-docker.git
    
  3. Ga naar de map van het voltooide project.

    cd gs-spring-boot-docker
    cd complete
    
  4. Gebruik Maven om de voorbeeld-app te bouwen en uit te voeren.

    mvn package spring-boot:run
    
  5. Test de web-app door te bladeren naar http://localhost:8080of met de volgende curl opdracht:

    curl http://localhost:8080
    
  6. Het volgende bericht wordt weergegeven: Hello Docker World

    lokaal bladeren in voorbeeld-app

Een Azure Container Registry maken met behulp van de Azure CLI

  1. Open een opdrachtprompt.

  2. Meld u aan bij uw Azure-account:

    az login
    
  3. Kies uw Azure-abonnement:

    az account set -s <YourSubscriptionID>
    
  4. Maak een resourcegroep voor de Azure-resources die in deze zelfstudie worden gebruikt.

    az group create --name=wingtiptoys-kubernetes --location=eastus
    
  5. 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

  1. 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
    
  2. Open het pom.xml-bestand met een teksteditor; bijvoorbeeld Visual Studio Code.

    code pom.xml
    
  3. 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>
    
  4. Werk de <plugins> verzameling in het pom.xml-bestand bij zodat het <plugin> element een vermelding voor de jib-maven-pluginbevat, 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>
    
  5. 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:dockerBuildof -Djib.httpTimeout=0 voor een oneindige time-out.

Een Kubernetes-cluster maken in AKS met behulp van de Azure CLI

  1. Maak een Kubernetes-cluster in Azure Kubernetes Service. Met de volgende opdracht maakt u een kubernetes-cluster in de wingtiptoys-kubernetes resourcegroep, met wingtiptoys-akscluster als clusternaam, waarbij ACR (Azure Container Registry) 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 kan even duren voordat deze opdracht is voltooid.

  2. Installeer kubectl met behulp van de Azure CLI. Linux-gebruikers moeten deze opdracht mogelijk vooraf laten gaan door sudo omdat de Kubernetes CLI wordt geïmplementeerd in /usr/local/bin.

    az aks install-cli
    
  3. 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

  1. Open een opdrachtprompt.

  2. 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 opdracht run opgegeven

    • De parameter --image specificeert de gecombineerde aanmeldserver en imagenaam als wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest

  3. 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 opdracht expose 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.

  4. 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}'
    

    Door voorbeeld-app bladeren in Azure

Implementeren met de Kubernetes-resourceweergave

  1. Selecteer toevoegen uit een van de resourceweergaven (naamruimte, workloads, services en ingresses, opslag of configuratie).

    Weergave van Kubernetes-resources.

  2. 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
    
  3. Selecteer Toevoegen onderaan de YAML-editor om de toepassing te implementeren.

    Kubernetes-resources weergeven, resource toevoegen.

    Nadat u de Deploymenthebt geïmplementeerd, selecteert u Toevoegen onder aan de YAML-editor om Service 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
    
  4. 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.

    Kubernetes-resourcesweergave, lijst met services.

    Kubernetes-resourcesweergave, lijst met services, externe eindpunten gemarkeerd.

  5. Selecteer externe IP-. Vervolgens ziet u dat uw Spring Boot-toepassing wordt uitgevoerd in Azure.

    Door voorbeeld-app bladeren 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.