Distribuera ett Spring Boot-program till Azure Kubernetes Service

Kommentar

För Spring Boot-program rekommenderar vi att du använder Azure Spring 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) för att vara värd för ditt program.

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

Förutsättningar

Kommentar

På grund av kraven för virtualisering 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 aktiverade funktioner för virtualisering.

Skapa webbappen Spring Boot on Docker Getting Started

Med följande steg skapar du en Spring Boot-webbapp och testar den lokalt.

  1. Öppna en kommandotolk och skapa en lokal katalog för ditt program och byt till den katalogen, till exempel:

    mkdir C:\SpringBoot
    cd C:\SpringBoot
    

    - eller -

    mkdir /users/$USER/SpringBoot
    cd /users/$USER/SpringBoot
    
  2. Klona exempelprojektet Kom igång med Spring Boot på Docker 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 till att kompilera 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 i exempelappen lokalt

Skapa ett Azure-containerregister med hjälp av Azure CLI

  1. Öppna kommandotolken.

  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. Självstudien skickar exempelappen som en Docker-avbildning till det här registret under senare steg. Ersätt wingtiptoysregistry med ett unikt namn för ditt register.

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

Skicka appen till containerregistret via Jib

  1. Logga in på ditt 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 din 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 samlingen <plugins> i filen pom.xml så att elementet <plugin> innehåller en post för jib-maven-plugin, såsom det visas i 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 en JDK som stöds officiellt 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. Navigera till den slutförda projektkatalogen för ditt Spring Boot-program och kör följande kommando för att skapa avbildningen och push-överföra den till registret:

    az acr login && mvn compile jib:build
    

Kommentar

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 az acr login --name <your registry name> kommandot igen för att autentisera igen. Om du ser ett timeout-fel för läsning kan du prova att öka tidsgränserna med mvn -Djib.httpTimeout=7200000 jib:dockerBuild, eller -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 kopplat 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 Azure CLI. Linux-användare kan behöva lägga till sudo innan kommandot eftersom det distribuerar Kubernetes CLI till /usr/local/bin.

    az aks install-cli
    
  3. Ladda ner 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 och kubectldu kan sedan utforska distributionen via Kubernetes-webbgränssnittet.

Anslut med kubectl

  1. Öppna kommandotolken.

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

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

    I det här kommandot:

    • Anges containernamnet gs-spring-boot-docker omedelbart efter run-kommandot

    • Anger --image-parametern den kombinerade inloggningsservern och avbildningens namn som wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest

  3. Exponera ditt Kubernetes-kluster externt med hjälp av kommandot kubectl expose. Ange tjänstnamnet, den offentliga TCP-porten som används för att få åtkomst till appen och den interna målporten 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 expose pod-kommandot.

    • --type-parametern 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 offentliga TCP-porten på 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 i exempelappen på Azure

Distribuera med Kubernetes-resursvyn

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

    Kubernetes-resursvy.

  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.

    Kubernetes-resursvy, lägg till resurs.

    När du har distribuerat Deployment, precis som ovan, väljer du 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-adress. Sedan visas ditt Spring Boot-program som körs i Azure.

    Bläddra i exempelappen på Azure

Nästa steg

Om du vill veta mer om Spring och Azure kan du fortsätta till dokumentationscentret för Spring i Azure.

Se även

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

Mer information om hur du använder Azure med Java finns i Azure för Java-utvecklare och Arbeta med Azure DevOps och Java.

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

För ytterligare information om exempelprojektet Spring Boot i Docker, se Komma igång med Spring Boot i Docker.

Följande länkar ger ytterligare information om att skapa Spring Boot-program:

  • Mer information om att komma igång med att skapa ett enkelt Spring Boot-program finns i Spring Initializr på https://start.spring.io/.

Följande länkar innehåller ytterligare information om att använda Kubernetes med Azure:

Mer information om att använda Kubernetes-kommandoradsgränssnittet finns tillgängligt i kubectl-användarguiden på https://kubernetes.io/docs/reference/kubectl/.

Kubernetes-webbplatsen har flera artiklar som diskuterar användningen av bilder i privata register:

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

Mer information om iterativ körning och felsökning av containrar direkt i Azure Kubernetes Service (AKS) med Azure Dev Spaces finns i Kom igång med Azure Dev Spaces med Java