Condividi tramite


Distribuire l'applicazione Spring Boot nel servizio Azure Kubernetes

Nota

Per le applicazioni Spring Boot, è consigliabile usare App Azure Container. Tuttavia, è comunque possibile scegliere di 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 combinare 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

  • Una sottoscrizione di Azure; Se non si ha già una sottoscrizione di Azure, è possibile attivare i vantaggi del sottoscrittore MSDN o iscriversi per ottenere un account Azure gratuito .
  • interfaccia Command-Line 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.

  1. Aprire un prompt dei comandi e creare una directory locale per contenere l'applicazione, quindi passare a tale directory; per esempio:

    mkdir C:\SpringBoot
    cd C:\SpringBoot
    

    -- o --

    mkdir /users/$USER/SpringBoot
    cd /users/$USER/SpringBoot
    
  2. Clonare il Spring Boot in Docker Getting Started progetto di esempio nella directory.

    git clone https://github.com/spring-guides/gs-spring-boot-docker.git
    
  3. Passare alla directory del progetto completato.

    cd gs-spring-boot-docker
    cd complete
    
  4. Usare Maven per compilare ed eseguire l'app di esempio.

    mvn package spring-boot:run
    
  5. Testa l'app Web navigando a http://localhost:8080o utilizzando il comando seguente curl.

    curl http://localhost:8080
    
  6. Verrà visualizzato il messaggio seguente: Hello Docker World

    Esplora l'app di esempio a livello locale

Creare un Registro Azure Container usando l'interfaccia della riga di comando di Azure

  1. Aprire un prompt dei comandi.

  2. Accedi al tuo account Azure:

    az login
    
  3. Scegliere la sottoscrizione di Azure:

    az account set -s <YourSubscriptionID>
    
  4. Creare un gruppo di risorse per le risorse di Azure usate in questa esercitazione.

    az group create --name=wingtiptoys-kubernetes --location=eastus
    
  5. Creare 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 wingtiptoysregistry con 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

  1. Accedere al Registro Azure Container dall'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 login
    
  2. Aprire il file pom.xml con un editor di testo; ad esempio Visual Studio Code.

    code pom.xml
    
  3. Aggiornare la raccolta <properties> nel file pom.xml con il nome del registro per Azure Container e l'ultima versione del plugin jib-maven .

    <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. Aggiornare la raccolta <plugins> nel file pom.xml in modo che l'elemento <plugin> contenga una voce per il jib-maven-plugin, come illustrato nell'esempio seguente. Si noti che si usa un'immagine di base del Registro Contenitori Microsoft (MCR): mcr.microsoft.com/openjdk/jdk:11-ubuntu, che contiene un JDK ufficialmente supportato per Azure. Per altre immagini di base MCR con JDK ufficialmente supportati, vedere installare la 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>
    
  5. Passare alla directory del progetto completato per l'applicazione Spring Boot ed eseguire il comando seguente per compilare l'immagine e fare il push dell'immagine nel registro:

    az acr login && mvn compile jib:build
    

Nota

A causa del problema di sicurezza relativo a Azure CLI e al Registro dei Contenitori Azure, le credenziali create da az acr login sono valide per 1 ora. Se viene visualizzato un errore di 401 Unauthorized, è possibile eseguire di nuovo il comando az acr login --name <your registry name> per ripetere l'autenticazione. Se viene visualizzato un errore di Read timed out, è possibile provare ad aumentare i timeout con mvn -Djib.httpTimeout=7200000 jib:dockerBuildo -Djib.httpTimeout=0 per un timeout infinito.

Creare un cluster Kubernetes su Azure Kubernetes Service usando Azure CLI

  1. Creare un cluster Kubernetes nel servizio Azure Kubernetes. Il comando seguente crea un cluster kubernetes nel gruppo di risorse wingtiptoys-kubernetes, con wingtiptoys-akscluster come nome del cluster, con registro Azure Container wingtiptoysregistry collegato e wingtiptoys-kubernetes come prefisso DNS:

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

    Il completamento di questo comando può richiedere del tempo.

  2. Installare kubectl usando l'interfaccia della riga di comando di Azure. Gli utenti Linux potrebbero dover anteporre questo comando a sudo poiché distribuisce l'interfaccia della riga di comando di Kubernetes in /usr/local/bin.

    az aks install-cli
    
  3. Scarica 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 kubectl, quindi consente di esplorare la distribuzione tramite l'interfaccia Web Kubernetes.

Eseguire la distribuzione con kubectl

  1. Aprire un prompt dei comandi.

  2. 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:latest
    

    In questo comando:

    • Il nome del contenitore gs-spring-boot-docker viene specificato immediatamente dopo il comando run

    • Il parametro --image specifica il server di accesso combinato e il nome dell'immagine come wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest

  3. 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=8080
    

    In questo comando:

    • Il nome del contenitore gs-spring-boot-docker viene specificato immediatamente dopo il comando expose pod.

    • Il parametro --type specifica che il cluster usa il servizio di bilanciamento del carico.

    • Il parametro --port specifica la porta TCP pubblica di 80. Si accede all'app su questa porta.

    • Il parametro --target-port specifica la porta TCP interna 8080. Il bilanciatore di carico inoltra le richieste all'app su questa porta.

  4. 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}'
    

    Esplorare un'app di esempio in Azure

Eseguire la distribuzione con la visualizzazione delle risorse Kubernetes

  1. Selezionare Aggiungi da una delle visualizzazioni delle risorse (Namespace, Carichi di lavoro, Servizi, Ingress, Archiviazione o Configurazione).

    visualizzazione delle risorse Kubernetes.

  2. 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:latest
    
  3. Selezionare Aggiungi nella parte inferiore dell'editor YAML per distribuire l'applicazione.

    Visualizza le risorse Kubernetes, aggiungi una risorsa.

    Dopo aver distribuito il Deployment, come sopra, selezionare Aggiungi in fondo all'editor YAML per distribuire Service usando 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-docker
    
  4. Dopo aver aggiunto il file YAML, il visualizzatore 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.

    visualizzazione risorse Kubernetes, elenco servizi.

    visualizzazione delle risorse di Kubernetes, elenco dei servizi e endpoint esterni evidenziati.

  5. Selezionare IP esterno. Verrà quindi visualizzata l'applicazione Spring Boot in esecuzione in Azure.

    Esplorare un'app di esempio 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 informazioni aggiuntive 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 informazioni aggiuntive sull'uso di Kubernetes con Azure:

Altre informazioni sull'uso dell'interfaccia della riga di comando di Kubernetes sono disponibili nella guida per l'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:

Per altri esempi per l'uso di immagini Docker personalizzate con Azure, vedere Uso di un'immagine Docker personalizzata per App Web di Azure in Linux.

Per altre informazioni sull'esecuzione iterativa e sul debug dei contenitori direttamente nel servizio Azure Kubernetes con Azure Dev Spaces, vedere Introduzione ad Azure Dev Spaces con Java