Déployer l’application Spring Boot sur Azure Kubernetes Service

Remarque

Pour les applications Spring Boot, utilisez Azure Container Apps. Toutefois, vous pouvez toujours utiliser Azure Kubernetes Service comme destination. Pour plus d’informations, consultez Choisissez les bons services Azure pour vos applications Java.

Ce tutoriel vous montre comment utiliser Kubernetes et Docker pour développer et déployer une application Spring Boot sur Microsoft Azure. Plus précisément, vous utilisez Spring Boot pour le développement d’applications, Kubernetes pour le déploiement de conteneurs et Azure Kubernetes Service (AKS) pour héberger votre application.

Kubernetes et Docker sont des solutions open source qui aident les développeurs à automatiser le déploiement, la mise à l’échelle et la gestion de leurs applications en cours d’exécution dans des conteneurs.

Prérequis

Remarque

En raison des exigences de virtualisation de ce didacticiel, vous ne pouvez pas suivre les étapes décrites dans cet article sur une machine virtuelle. Vous devez utiliser un ordinateur physique avec les fonctionnalités de virtualisation activées.

Créer l'application web de démarrage Spring Boot sur Docker

Les étapes suivantes vous guident à travers la création d’une application web Spring Boot et vous aident à effectuer le test en local.

  1. Ouvrez une invite de commandes et créez un répertoire local pour contenir votre application, puis passez à ce répertoire ; par exemple :

    mkdir C:\SpringBoot
    cd C:\SpringBoot
    

    -- ou --

    mkdir /users/$USER/SpringBoot
    cd /users/$USER/SpringBoot
    
  2. Clonez l’exemple de projet Spring Boot on Docker Getting Started dans le répertoire.

    git clone https://github.com/spring-guides/gs-spring-boot-docker.git
    
  3. Accédez au répertoire du projet terminé.

    cd gs-spring-boot-docker
    cd complete
    
  4. Utilisez Maven pour créer et exécuter l’exemple d’application.

    mvn package spring-boot:run
    
  5. Testez l’application web en accédant à l’URL http://localhost:8080, ou avec la commande curl suivante :

    curl http://localhost:8080
    
  6. Le message suivant s’affiche : Hello Docker World

    Parcourir l’exemple d’application en local

Créer un registre de conteneurs Azure à l’aide de l’interface de ligne de commande Azure

  1. Ouvrez une invite de commandes.

  2. Connectez-vous à votre compte Azure :

    az login
    
  3. Sélectionnez votre abonnement Azure :

    az account set -s <YourSubscriptionID>
    
  4. Créer un groupe de ressources pour les ressources Azure utilisées dans ce didacticiel.

    az group create --name=wingtiptoys-kubernetes --location=eastus
    
  5. Créez un registre de conteneurs Azure privé dans le groupe de ressources. Le tutoriel envoie l’exemple d’application en tant qu’image Docker à ce registre lors des étapes ultérieures. Remplacez wingtiptoysregistry par un nom unique pour votre registre.

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

Envoyer l’application dans le registre de conteneurs via Jib

  1. Connectez-vous à votre Azure Container Registry à partir du 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. Ouvrez le fichier pom.xml avec un éditeur de texte, tel que Visual Studio Code.

    code pom.xml
    
  3. Mettez à jour la <properties> collection dans le fichier pom.xml avec le nom de Registre de votre registre Azure Container Registry et la dernière version de 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. Mettez à jour la collection <plugins> dans le fichier pom.xml afin que l’élément <plugin> contienne une entrée pour jib-maven-plugin comme indiqué dans l’exemple ci-dessous. Utilisez une image de base de la Microsoft Container Registry (MCR) : mcr.microsoft.com/openjdk/jdk:11-ubuntuqui contient un JDK officiellement pris en charge pour Azure. Pour obtenir d’autres images de base MCR avec des JDK officiellement pris en charge, consultez Installer le Build Microsoft d’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. Accédez au répertoire de projet terminé pour votre application Spring Boot et exécutez la commande suivante pour générer l’image et envoyer (push) l’image au Registre :

    az acr login && mvn compile jib:build
    

Remarque

Pour des raisons de sécurité, les informations d’identification que vous créez à l’aide az acr login sont valides pendant une heure. Si vous voyez une 401 Unauthorized erreur, réexécutez la az acr login --name <your registry name> commande pour réauthentifier. Si vous voyez une Read timed out erreur, essayez d’augmenter les délais d’expiration avec mvn -Djib.httpTimeout=7200000 jib:dockerBuildou d’utiliser -Djib.httpTimeout=0 pour un délai d’attente infini.

Créer un cluster Kubernetes sur AKS à l’aide de la Azure CLI

  1. Créez un cluster Kubernetes dans Azure Kubernetes Service. La commande suivante crée un cluster Kubernetes dans le wingtiptoys-kubernetes groupe de ressources, avec wingtiptoys-akscluster comme nom de cluster, avec Azure Container Registry (ACR) wingtiptoysregistry attaché et wingtiptoys-kubernetes comme préfixe DNS :

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

    L’exécution de cette commande peut prendre un certain temps.

  2. Installez kubectl à l’aide de l’interface de ligne de commande Azure. Les utilisateurs Linux peuvent avoir besoin de préfixer cette commande sudo , car elle déploie l’interface CLI Kubernetes sur /usr/local/bin.

    az aks install-cli
    
  3. Téléchargez les informations de configuration du cluster afin de pouvoir gérer votre cluster à partir de l’interface web Kubernetes et de kubectl.

    az aks get-credentials --resource-group=wingtiptoys-kubernetes --name=wingtiptoys-akscluster
    

Déployer l’image sur votre cluster Kubernetes

Ce tutoriel déploie l’application à l’aide de kubectl, puis vous pouvez explorer le déploiement à travers l’interface web de Kubernetes.

Déployer avec kubectl

  1. Ouvrez une invite de commandes.

  2. Exécutez votre conteneur dans le cluster Kubernetes en utilisant la commande kubectl run. Donnez un nom de service à votre application dans Kubernetes et saisissez le nom complet de l’image. Exemple :

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

    Dans cette commande :

    • Vous spécifiez le nom gs-spring-boot-docker du conteneur immédiatement après la run commande.

    • Le --image paramètre spécifie le serveur de connexion combiné et le nom de l’image en tant que wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest.

  3. Exposez votre cluster Kubernetes en externe à l’aide de la commande kubectl expose. Spécifiez le nom de votre service, le port TCP destiné au public permettant d’accéder à l’application, et le port cible interne que votre application écoutera. Exemple :

    kubectl expose pod gs-spring-boot-docker --type=LoadBalancer --port=80 --target-port=8080
    

    Dans cette commande :

    • Vous spécifiez le nom gs-spring-boot-docker du conteneur immédiatement après la expose pod commande.

    • Le paramètre --type spécifie que le cluster utilise l’équilibreur de charge.

    • Le paramètre --port spécifie le port TCP 80 destiné au public. Vous accédez à l’application sur ce port.

    • Le paramètre --target-port spécifie le port TCP interne 8080. L’équilibreur de charge transmet les demandes à votre application sur ce port.

  4. Après avoir déployé l’application sur le cluster, interrogez l’adresse IP externe et ouvrez-la dans votre navigateur web :

kubectl get services -o=jsonpath='{.items[*].status.loadBalancer.ingress[0].ip}'

Parcourir l’exemple d’application sur Azure

Déployer avec l’affichage des ressources Kubernetes

  1. Sélectionnez Ajouter à partir de l’un des affichages de ressources (espace de noms, charges de travail, services et entrées, stockage et configuration).

    Affichage des ressources Kubernetes.

  2. Collez le code YAML suivant :

    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. Sélectionnez Ajouter en bas de l’éditeur YAML pour déployer l’application.

    Affichage des ressources Kubernetes, ajouter une ressource.

    Après avoir déployé le Deployment, comme dans l’étape précédente, sélectionnez Ajouter en bas de l’éditeur YAML pour déployer Service à l’aide du code YAML suivant :

    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. Une fois que vous avez ajouté le fichier YAML, la visionneuse de ressources affiche votre application Spring Boot. Le service externe comprend une adresse IP externe liée, ce qui vous permet d’afficher facilement l’application dans votre navigateur.

    Affichage des ressources Kubernetes, liste des services.

    Affichage des ressources Kubernetes, liste des services, points de terminaison externes mis en évidence.

  5. Sélectionnez Adresse IP externe. Votre application Spring Boot s’exécute sur Azure.

    Parcourir l’exemple d’application sur Azure

Étapes suivantes

Pour en savoir plus sur Spring et Azure, poursuivez vers le centre de documentation Spring sur Azure.

Voir aussi

Pour plus d’informations sur l’utilisation d’applications Spring Boot sur Azure, consultez l’article suivant :

Pour plus d’informations sur l’utilisation d’Azure avec Java, renseignez-vous sur Azure pour les développeurs Java et l’utilisation d’Azure DevOps et Java.

Pour plus d’informations sur le déploiement d’une application Java sur Kubernetes avec Visual Studio Code, consultez les didacticiels de Visual Studio Code Java.

Pour plus d’informations sur l’exemple de projet Spring Boot sur Docker, consultez Spring Boot on Docker Getting Started.

Les liens suivants fournissent plus d’informations sur la création d’applications Spring Boot :

  • Pour plus d’informations sur la création d’une application Spring Boot simple, consultez Spring Initializr à l’adresse https://start.spring.io/.

Les liens suivants fournissent plus d’informations sur l’utilisation de Kubernetes avec Azure :

Pour plus d’informations sur l’utilisation de l’interface de ligne de commande Kubernetes, consultez le guide de l’utilisateur kubectl à l’adresse https://kubernetes.io/docs/reference/kubectl/.

Le site web Kubernetes comporte plusieurs articles traitant de l’utilisation d’images dans les registres privés :

Pour plus d’exemples d’utilisation d’images Docker personnalisées avec Azure, consultez Utilisation d’une image Docker personnalisée pour Azure Application web sur Linux.

Pour plus d’informations sur l’exécution itérative et le débogage de conteneurs directement dans Azure Kubernetes Service (AKS) avec Azure Dev Spaces, consultez Prise en main de Azure Dev Spaces avec Java.