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
- Un abonnement Azure ; Si vous n’avez pas encore d’abonnement Azure, vous pouvez activer vos avantages abonné MSDN ou vous inscrire à un compte Azure gratuit .
- Azure CLI.
- Kit de développement Java (JDK) pris en charge. Pour plus d’informations sur les JDK disponibles lors du développement sur Azure, consultez prise en charge de Java sur Azure et Azure Stack.
- L’outil de génération Maven (version 3) d’Apache.
- Un client Git.
- Un client Docker.
- L’assistance des informations d’identification ACR Docker.
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.
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
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
Remplacez le répertoire par le projet terminé.
cd gs-spring-boot-docker cd complete
Utilisez Maven pour générer et exécuter l’exemple d’application.
mvn package spring-boot:run
Testez l’application web en accédant à
http://localhost:8080
, ou avec la commandecurl
suivante :curl http://localhost:8080
Le message suivant doit s’afficher : Hello Docker World
Créer un registre de conteneurs Azure à l’aide d’Azure CLI
Ouvrez une invite de commandes.
Connectez-vous à votre compte Azure :
az login
Choisissez votre abonnement Azure :
az account set -s <YourSubscriptionID>
Créez un groupe de ressources pour les ressources Azure utilisées dans ce tutoriel.
az group create --name=wingtiptoys-kubernetes --location=eastus
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
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
Ouvrez le fichier pom.xml avec un éditeur de texte ; par exemple Visual Studio Code.
code pom.xml
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>
Mettez à jour la collection
<plugins>
dans le fichier pom.xml afin que l’élément<plugin>
contienne une entrée pour lejib-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>
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
Créez un cluster Kubernetes dans Azure Kubernetes Service. La commande suivante crée un cluster Kubernetes dans le groupe de ressources
wingtiptoys-kubernetes
, avecwingtiptoys-akscluster
comme nom de cluster, avec azure Container Registry (ACR)wingtiptoysregistry
attaché etwingtiptoys-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.
Installez
kubectl
à l’aide d’Azure CLI. Les utilisateurs Linux peuvent avoir à préfixer cette commande avecsudo
, car elle déploie l’interface CLI Kubernetes sur/usr/local/bin
.az aks install-cli
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
Ouvrez une invite de commandes.
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 commanderun
Le paramètre
--image
spécifie le nom combiné du serveur de connexion et de l’image commewingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest
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 commandeexpose 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.
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}'
Déployer avec l’affichage des ressources Kubernetes
Sélectionnez Ajouter dans l’une des vues de ressources (espace de noms, charges de travail, services et ingresses, stockage ou configuration).
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
Sélectionnez Ajouter en bas de l’éditeur YAML pour déployer l’application.
Après avoir déployé le
Deployment
, comme ci-dessus, sélectionnez Ajouter en bas de l’éditeur YAML pour déployerService
à 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
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.
Sélectionnez Adresse IP externe. Vous verrez ensuite votre application Spring Boot s’exécutant 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 :
- configuration des comptes de service pour les pods
- Espaces de noms
- extraire une image à partir d’un registre privé
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