Déployer une application Java avec Open Liberty ou WebSphere Liberty sur un cluster Azure Kubernetes Service

Cet article montre comment :

  • Exécutez votre application Java, Java EE, Jakarta EE ou MicroProfile sur le runtime Open Liberty ou IBM WebSphere Liberty.
  • Générer l’image Docker de l’application à l’aide d’images conteneur Open Liberty ou WebSphere Liberty.
  • Déployez l’application en conteneur sur un cluster Azure Kubernetes Service (AKS) à l’aide de l’opérateur Open Liberty ou WebSphere Liberty.

L’Opérateur Open Liberty simplifie le déploiement et la gestion des applications s’exécutant sur des clusters Kubernetes. Avec l’opérateur Open Liberty ou WebSphere Liberty, vous pouvez également effectuer des opérations plus avancées, telles que la collecte des traces et des vidages.

Cet article utilise l’offre Place de marché Azure pour Open Liberty ou WebSphere Liberty pour accélérer votre parcours vers AKS. L’offre approvisionne automatiquement certaines ressources Azure, notamment :

  • Une instance Azure Container Registry.
  • Un cluster AKS.
  • Une instance de contrôleur d’entrée Application Gateway (AGIC).
  • L’opérateur Open Liberty et l’opérateur WebSphere Liberty.
  • Si vous le souhaitez, une image conteneur qui inclut Liberty et votre application.

Si vous préférez des instructions pas à pas manuelles pour exécuter Liberty sur AKS, consultez Déployer manuellement une application Java avec Open Liberty ou WebSphere Liberty sur un cluster Azure Kubernetes Service (AKS).

Cet article vous aide à accéder rapidement au déploiement. Avant d’aller en production, nous vous conseillons d’explorer la documentation IBM sur l’optimisation de Liberty.

Si vous n’avez pas d’abonnement Azure, créez un compte gratuit Azure avant de commencer.

Prérequis

  • Installez Azure CLI. Si vous exécutez sur Windows ou macOS, envisagez d’exécuter Azure CLI dans un conteneur Docker. Pour plus d’informations, consultez Guide pratique pour exécuter Azure CLI dans un conteneur Docker.
  • Connectez-vous à l’interface Azure CLI à l’aide de la commande az login. Pour finir le processus d’authentification, suivez les étapes affichées dans votre terminal. Pour connaître les autres options de connexion, consultez Se connecter avec Azure CLI.
  • Lorsque vous y êtes invité, installez l’extension Azure CLI lors de la première utilisation. Pour plus d’informations sur les extensions, consultez Utiliser des extensions avec Azure CLI.
  • Exécutez az version pour rechercher la version et les bibliothèques dépendantes installées. Pour effectuer une mise à niveau vers la dernière version, exécutez az upgrade. Cet article nécessite au moins la version 2.31.0 d’Azure CLI.
  • Installez une implémentation Java SE, version 17 ou ultérieure. (par exemple Eclipse Open J9).
  • Installez Maven 3.5.0 ou une version ultérieure.
  • Installez Docker pour votre système d’exploitation.
  • Vérifiez que Git est installé.
  • Vérifiez que vous êtes affecté au rôle Owner ou aux rôles Contributor et User Access Administrator dans l’abonnement. Vous pouvez le vérifier en suivant les étapes décrites dans Lister les attributions de rôles pour un utilisateur ou un groupe.

Remarque

Vous pouvez également exécuter les commandes de cet article à partir d’Azure Cloud Shell. Cette approche présente tous les outils prérequis préinstallés, à l’exception de Docker.

  • Si vous exécutez les commandes de ce guide en local (et non via Azure Cloud Shell) :
    • Préparez une machine locale avec un système d’exploitation de type Unix installé (par exemple Ubuntu, macOS, Sous-système Windows pour Linux).
    • Installez une implémentation Java SE, version 17 ou ultérieure. (par exemple Eclipse Open J9).
    • Installez Maven 3.5.0 ou une version ultérieure.
    • Installez Docker pour votre système d’exploitation.
  • Vérifiez que vous êtes affecté au rôle Owner ou aux rôles Contributor et User Access Administrator dans l’abonnement. Vous pouvez le vérifier en suivant les étapes décrites dans Lister les attributions de rôles pour un utilisateur ou un groupe.

Créer un déploiement Liberty sur AKS à l’aide du portail

Les étapes suivantes vous guident pour créer un runtime Liberty sur AKS. Une fois ces étapes terminées, vous disposez d’une instance Container Registry et d’un cluster AKS pour déployer votre application conteneurisée.

  1. Accédez au portail Azure. Dans la zone de recherche située en haut de la page, entrez IBM Liberty sur AKS. Lorsque les suggestions s’affichent, sélectionnez celle qui correspond à la section Place de marché.

    Si vous préférez, vous pouvez accéder directement à l’offre.

  2. Sélectionnez Créer.

  3. Dans le volet Informations de base :

    1. Créez un groupe de ressources. Étant donné que les groupes de ressources doivent être uniques au sein d’un abonnement, choisissez un nom unique. La solution la plus simple pour obtenir des noms uniques est d'utiliser une combinaison de vos initiales, de la date du jour et d’un identificateur (par exemple ejb0913-java-liberty-project-rg).

    2. Pour Région, sélectionnez USA Est.

    3. Créez une variable d’environnement dans votre interpréteur de commandes pour les noms de groupes de ressources pour le cluster et la base de données :

      export RESOURCE_GROUP_NAME=<your-resource-group-name>
      

  4. Cliquez sur Suivant. Dans le volet AKS, vous pouvez éventuellement sélectionner un cluster AKS existant et une instance Container Registry au lieu que le déploiement en créer des nouveaux. Cette sélection vous permet d’utiliser le modèle sidecar, comme indiqué dans le Centre des architectures Azure. Vous pouvez également ajuster les paramètres de la taille et du nombre des machines virtuelles dans le pool de nœuds AKS.

    Pour les besoins de cet article, conservez simplement toutes les valeurs par défaut de ce volet.

  5. Cliquez sur Suivant. Dans le volet Équilibrage de charge, en regard de Se connecter à Azure Application Gateway ?, sélectionnez Oui. Dans cette section; vous pouvez personnaliser les options de déploiement suivantes :

    • Pour Réseau virtuel et Sous-réseau, vous pouvez éventuellement personnaliser le réseau virtuel et le sous-réseau dans lesquels le déploiement place les ressources. Vous n’avez pas besoin de modifier les valeurs par défaut des valeurs restantes.

    • Pour Certificat TLS/SSL, vous pouvez fournir le certificat TLS/SSL à partir d’Azure Application Gateway. Laissez leurs valeurs par défaut pour générer un certificat auto-signé.

      Ne passez pas en production avec un certificat auto-signé. Pour plus d’informations sur les certificats auto-signés, consultez Créer un certificat public auto-signé pour authentifier votre application.

    • Vous pouvez sélectionner Activer l’affinité basée sur les cookies, également appelées sessions permanentes. Cet article utilise des sessions persistantes. Veillez donc à sélectionner cette option.

  6. Cliquez sur Suivant. Dans le volet Opérateur et application , cet article utilise toutes les valeurs par défaut. Toutefois, vous pouvez personnaliser les options de déploiement suivantes :

    • Vous pouvez déployer l’opérateur WebSphere Liberty en sélectionnant Oui pour l’option IBM prise en charge ?. Laissant la valeur par défaut Non déploie l’opérateur Open Liberty.
    • Vous pouvez déployer une application pour votre opérateur sélectionné en sélectionnant Oui pour l’option Déployer une application ?. Laissant la valeur par défaut Non ne déploie aucune application.
  7. Sélectionnez Vérifier + créer pour valider vos options sélectionnées. Dans le volet Vérifier + créer, lorsque l’option Créer devient disponible après la validation, sélectionnez-la.

    Le déploiement peut prendre jusqu’à 20 minutes. En attendant la fin du déploiement, vous pouvez suivre les étapes de la section Créer une instance de Azure SQL Database. Une fois la section terminée, revenez ici pour continuer.

Capturer les informations sélectionnées à partir du déploiement

Si vous avez quitté le volet Déploiement en cours, procédez comme suit pour y revenir. Si vous êtes toujours sur le volet qui indique Votre déploiement est terminé, accédez au groupe de ressources nouvellement créé et passez à la troisième étape.

  1. Dans l’angle de n’importe quelle page du portail, sélectionnez le bouton du menu, puis Groupes de ressources.

  2. Dans la zone avec le texte Filtrer pour n’importe quel champ, entrez les premiers caractères du groupe de ressources que vous avez créé précédemment. Si vous avez suivi la convention recommandée, entrez vos initiales, puis sélectionnez le groupe de ressources approprié.

  3. Dans la liste des ressources du groupe de ressources, sélectionnez la ressource avec la valeur TypeRegistre de conteneurs.

  4. Dans le volet de navigation gauche, sous Paramètres, sélectionnez Clés d’accès.

  5. Notez quelque part les valeurs de Serveur de connexion, Nom de registre, Nom d’utilisateur et Mot de passe. Vous pouvez utiliser l’icône de copie en regard de chaque champ pour copier la valeur dans le presse-papiers système.

  6. Revenez au groupe de ressources dans lequel vous avez déployé les ressources.

  7. Dans la section Paramètres, sélectionnez Déploiements.

  8. Sélectionnez le déploiement qui se trouve tout en bas de la liste. La valeur Nom du déploiement correspondra à l’ID de l’éditeur de l’offre. Il contient la chaîne ibm.

  9. Dans le volet de navigation, sélectionnez Sorties.

  10. En utilisant la même technique de copie que pour les valeurs précédentes, enregistrez à côté les valeurs des sorties suivantes :

    • cmdToConnectToCluster
    • appDeploymentTemplateYaml si le déploiement n’inclut pas d’application. Autrement dit, vous avez sélectionné Aucun pour Déployer une application ? lorsque vous avez déployé l’offre de la place de marché.
    • appDeploymentYaml si le déploiement inclut une application. Autrement dit, vous avez sélectionné Oui pour Déployer une application ?.

    Collez la valeur de appDeploymentTemplateYaml ou de appDeploymentYaml dans un interpréteur de commandes Bash, ajoutez | grep secretName et exécutez la commande.

    La sortie de cette commande génère le nom du secret TLS d’entrée, tel que - secretName: secret785e2c. Notez quelque part la valeur secretName.

Vous utiliserez ces valeurs plus tard dans cet article. Notez que les sorties répertorient plusieurs autres commandes utiles.

Créer une instance Azure SQL Database

Pour créer une base de données unique Azure SQL Database à utiliser avec votre application, suivez les étapes de la section Démarrage rapide : Créer une base de données unique dans Azure SQL Database. Observez attentivement les différences suivantes :

  • A l’étape Informations de base, notez les valeurs de Groupe de ressources, Nom de la base de données, <server-name>.database.windows.net, Identifiant de l’administrateur du serveur, et Mot de passe. Cet article fait référence à la valeur Groupe de ressources de base de données en tant que <db-resource-group>.

  • À l’étape Mise en réseau, définissez Méthode de connectivité sur Point de terminaison public, Autoriser les services et les ressources Azure à accéder à ce serveur sur Oui et Ajouter l’adresse IP actuelle du client sur Oui.

    Capture d’écran du portail Azure montrant l’onglet Mise en réseau de la page Créer une base de données SQL avec les paramètres de règles de connectivité et de pare-feu mis en surbrillance.

Remarque

Le niveau de calcul serverless que vous avez sélectionné pour cette base de données permet d'économiser de l’argent en mettant la base de données en sommeil pendant les périodes d'inactivité. L’exemple d’application échoue si la base de données est en veille au démarrage de l’application.

Pour forcer le réveil de la base de données, vous pouvez exécuter une requête à l’aide de l’éditeur de requête. Effectuez les étapes décrites dans Interroger la base de données. Voici un exemple de requête : SELECT * FROM COFFEE;.

Créez une variable d’environnement dans votre interpréteur de commandes pour le nom de groupe de ressources de la base de données :

export DB_RESOURCE_GROUP_NAME=<db-resource-group>

Maintenant que vous avez créé la base de données et le cluster AKS, vous pouvez procéder à la préparation d’AKS pour héberger votre application Open Liberty.

Configurer et déployer l’exemple d’application

Suivez les étapes de cette section pour déployer l’exemple d’application sur le runtime Liberty. Ces étapes utilisent Maven.

Extraire l’application

Clonez l’exemple de code de cet article. L’exemple se trouve sur GitHub.

Il existe quelques exemples dans le référentiel. Cet article utilise java-app/. Exécutez les commandes suivantes pour obtenir cet exemple :

git clone https://github.com/Azure-Samples/open-liberty-on-aks.git
cd open-liberty-on-aks
export BASE_DIR=$PWD
git checkout 20240220

Si vous voyez un message sur l’état « HEAD détaché », vous pouvez l’ignorer en toute sécurité. Le message signifie simplement que vous avez extrait une balise.

Voici la structure des fichiers de l’application :

java-app
├─ src/main/
│  ├─ aks/
│  │  ├─ db-secret.yaml
│  │  ├─ openlibertyapplication-agic.yaml
│  │  ├─ openlibertyapplication.yaml
│  │  ├─ webspherelibertyapplication-agic.yaml
│  │  ├─ webspherelibertyapplication.yaml
│  ├─ docker/
│  │  ├─ Dockerfile
│  │  ├─ Dockerfile-wlp
│  ├─ liberty/config/
│  │  ├─ server.xml
│  ├─ java/
│  ├─ resources/
│  ├─ webapp/
├─ pom.xml

Les répertoires java, resources et webapp contiennent le code source de l’exemple d’application. Le code déclare et utilise une source de données nommée jdbc/JavaEECafeDB.

Dans le répertoire aks, il existe cinq fichiers de déploiement :

  • db-secret.xml : utilisez ce fichier pour créer des secrets Kubernetes avec les informations d’identification de connexion de base de données.
  • openlibertyapplication-agic.yaml : utilisez ce fichier pour déployer l’application Open Liberty avec AGIC. Cet article suppose que vous utilisez ce fichier.
  • openlibertyapplication.yaml : utilisez ce fichier si vous souhaitez déployer l’application Open Liberty sans AGIC.
  • webspherelibertyapplication-agic.yaml : utilisez ce fichier pour déployer l’application WebSphere Liberty avec AGIC si vous avez déployé l’opérateur WebSphere Liberty plus haut dans cet article.
  • webspherelibertyapplication.yaml : utilisez ce fichier pour déployer l’application WebSphere Liberty sans AGIC si vous avez déployé l’opérateur WebSphere Liberty plus haut dans cet article.

Le répertoire Docker présente deux fichiers pour créer l’image de l’application :

  • Dockerfile : utilisez ce fichier pour générer l’image de l’application avec Open Liberty dans cet article.
  • Dockerfile-wlp : utilisez ce fichier pour générer l’image de l’application avec WebSphere Liberty si vous avez déployé l’opérateur WebSphere Liberty précédemment dans cet article.

Dans le répertoire liberty/config, utilisez le fichier server.xml pour configurer la connexion de base de données pour le cluster Open Liberty et WebSphere Liberty.

Créer le projet

Maintenant que vous disposez des propriétés nécessaires, vous pouvez générer l’application. Le fichier POM du projet lit de nombreuses variables de l’environnement. Dans le cadre de la génération Maven, ces variables sont utilisées pour remplir des valeurs dans les fichiers YAML situés dans src/main/aks. Vous pouvez faire pareil pour votre application en dehors de Maven si vous préférez.

cd $BASE_DIR/java-app
# The following variables are used for deployment file generation into the target.
export LOGIN_SERVER=<Azure-Container-Registry-Login-Server-URL>
export REGISTRY_NAME=<Azure-Container-Registry-name>
export USER_NAME=<Azure-Container-Registry-username>
export PASSWORD='<Azure-Container-Registry-password>'
export DB_SERVER_NAME=<server-name>.database.windows.net
export DB_NAME=<database-name>
export DB_USER=<server-admin-login>@<server-name>
export DB_PASSWORD='<server-admin-password>'
export INGRESS_TLS_SECRET=<ingress-TLS-secret-name>

mvn clean install

(Facultatif) Tester votre projet localement

Exécutez et testez le projet localement avant de le déployer sur Azure. Pour que ce soit plus pratique, cet article utilise liberty-maven-plugin. Pour en savoir plus sur liberty-maven-plugin, consultez l’article Open Liberty Création d’une application web avec Maven.

Pour votre application, vous pouvez faire pareil en utilisant un autre mécanisme, comme votre environnement de déploiement local. Vous pouvez également utiliser l’option liberty:devc destinée au développement avec des conteneurs. Découvrez-en davantage sur liberty:devc dans la documentation Open Liberty.

  1. Démarrez l’application à l’aide de liberty:run. liberty:run utilise également les variables d’environnement que vous avez définies précédemment.

    cd $BASE_DIR/java-app
    mvn liberty:run
    
  2. Si le test réussit, un message similaire à [INFO] [AUDIT] CWWKZ0003I: The application javaee-cafe updated in 1.930 seconds apparaît dans la sortie de commande. Rendez-vous à l’adresse http://localhost:9080/ dans votre navigateur et vérifiez que l’application est accessible et que toutes les fonctions fonctionnent.

  3. Sélectionnez Ctrl+C pour arrêter.

Générer l’image pour le déploiement AKS

Vous pouvez maintenant exécuter la commande docker build pour générer l’image :

cd $BASE_DIR/java-app/target

docker buildx build --platform linux/amd64 -t javaee-cafe:v1 --pull --file=Dockerfile .

(Facultatif) Tester l’image Docker localement

Utilisez les étapes suivantes pour tester l’image Docker localement avant de la déployer sur Azure :

  1. Exécutez l’image avec la commande suivante. Cette commande utilise les variables d’environnement que vous avez définies précédemment.

    docker run -it --rm -p 9080:9080 \
       -e DB_SERVER_NAME=${DB_SERVER_NAME} \
       -e DB_NAME=${DB_NAME} \
       -e DB_USER=${DB_USER} \
       -e DB_PASSWORD=${DB_PASSWORD} \
       javaee-cafe:v1
    
  2. Une fois que le conteneur a démarré, accédez à http://localhost:9080/ dans votre navigateur pour accéder à l’application.

  3. Sélectionnez Ctrl+C pour arrêter.

Charger l’image sur Azure Container Registry

Chargez l’image générée dans l’instance Container Registry que vous avez créée dans l’offre :

docker tag javaee-cafe:v1 ${LOGIN_SERVER}/javaee-cafe:v1
docker login -u ${USER_NAME} -p ${PASSWORD} ${LOGIN_SERVER}
docker push ${LOGIN_SERVER}/javaee-cafe:v1

Déployer et tester l'application

Pour déployer et tester l’application, procédez comme suit :

  1. Connectez-vous au cluster AKS.

    Collez la valeur de cmdToConnectToCluster dans un interpréteur de commandes et exécutez la commande.

  2. Appliquez le secret de base de données :

    cd $BASE_DIR/java-app/target
    kubectl apply -f db-secret.yaml
    

    La sortie est secret/db-secret-sql created.

  3. Appliquez le fichier de déploiement :

    kubectl apply -f openlibertyapplication-agic.yaml
    
  4. Attendez que tous les pods soient redémarrés correctement à l’aide de la commande suivante :

    kubectl get pods --watch
    

    Une sortie similaire à l’exemple suivant indique que tous les pods sont en cours d’exécution :

    NAME                                       READY   STATUS    RESTARTS   AGE
    javaee-cafe-cluster-agic-67cdc95bc-2j2gr   1/1     Running   0          29s
    javaee-cafe-cluster-agic-67cdc95bc-fgtt8   1/1     Running   0          29s
    javaee-cafe-cluster-agic-67cdc95bc-h47qm   1/1     Running   0          29s
    
  5. Vérifiez les résultats :

    1. Obtenez l’adresse de la ressource d’entrée déployée avec l’application :

      kubectl get ingress
      

      Copiez la valeur de ADDRESS à partie de la sortie. Cette valeur est l’adresse IP publique frontale de l’instance Application Gateway déployée.

    2. Accédez à https://<ADDRESS> pour tester l’application. Pour que ce soit plus pratique, cette commande de l’interpréteur de commandes crée une variable d’environnement dont vous pouvez coller la valeur directement dans le navigateur :

      export APP_URL=https://$(kubectl get ingress | grep javaee-cafe-cluster-agic-ingress | cut -d " " -f14)/
      echo $APP_URL
      

      Si la page web ne s’affiche pas correctement ou renvoie une erreur 502 Bad Gateway, l’application démarre toujours en arrière-plan. Patientez quelques minutes et réessayez.

Nettoyer les ressources

Pour éviter des frais Azure, vous devez nettoyer les ressources non nécessaires. Lorsque vous n’avez plus besoin du cluster, utilisez la commande az group delete pour supprimer le groupe de ressources, le service conteneur, le registre de conteneurs, la base de données et toutes les ressources associées :

az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait
az group delete --name $DB_RESOURCE_GROUP_NAME --yes --no-wait

Étapes suivantes

Pour plus d’informations, consultez les références suivantes :