Déployer une application Spring Boot sur Azure Kubernetes Service

Remarque

Pour les applications Spring Boot, nous vous recommandons d’utiliser Azure Spring Apps. Toutefois, vous pouvez toujours choisir d’utiliser Azure Kubernetes Service comme destination. Pour plus d’informations, consultez Choisir les services Azure appropriés pour vos applications Java.

Ce tutoriel vous guide dans la combinaison de Kubernetes et de Docker pour développer et déployer une application Spring Boot sur Microsoft Azure. Plus précisément, Spring Boot sert au développement d’applications, Kubernetes au déploiement de conteneurs et Azure Kubernetes Service (AKS) à l’hébergement de 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 nécessités liées à la virtualisation de ce didacticiel, vous ne pouvez pas suivre les étapes de cet article sur une machine virtuelle : vous devez utiliser un ordinateur physique où les fonctionnalités de virtualisation sont activées.

Créer l’application web Spring Boot on Docker Getting Started

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 y stocker votre application, puis accédez à 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. Vous devriez voir le message suivant : 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. Choisissez 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. Au cours des dernières étapes, le didacticiel envoie au registre l’exemple d’application en tant qu’image Docker. 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 instance Azure Container Registry depuis l’interface 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 ; par exemple Visual Studio Code.

    code pom.xml
    
  3. Mettez à jour la collection <properties> dans le fichier pom.xml avec le nom du registre de votre instance 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. Notez que nous utilisons une image de base provenant du Registre de conteneurs Microsoft, mcr.microsoft.com/openjdk/jdk:11-ubuntu, qui 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 la 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. Pour créer l’image Docker et la pousser dans le registre, accédez au répertoire de projet terminé de votre application Spring Boot et exécutez la commande suivante :

    az acr login && mvn compile jib:build
    

Remarque

En raison du problème de sécurité d’Azure Cli et d’Azure Container Registry, les informations d’identification créées par az acr login sont valides pendant 1 heure. Si vous voyez une erreur 401 Non autorisée , vous pouvez réexécuter la az acr login --name <your registry name> commande pour réauthentifier. Si vous voyez une erreur de délai d’attente en lecture, vous pouvez essayer d’augmenter les délais d’expiration avec mvn -Djib.httpTimeout=7200000 jib:dockerBuildou -Djib.httpTimeout=0 pour un délai d’attente infini.

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

  1. Créez un cluster Kubernetes dans Azure Kubernetes Service. La commande suivante crée un cluster kubernetes dans le groupe de ressources wingtiptoys-kubernetes avec wingtiptoys-akscluster comme nom de cluster, avec Azure Container Registry (ACR) wingtiptoysregistry joint et avec 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
    

    Cette commande peut prendre un certain temps.

  2. Installez kubectl à l’aide de l’interface de ligne de commande Azure. Les utilisateurs Linux doivent ajouter cette commande en préfixe sur sudo car elle déploie l’interface de ligne de commande Kubernetes dans /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 avec kubectl, puis vous permet d’explorer le déploiement via 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. Par exemple :

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

    Dans cette commande :

    • Le nom du conteneur gs-spring-boot-docker est spécifié directement après la commande run.

    • Le paramètre --image spécifie le nom combiné du nom de serveur et du 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. Par exemple :

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

    Dans cette commande :

    • Le nom du conteneur gs-spring-boot-docker est spécifié directement après la commande expose pod.

    • 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. Une fois que l’application est déployée sur le cluster, faites la demande de 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).

    Vue 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.

    Vue ressources Kubernetes, ajouter une ressource.

    Après avoir déployé le Deploymentfichier , comme ci-dessus, sélectionnez Ajouter en bas de l’éditeur YAML à déployer Service à l’aide de la version YAML suivante :

    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 le fichier YAML ajouté, 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.

    Vue ressources Kubernetes, liste des services.

    Vue ressources Kubernetes, liste des services, points de terminaison externes mis en surbrillance.

  5. Sélectionnez Adresse IP externe. Vous verrez ensuite votre application Spring Boot s’exécutant 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 des informations supplémentaires 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 des informations supplémentaires sur l’utilisation de Kubernetes avec Azure :

Plus d’informations sur l’utilisation d’interface de ligne de commande Kubernetes sont disponibles dans le guide d’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 obtenir des exemples supplémentaires sur l’utilisation d’images Docker personnalisées avec Azure, consultez Comment utiliser une image Docker personnalisée pour Azure Web App sur Linux.

Pour plus d’informations sur l’exécution et le débogage itératifs des conteneurs directement dans Azure Kubernetes Service (AKS) avec Azure Dev Spaces, consultez Bien démarrer sur Azure Dev Spaces avec Java