Spring Boot-toepassing implementeren in Azure Kubernetes Service

Notitie

Gebruik Azure Container Apps voor Spring Boot-toepassingen. U kunt Azure Kubernetes Service echter nog steeds als bestemming gebruiken. Zie De juiste Azure-services kiezen voor uw Java-toepassingenvoor meer informatie.

In deze zelfstudie leert u hoe u Kubernetes en Docker gebruikt om een Spring Boot-toepassing te ontwikkelen en te implementeren 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: Hallo 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. Selecteer 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, zoals 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. Gebruik een basisimage uit de Microsoft Container Registry (MCR): mcr.microsoft.com/openjdk/jdk:11-ubuntu, die een officieel ondersteunde JDK voor Azure bevat. 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>
    
  5. Ga 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

Om veiligheidsredenen is het referentiegegeven dat u met az acr login maakt, één uur geldig. Als er een 401 Unauthorized fout wordt weergegeven, voert u de az acr login --name <your registry name> opdracht opnieuw uit om opnieuw te verifiëren. Als u een Read timed out-fout ziet, probeer dan de time-outwaarden te verhogen met mvn -Djib.httpTimeout=7200000 jib:dockerBuild, of gebruik -Djib.httpTimeout=0 voor een oneindige time-out.

Een Kubernetes-cluster in AKS maken 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, waaraan 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 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 deze de Kubernetes CLI installeert 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 kubectlen 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:

    • U geeft de containernaam gs-spring-boot-docker direct na de run opdracht op.

    • De parameter --image specificeert de gecombineerde aanmeldingsserver en installatiekopienaam 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:

    • U geeft de containernaam gs-spring-boot-docker direct na de expose pod opdracht op.

    • 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. Nadat u de app in het cluster hebt geïmplementeerd, 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 Deployment hebt geïmplementeerd, selecteert u net als in de voorgaande stap onderaan de YAML-editor Toevoegen om Service te implementeren met 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. Nadat u het YAML-bestand hebt 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-. U ziet dat uw Spring Boot-toepassing wordt uitgevoerd op 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 meer 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 meer informatie over het gebruik van Kubernetes met Azure:

Zie de kubectl-gebruikershandleiding op https://kubernetes.io/docs/reference/kubectl/voor meer informatie over het gebruik van de Kubernetes-opdrachtregelinterface.

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 op Linux voor meer voorbeelden van het gebruik van aangepaste Docker-installatiekopieën met Azure.

Zie Aan de slag op Azure Dev Spaces met Java voor meer informatie over iteratief uitvoeren en fouten opsporen in containers in Azure Kubernetes Service (AKS) met Azure Dev Spaces.