Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Nota
Per le applicazioni Spring Boot, usare App contenitore di Azure. Tuttavia, è comunque possibile usare il servizio Azure Kubernetes come destinazione. Per altre informazioni, vedere Scegliere i servizi di Azure corretti per le applicazioni Java.
Questa esercitazione illustra come usare Kubernetes e Docker per sviluppare e distribuire un'applicazione Spring Boot in Microsoft Azure. In particolare, si usano Spring Boot per lo sviluppo di applicazioni, Kubernetes per la distribuzione dei contenitori e del servizio Azure Kubernetes per ospitare l'applicazione.
Kubernetes e Docker sono soluzioni open source che consentono agli sviluppatori di automatizzare la distribuzione, il ridimensionamento e la gestione delle applicazioni in esecuzione nei contenitori.
Prerequisiti
- Sottoscrizione Azure. Se non si ha già un abbonamento Azure, attivare i vantaggi del sottoscrittore MSDN o iscriversi per ottenere un account Azure gratuito.
- L'interfaccia da riga di comando di Azure.
- Un Java Development Kit (JDK) supportato. Per altre informazioni sui JDK disponibili per lo sviluppo in Azure, vedere supporto Java in Azure e Azure Stack.
- Apache Maven build tool (versione 3).
- Un client Git.
- Un client Docker.
- L'helper delle credenziali Docker di Azure Container Registry .
Nota
A causa dei requisiti di virtualizzazione di questa esercitazione, non è possibile seguire i passaggi descritti in questo articolo in una macchina virtuale. È necessario usare un computer fisico con funzionalità di virtualizzazione abilitate.
Creare l'app Web per iniziare con Spring Boot su Docker
La procedura seguente illustra come creare un'applicazione Web Spring Boot e testarla in locale.
Aprire un prompt dei comandi e creare una directory locale per contenere l'applicazione e passare a tale directory; ad esempio:
mkdir C:\SpringBoot cd C:\SpringBoot-- o --
mkdir /users/$USER/SpringBoot cd /users/$USER/SpringBootClonare il Spring Boot in Docker Getting Started progetto di esempio nella directory.
git clone https://github.com/spring-guides/gs-spring-boot-docker.gitPassare alla directory del progetto completato.
cd gs-spring-boot-docker cd completeUsare Maven per compilare ed eseguire l'app di esempio.
mvn package spring-boot:runTesta l'app Web navigando a
http://localhost:8080o utilizzando il comando seguentecurl.curl http://localhost:8080Viene visualizzato il messaggio seguente: Hello Docker World
Creare un Registro Azure Container usando l'interfaccia della riga di comando di Azure
Aprire un prompt dei comandi.
Accedere all'account Azure:
az loginSelezionare la sottoscrizione Azure:
az account set -s <YourSubscriptionID>Creare un gruppo di risorse per le risorse di Azure usate in questa esercitazione.
az group create --name=wingtiptoys-kubernetes --location=eastusCreare un registro privato di Azure Container nel gruppo di risorse. La guida carica l'app di esempio come immagine Docker in questo registro nei passaggi successivi. Sostituire
wingtiptoysregistrycon un nome univoco per il registro.az acr create --resource-group wingtiptoys-kubernetes --location eastus \ --name wingtiptoysregistry --sku Basic
Esegui il push dell'app verso il registro dei contenitori tramite Jib
Accedere al Registro Azure Container dal interfaccia della riga di comando di Azure.
# 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 loginAprire il file pom.xml con un editor di testo, ad esempio Visual Studio Code.
code pom.xmlAggiornare la
<properties>raccolta nel file pom.xml con il nome del Registro Azure Container e la versione più recente dijib-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>Aggiornare la raccolta
<plugins>nel file pom.xml in modo che l'elemento<plugin>contenga una voce per iljib-maven-plugin, come illustrato nell'esempio seguente. Usa un'immagine di base di Microsoft Container Registry (MCR):mcr.microsoft.com/openjdk/jdk:11-ubuntu, che contiene un JDK ufficialmente supportato per Azure. Per altre immagini di base MCR con JDK supportati ufficialmente, vedere Installare il Microsoft Build di 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>Passa alla directory del progetto completato per la tua applicazione Spring Boot ed esegui il comando seguente per creare l'immagine e inviarla al registro:
az acr login && mvn compile jib:build
Nota
Per motivi di sicurezza, le credenziali create tramite az acr login sono valide per un'ora. Se viene visualizzato un 401 Unauthorized errore, eseguire di nuovo il comando per ripetere l'autenticazione az acr login --name <your registry name> . Se viene visualizzato un Read timed out errore, provare ad aumentare i timeout con mvn -Djib.httpTimeout=7200000 jib:dockerBuildo usare -Djib.httpTimeout=0 per un timeout infinito.
Creare un cluster Kubernetes in AKS usando interfaccia della riga di comando di Azure
Creare un cluster Kubernetes nel servizio Azure Kubernetes. Il comando seguente crea un cluster Kubernetes nel
wingtiptoys-kubernetesgruppo di risorse conwingtiptoys-aksclustercome nome del cluster, con Registro Azure Container (ACR)wingtiptoysregistrycollegato ewingtiptoys-kubernetescome prefisso DNS:az aks create --resource-group=wingtiptoys-kubernetes --name=wingtiptoys-akscluster \ --attach-acr wingtiptoysregistry \ --dns-name-prefix=wingtiptoys-kubernetes --generate-ssh-keysIl completamento di questo comando potrebbe richiedere alcuni minuti.
Installare
kubectlusando l'interfaccia della riga di comando di Azure. Gli utenti Linux potrebbero dover anteporre questo comando asudopoiché distribuisce l'interfaccia della riga di comando di Kubernetes in/usr/local/bin.az aks install-cliScarica le informazioni di configurazione del cluster per poter gestire il tuo cluster dall'interfaccia web di Kubernetes e
kubectl.az aks get-credentials --resource-group=wingtiptoys-kubernetes --name=wingtiptoys-akscluster
Distribuire l'immagine nel cluster Kubernetes
Questa esercitazione distribuisce l'app usando kubectle quindi è possibile esplorare la distribuzione tramite l'interfaccia Web Kubernetes.
Eseguire la distribuzione con kubectl
Aprire un prompt dei comandi.
Esegui il tuo contenitore nel cluster Kubernetes usando il comando
kubectl run. Fornisci un nome al servizio per la tua app in Kubernetes e il nome completo dell'immagine. Per esempio:kubectl run gs-spring-boot-docker --image=wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latestIn questo comando:
Specificare il nome
gs-spring-boot-dockerdel contenitore immediatamente dopo ilruncomando.Il
--imageparametro specifica il server di accesso combinato e il nome dell'immagine comewingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest.
Esporre il cluster Kubernetes esternamente usando il comando
kubectl expose. Specificare il nome del servizio, la porta TCP pubblica usata per accedere all'app e la porta di destinazione interna su cui è in ascolto l'app. Per esempio:kubectl expose pod gs-spring-boot-docker --type=LoadBalancer --port=80 --target-port=8080In questo comando:
Specificare il nome
gs-spring-boot-dockerdel contenitore immediatamente dopo ilexpose podcomando.Il parametro
--typespecifica che il cluster usa il servizio di bilanciamento del carico.Il parametro
--portspecifica la porta TCP pubblica di 80. Si accede all'app su questa porta.Il parametro
--target-portspecifica la porta TCP interna 8080. Il bilanciatore di carico inoltra le richieste all'app su questa porta.
Dopo aver distribuito l'app nel cluster, eseguire una query sull'indirizzo IP esterno e aprirla nel Web browser:
kubectl get services -o=jsonpath='{.items[*].status.loadBalancer.ingress[0].ip}'
Eseguire la distribuzione con la visualizzazione delle risorse Kubernetes
Selezionare Aggiungi da una delle visualizzazioni delle risorse (Namespace, Carichi di lavoro, Servizi, Ingress, Archiviazione o Configurazione).
Incollare il codice YAML seguente:
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:latestSelezionare Aggiungi nella parte inferiore dell'editor YAML per distribuire l'applicazione.
Dopo aver distribuito ,
Deploymentesattamente come nel passaggio precedente, selezionare Aggiungi nella parte inferiore dell'editor YAML per eseguire la distribuzioneServiceusando il codice YAML seguente:apiVersion: v1 kind: Service metadata: name: gs-spring-boot-docker spec: type: LoadBalancer ports: - port: 80 targetPort: 8080 selector: app: gs-spring-boot-dockerDopo aver aggiunto il file YAML, il visualizzatore di risorse mostra l'applicazione Spring Boot. Il servizio esterno include un indirizzo IP esterno collegato in modo da poter visualizzare facilmente l'applicazione nel browser.
Selezionare IP esterno. Viene visualizzata l'applicazione Spring Boot in esecuzione in Azure.
Passaggi successivi
Per altre informazioni su Spring e Azure, passare al Centro documentazione di Spring in Azure.
Vedere anche
Per altre informazioni sull'uso di Spring Boot in Azure, vedere l'articolo seguente:
Per altre informazioni sull'uso di Azure con Java, vedere Azure for Java Developers e Working with Azure DevOps and Java.
Per altre informazioni sulla distribuzione di un'applicazione Java in Kubernetes con Visual Studio Code, vedere Visual Studio Code Java Tutorials.
Per altre informazioni sul progetto di esempio Spring Boot in Docker, vedere Spring Boot in Introduzione a Docker.
I collegamenti seguenti forniscono altre informazioni sulla creazione di applicazioni Spring Boot:
- Per altre informazioni sulla creazione di una semplice applicazione Spring Boot, vedere Spring Initializr all'indirizzo https://start.spring.io/.
I collegamenti seguenti forniscono altre informazioni sull'uso di Kubernetes con Azure:
Per altre informazioni sull'uso dell'interfaccia della riga di comando di Kubernetes, vedere la guida dell'utente kubectl all'indirizzo https://kubernetes.io/docs/reference/kubectl/.
Il sito Web Kubernetes include diversi articoli che illustrano l'uso delle immagini nei registri privati:
- Configurazione degli account di servizio per i pod
- spazi dei nomi
- il pull di un'immagine da un registro privato
Per altri esempi di come usare immagini Docker personalizzate con Azure, vedere Uso di un'immagine Docker personalizzata per Azure'app Web in Linux.
Per altre informazioni sull'esecuzione iterativa e sul debug dei contenitori direttamente in Servizio Azure Kubernetes (AKS) con Azure Dev Spaces, vedere Introduzione a Azure Dev Spaces con Java.