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
- En Azure-prenumeration; Om du inte redan har en Azure-prenumeration kan du aktivera dina MSDN-prenumerantförmåner eller registrera dig för ett kostnadsfritt Azure-konto.
- Azure Command-Line Interface (CLI).
- Ett Java Development Kit (JDK) som stöds. Mer information om de JDK:er som är tillgängliga för användning när du utvecklar i Azure finns i Java-support på Azure och Azure Stack.
- Apaches Maven build-verktyg (version 3).
- En Git-klient.
- En Docker--klient.
- ACR Docker-referenshjälpverktyg.
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.
Ö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
Kopiera Spring Boot på Docker Kom igång exempelprojekt i katalogen.
git clone https://github.com/spring-guides/gs-spring-boot-docker.git
Byt katalog till det slutförda projektet.
cd gs-spring-boot-docker cd complete
Använd Maven för att skapa och köra exempelappen.
mvn package spring-boot:run
Testa webbappen genom att bläddra till
http://localhost:8080
eller med följandecurl
kommando:curl http://localhost:8080
Du bör se följande meddelande: Hello Docker World
Skapa ett Azure Container Registry med hjälp av Azure CLI
Öppna kommando-prompten.
Logga in på ditt Azure-konto:
az login
Välj din Azure-prenumeration:
az account set -s <YourSubscriptionID>
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
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
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
Öppna filen pom.xml med en textredigerare. till exempel Visual Studio Code.
code pom.xml
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>
Uppdatera
<plugins>
-samlingen i pom.xml-filen så att<plugin>
-elementet innehåller en post förjib-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>
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:dockerBuild
eller -Djib.httpTimeout=0
för en oändlig timeout.
Skapa ett Kubernetes-kluster på AKS med hjälp av Azure CLI
Skapa ett Kubernetes-kluster i Azure Kubernetes Service. Följande kommando skapar ett kubernetes-kluster i resursgruppen
wingtiptoys-kubernetes
, medwingtiptoys-akscluster
som klusternamn, med Azure Container Registry (ACR)wingtiptoysregistry
anslutet ochwingtiptoys-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.
Installera
kubectl
med hjälp av Azure CLI. Linux-användare kan behöva prefixa det här kommandot medsudo
eftersom det distribuerar Kubernetes CLI till/usr/local/bin
.az aks install-cli
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 kubectl
och sedan kan du utforska distributionen via Kubernetes-webbgränssnittet.
Distribuera med kubectl
Öppna kommando-prompten.
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 kommandotrun
Parametern
--image
anger den kombinerade inloggningsservern och avbildningsnamnet somwingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest
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 kommandotexpose 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.
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}'
Distribuera med Kubernetes-resursvyn
Välj Lägg till från någon av resursvyerna (namnområde, arbetsbelastningar, tjänster och ingresser, lagring eller konfiguration).
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
Välj Lägg till längst ned i YAML-redigeraren för att distribuera programmet.
När du har distribuerat
Deployment
väljer du precis som ovan Lägg till längst ned i YAML-redigeraren för att distribueraService
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
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.
Välj Extern IP. Sedan visas ditt Spring Boot-program som körs 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 kubectl på https://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