Partager via


Déployer l’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 tout au long de la combinaison de Kubernetes et de 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 les 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 s’exécutant dans des conteneurs.

Conditions préalables

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 tout au long de la création d’une application web Spring Boot et le testent localement.

  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 sur Docker Getting Started dans le répertoire.

    git clone https://github.com/spring-guides/gs-spring-boot-docker.git
    
  3. Remplacez le répertoire par le projet terminé.

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

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

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

    Parcourir l’exemple d’application en local

Créer un registre de conteneurs Azure à l’aide d’Azure CLI

  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éez un groupe de ressources pour les ressources Azure utilisées dans ce tutoriel.

    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 (push) votre application au registre de conteneurs via Jib

  1. Connectez-vous à votre Registre de conteneurs Azure à partir d’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 pour votre Azure Container Registry et la version la plus récente 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 le jib-maven-plugin, comme illustré dans l’exemple suivant. Notez que nous utilisons une image de base de Microsoft Container Registry (MCR) : mcr.microsoft.com/openjdk/jdk:11-ubuntu, qui contient un JDK officiellement pris en charge pour Azure. Pour d'autres images de base MCR avec des JDK officiellement pris en charge, consultez la section Installer la Microsoft Build 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

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 Unauthorized, vous pouvez réexécuter la commande az acr login --name <your registry name> pour réauthentifier. Si vous voyez une erreur Read timed out, vous pouvez essayer d’augmenter les délais d’expiration avec mvn -Djib.httpTimeout=7200000 jib:dockerBuild, ou -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 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
    

    Cette commande peut prendre un certain temps.

  2. Installez kubectl à l’aide d’Azure CLI. Les utilisateurs Linux peuvent avoir à préfixer cette commande avec 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 pour 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 permet d’explorer le déploiement via l’interface web Kubernetes.

Déployer avec kubectl

  1. Ouvrez une invite de commandes.

  2. Exécutez votre conteneur dans le cluster Kubernetes à l’aide de la commande kubectl run. Donnez un nom de service à votre application dans Kubernetes et 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é immédiatement après la commande run

    • Le paramètre --image spécifie le nom combiné du serveur de connexion et de l’image comme 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 public utilisé pour accéder à l’application et le port cible interne sur lequel votre application écoute. 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é immédiatement 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 public de 80. Vous accédez à l’application sur ce port.

    • Le paramètre --target-port spécifie le port TCP interne de 8080. L’équilibreur de charge transfère les requêtes à votre application sur ce port.

  4. Une fois l’application déployée 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 dans l’une des vues de ressources (espace de noms, charges de travail, services et ingresses, stockage ou 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, ajoutez une ressource.

    Après avoir déployé le Deployment, comme ci-dessus, sélectionnez Ajouter en bas de l’éditeur YAML pour déployer Service à l’aide du 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 le fichier YAML ajouté, la visionneuse de ressources affiche votre application Spring Boot. Le service externe inclut une adresse IP externe liée pour vous permettre 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, passez au centre de documentation Spring sur Azure.

Voir aussi

Pour plus d’informations sur l’utilisation de 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 didacticiels Java Visual Studio Code.

Pour plus d’informations sur l’exemple de projet Spring Boot sur Docker, consultez Spring Boot sur 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 à https://start.spring.io/.

Les liens suivants fournissent des informations supplémentaires 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 à https://kubernetes.io/docs/reference/kubectl/.

Le site web Kubernetes contient plusieurs articles qui traitent de l’utilisation d’images dans des registres privés :

Pour obtenir des exemples supplémentaires d’utilisation d’images Docker personnalisées avec Azure, consultez Utilisation d’une image Docker personnalisée pour Azure Web App 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 d’Azure Dev Spaces avec Java