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
- En Azure-prenumeration. Om du inte redan har en Azure-prenumeration kan du aktivera din MSDN-prenumerantförmån eller registrera dig för ett kostnadsfritt Azure-konto.
- Azures kommandoradsgränssnitt (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-stöd i Azure och Azure Stack.
- Apache-verktyget Maven (version 3).
- En Git-klient.
- En Docker-klient.
- Hjälpkomponenten för ACR Docker-autentiseringsuppgifter.
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.
Ö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
Klona exempelprojektet Kom igång med Spring Boot på Docker 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 till att kompilera 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-containerregister med hjälp av Azure CLI
Öppna kommandotolken.
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. 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
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
Ö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 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>
Uppdatera samlingen
<plugins>
i filen pom.xml så att elementet<plugin>
innehåller en post förjib-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>
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
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.
Installera
kubectl
med Azure CLI. Linux-användare kan behöva lägga tillsudo
innan kommandot eftersom det distribuerar Kubernetes CLI till/usr/local/bin
.az aks install-cli
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 kubectl
du kan sedan utforska distributionen via Kubernetes-webbgränssnittet.
Anslut med kubectl
Öppna kommandotolken.
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 efterrun
-kommandotAnger
--image
-parametern den kombinerade inloggningsservern och avbildningens namn somwingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest
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 efterexpose 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.
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 (namnrymd, 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
, precis som ovan, väljer du 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-adress. Sedan visas ditt Spring Boot-program som körs i 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