Dela via


Distribuera Spring Boot-programmet till Azure Kubernetes Service

Not

För Spring Boot-program rekommenderar vi att du använder Azure Container Apps. Du kan dock fortfarande välja att använda Azure Kubernetes Service som mål. Mer information finns i Välj rätt Azure-tjänster för dina Java-program.

Den här självstudien beskriver hur du kombinerar Kubernetes och Docker för att utveckla och distribuera ett Spring Boot-program till Microsoft Azure. Mer specifikt använder du Spring Boot för programutveckling, Kubernetes för containerdistribution och Azure Kubernetes Service (AKS) som värd för ditt program.

Kubernetes och Docker är lösningar med öppen källkod som hjälper utvecklare att automatisera distribution, skalning och hantering av sina program som körs i containrar.

Förutsättningar

Not

På grund av virtualiseringskraven i den här självstudien kan du inte följa stegen i den här artikeln på en virtuell dator. du måste använda en fysisk dator med virtualiseringsfunktioner aktiverade.

Skapa Webbappen Spring Boot på Docker Komma igång

Följande steg beskriver hur du skapar ett Spring Boot-webbprogram och testar det lokalt.

  1. Öppna en kommandotolk och skapa en lokal katalog för att lagra ditt program och ändra till den katalogen. till exempel:

    mkdir C:\SpringBoot
    cd C:\SpringBoot
    

    --eller--

    mkdir /users/$USER/SpringBoot
    cd /users/$USER/SpringBoot
    
  2. Kopiera Spring Boot på Docker Kom igång exempelprojekt i katalogen.

    git clone https://github.com/spring-guides/gs-spring-boot-docker.git
    
  3. Byt katalog till det slutförda projektet.

    cd gs-spring-boot-docker
    cd complete
    
  4. Använd Maven för att skapa och köra exempelappen.

    mvn package spring-boot:run
    
  5. Testa webbappen genom att bläddra till http://localhost:8080eller med följande curl kommando:

    curl http://localhost:8080
    
  6. Du bör se följande meddelande: Hello Docker World

    Bläddra bland exempelappen lokalt

Skapa ett Azure Container Registry med hjälp av Azure CLI

  1. Öppna kommando-prompten.

  2. Logga in på ditt Azure-konto:

    az login
    
  3. Välj din Azure-prenumeration:

    az account set -s <YourSubscriptionID>
    
  4. Skapa en resursgrupp för de Azure-resurser som används i den här självstudien.

    az group create --name=wingtiptoys-kubernetes --location=eastus
    
  5. Skapa ett privat Azure-containerregister i resursgruppen. Handledningen skickar exempelappen som en Docker-avbildning till en register i senare skeden. Ersätt wingtiptoysregistry med ett unikt namn för registret.

    az acr create --resource-group wingtiptoys-kubernetes --location eastus \
     --name wingtiptoysregistry --sku Basic
    

Skicka appen till containerregistret via Jib

  1. Logga in på Azure Container Registry från 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. Öppna filen pom.xml med en textredigerare. till exempel Visual Studio Code.

    code pom.xml
    
  3. Uppdatera <properties>-samlingen i pom.xml-filen med registernamnet för ditt Azure Container Registry och den senaste versionen av 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. Uppdatera <plugins>-samlingen i pom.xml-filen så att <plugin>-elementet innehåller en post för jib-maven-plugin, enligt följande exempel. Observera att vi använder en basavbildning från Microsoft Container Registry (MCR): mcr.microsoft.com/openjdk/jdk:11-ubuntu, som innehåller ett officiellt JDK för Azure. Andra MCR-basavbildningar med officiellt stödda JDK:er finns i Installera Microsoft Build of OpenJDK..

    <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. Gå till den slutförda projektkatalogen för ditt Spring Boot-program och kör följande kommando för att skapa avbildningen och skicka avbildningen till registret:

    az acr login && mvn compile jib:build
    

Not

På grund av säkerhetsproblemet i Azure Cli och Azure Container Registry är autentiseringsuppgifterna som skapats av az acr login giltiga i 1 timme. Om du ser ett 401 Unauthorized fel kan du köra kommandot az acr login --name <your registry name> igen för att autentisera igen. Om du ser ett Read timed out fel kan du prova att öka tidsgränserna med mvn -Djib.httpTimeout=7200000 jib:dockerBuildeller -Djib.httpTimeout=0 för en oändlig timeout.

Skapa ett Kubernetes-kluster på AKS med hjälp av Azure CLI

  1. Skapa ett Kubernetes-kluster i Azure Kubernetes Service. Följande kommando skapar ett kubernetes-kluster i resursgruppen wingtiptoys-kubernetes, med wingtiptoys-akscluster som klusternamn, med Azure Container Registry (ACR) wingtiptoysregistry anslutet och wingtiptoys-kubernetes som DNS-prefix:

    az aks create --resource-group=wingtiptoys-kubernetes --name=wingtiptoys-akscluster \
     --attach-acr wingtiptoysregistry \
     --dns-name-prefix=wingtiptoys-kubernetes --generate-ssh-keys
    

    Det här kommandot kan ta en stund att slutföra.

  2. Installera kubectl med hjälp av Azure CLI. Linux-användare kan behöva prefixa det här kommandot med sudo eftersom det distribuerar Kubernetes CLI till /usr/local/bin.

    az aks install-cli
    
  3. Ladda ned klusterkonfigurationsinformationen så att du kan hantera klustret från Kubernetes-webbgränssnittet och kubectl.

    az aks get-credentials --resource-group=wingtiptoys-kubernetes --name=wingtiptoys-akscluster
    

Distribuera avbildningen till ditt Kubernetes-kluster

I den här självstudien distribueras appen med hjälp av kubectloch sedan kan du utforska distributionen via Kubernetes-webbgränssnittet.

Distribuera med kubectl

  1. Öppna kommando-prompten.

  2. Kör containern i Kubernetes-klustret med hjälp av kommandot kubectl run. Ange ett tjänstnamn för din app i Kubernetes och det fullständiga bildnamnet. Till exempel:

    kubectl run gs-spring-boot-docker --image=wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest
    

    I det här kommandot:

    • Containernamnet gs-spring-boot-docker anges omedelbart efter kommandot run

    • Parametern --image anger den kombinerade inloggningsservern och avbildningsnamnet som wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest

  3. Exponera Kubernetes-klustret externt med hjälp av kommandot kubectl expose. Ange tjänstnamnet, den offentliga TCP-port som används för att komma åt appen och den interna målport som appen lyssnar på. Till exempel:

    kubectl expose pod gs-spring-boot-docker --type=LoadBalancer --port=80 --target-port=8080
    

    I det här kommandot:

    • Containernamnet gs-spring-boot-docker anges omedelbart efter kommandot expose pod.

    • Parametern --type anger att klustret använder lastbalanserare.

    • Parametern --port anger den offentliga TCP-porten på 80. Du kommer åt appen på den här porten.

    • Parametern --target-port anger den interna TCP-porten 8080. Lastbalanseraren vidarebefordrar begäranden till din app på den här porten.

  4. När appen har distribuerats till klustret frågar du den externa IP-adressen och öppnar den i webbläsaren:

    kubectl get services -o=jsonpath='{.items[*].status.loadBalancer.ingress[0].ip}'
    

    Bläddra bland exempelappen i Azure

Distribuera med Kubernetes-resursvyn

  1. Välj Lägg till från någon av resursvyerna (namnområde, arbetsbelastningar, tjänster och ingresser, lagring eller konfiguration).

    Kubernetes-resurser vyn.

  2. Klistra in följande 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. Välj Lägg till längst ned i YAML-redigeraren för att distribuera programmet.

    Visa och lägg till Kubernetes-resurser.

    När du har distribuerat Deploymentväljer du precis som ovan Lägg till längst ned i YAML-redigeraren för att distribuera Service med hjälp av följande 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. När YAML-filen har lagts till visar resursvisningsprogrammet ditt Spring Boot-program. Den externa tjänsten innehåller en länkad extern IP-adress så att du enkelt kan visa programmet i webbläsaren.

    Kubernetes-resursvy, tjänstlista.

    Kubernetes-resursvy, tjänstlista, externa slutpunkter markerade.

  5. Välj Extern IP. Sedan visas ditt Spring Boot-program som körs i Azure.

    Bläddra bland exempelappen i Azure

Nästa steg

Om du vill veta mer om Spring och Azure fortsätter du till dokumentationscentret för Spring on Azure.

Se även

Mer information om hur du använder Spring Boot på Azure finns i följande artikel:

Mer information om hur du använder Azure med Java finns i Azure for Java Developers och Working with Azure DevOps and Java.

Mer information om hur du distribuerar ett Java-program till Kubernetes med Visual Studio Code finns i Visual Studio Code Java-självstudier.

Mer information om exempelprojektet Spring Boot on Docker finns i Spring Boot on Docker Getting Started.

Följande länkar innehåller ytterligare information om hur du skapar Spring Boot-program:

  • Mer information om hur du skapar ett enkelt Spring Boot-program finns i Spring Initializr på https://start.spring.io/.

Följande länkar innehåller ytterligare information om hur du använder Kubernetes med Azure:

Mer information om hur du använder Kubernetes kommandoradsgränssnitt finns i användarhandboken för kubectlhttps://kubernetes.io/docs/reference/kubectl/.

Kubernetes webbplats innehåller flera artiklar som diskuterar hur du använder bilder i privata register:

Ytterligare exempel för hur du använder anpassade Docker-avbildningar med Azure finns i Använda en anpassad Docker-avbildning för Azure Web App på Linux.

Mer information om hur du iterativt kör och felsöker containrar direkt i Azure Kubernetes Service (AKS) med Azure Dev Spaces finns i Komma igång med Azure Dev Spaces med Java