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

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.

  1. 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
    
  2. 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
    
  3. Ga naar de map met 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 naar http://localhost:8080 te bladeren of met de volgende opdracht curl:

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

    Lokaal naar de app bladeren

Een Azure Container Registry maken met 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 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

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

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

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

  1. 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.

  2. Installeer kubectl met behulp van de Azure CLI. Linux-gebruikers moeten deze opdracht mogelijk vooraf laten gaan door sudo aangezien dit de Kubernetes CLI implementeert 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
    

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

  1. Open een opdrachtprompt.

  2. 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 opdracht runopgegeven

    • Worden met de parameter --image de gecombineerde aanmeldingsserver en de naam van de installatiekopie opgegeven 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 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 opdracht expose podopgegeven.

    • 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.

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

    Door de 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 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-resourcesweergave, resource toevoegen.

    Nadat u de DeploymentYAML-editor hebt geïmplementeerd, net zoals hierboven, selecteert u Toevoegen onderaan de YAML-editor om te implementeren Service 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, serviceslijst, externe eindpunten gemarkeerd.

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

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

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