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

Cet article explique comment :

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

L’opérateur Liberty simplifie le déploiement et la gestion des applications exécutées 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.

Pour plus d’informations sur Open Liberty, consultez la page de projet Open Liberty. Pour plus d’informations sur IBM WebSphere Liberty, consultez la page du produit WebSphere Liberty.

Cet article est un guide manuel pas à pas pour l’exécution d’Open/WebSphere Liberty sur Azure. Pour une solution plus automatisée qui accélère votre parcours vers AKS, consultez Déployer une application Java avec Open Liberty/WebSphere Liberty sur un cluster Azure Kubernetes Service (AKS).

Cet article vous aide à accéder rapidement au déploiement. Avant de passer en production, vous devez explorer Tuning Liberty.

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

Prérequis

  • Préparez un ordinateur local avec Windows, macOS ou Linux installé.
  • Installez Azure CLI. Si vous utilisez Windows ou macOS, vous pouvez exécuter Azure CLI dans un conteneur Docker. Pour plus d’informations, consultez Guide pratique pour exécuter Azure CLI dans un conteneur Docker.
  • 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 et gérer 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 de l’interface de ligne de commande Azure.
  • Installez une implémentation Java SE, version 17 ou ultérieure (par exemple, Eclipse Open J9).
  • Installez Maven version 3.5.0 ou 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 vérifier l’attribution en suivant les étapes décrites dans Répertorier les attributions de rôles Azure à l’aide de la Portail Azure.

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.

Connexion à Azure

Si vous ne l’avez pas déjà fait, connectez-vous à votre abonnement Azure à l’aide de la commande az login et suivez les instructions à l’écran.

az login

Remarque

Vous pouvez exécuter la plupart des commandes Azure CLI dans PowerShell identiques à celles de Bash. La différence existe uniquement lors de l’utilisation de variables. Dans les sections suivantes, la différence est traitée dans différents onglets si nécessaire.

Si vous avez plusieurs locataires Azure associés à vos informations d’identification Azure, vous devez spécifier le locataire auquel vous souhaitez vous connecter. Vous pouvez le faire avec l’option --tenant . Par exemple : az login --tenant contoso.onmicrosoft.com.

Créer un groupe de ressources

Un groupe de ressources Azure est un groupe logique dans lequel des ressources Azure sont déployées et gérées.

Créez un groupe de ressources appelé java-liberty-project à l’aide de la commande az group create dans l’emplacement eastus. Ce groupe de ressources est utilisé ultérieurement pour créer l’instance Azure Container Registry (ACR) et le cluster AKS.

export RESOURCE_GROUP_NAME=java-liberty-project
az group create --name $RESOURCE_GROUP_NAME --location eastus

Créer une instance ACR

Utilisez la commande az acr create pour créer l’instance ACR. L’exemple suivant crée une instance ACR nommée youruniqueacrname. Assurez-vous que youruniqueacrname est unique dans Azure.

export REGISTRY_NAME=youruniqueacrname
az acr create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $REGISTRY_NAME \
    --sku Basic \
    --admin-enabled

Après une courte période, vous devez voir une sortie JSON qui contient les lignes suivantes :

  "provisioningState": "Succeeded",
  "publicNetworkAccess": "Enabled",
  "resourceGroup": "java-liberty-project",

Se connecter à l’instance ACR

Vous devez vous connecter à l’instance ACR avant de pouvoir y envoyer une image. Exécutez les commandes suivantes pour vérifier la connexion :

export LOGIN_SERVER=$(az acr show \
    --name $REGISTRY_NAME \
    --query 'loginServer' \
    --output tsv)
export USER_NAME=$(az acr credential show \
    --name $REGISTRY_NAME \
    --query 'username' \
    --output tsv)
export PASSWORD=$(az acr credential show \
    --name $REGISTRY_NAME \
    --query 'passwords[0].value' \
    --output tsv)

docker login $LOGIN_SERVER -u $USER_NAME -p $PASSWORD

Vous devez voir Login Succeeded à la fin de la sortie de commande si vous êtes connecté à l’instance ACR avec succès.

Créer un cluster AKS

Utilisez la commande az aks create pour créer un cluster AKS. L’exemple suivant crée un cluster à un nœud nommé myAKSCluster. Cette commande prend plusieurs minutes à s’exécuter.

export CLUSTER_NAME=myAKSCluster
az aks create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --node-count 1 \
    --generate-ssh-keys \
    --enable-managed-identity

Au bout de quelques minutes, la commande se termine et retourne des informations au format JSON sur le cluster, dont la sortie suivante :

  "nodeResourceGroup": "MC_java-liberty-project_myAKSCluster_eastus",
  "privateFqdn": null,
  "provisioningState": "Succeeded",
  "resourceGroup": "java-liberty-project",

Se connecter au cluster AKS

Pour gérer un cluster Kubernetes, vous utilisez kubectl, le client de ligne de commande Kubernetes. Pour installer kubectl localement, utilisez la commande az aks install-cli, comme illustré dans l’exemple suivant :

az aks install-cli

Pour configurer kubectl afin de vous connecter à votre cluster Kubernetes, exécutez la commande az aks get-credentials. Cette commande télécharge les informations d’identification et configure l’interface CLI Kubernetes pour les utiliser.

az aks get-credentials \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --overwrite-existing \
    --admin

Remarque

La commande ci-dessus utilise l’emplacement par défaut pour le fichier de configuration Kubernetes, à savoir ~/.kube/config. Vous pouvez spécifier un autre emplacement pour votre fichier de configuration Kubernetes à l’aide --filede .

Pour vérifier la connexion à votre cluster, utilisez la commande kubectl get pour retourner une liste des nœuds du cluster.

kubectl get nodes

L’exemple de sortie suivant montre le nœud unique créé au cours des étapes précédentes. Vérifiez que l’état du nœud est Ready :

NAME                                STATUS   ROLES   AGE     VERSION
aks-nodepool1-xxxxxxxx-yyyyyyyyyy   Ready    agent   76s     v1.23.8

Créer une base de données Azure SQL

Dans cette section, vous allez créer une base de données unique Azure SQL Database à utiliser avec votre application.

Créez une base de données unique dans Azure SQL Database en suivant les étapes azure CLI ou PowerShell dans le guide de démarrage rapide : Créer une base de données unique Azure SQL Database. Utilisez les instructions suivantes lorsque vous parcourez l’article, puis revenez à ce document après avoir créé et configuré le serveur de base de données.

  1. Lorsque vous atteignez la section Définir les valeurs des paramètres du guide de démarrage rapide, notez toutes les variables dans l’exemple de code étiquetéVariable block, notamment location, serverloginresourceGroupdatabaseet .password Cet article fait référence à la base de données resourceGroup en tant que <db-resource-group>.

  2. Après avoir créé le serveur de base de données, accédez au serveur nouvellement créé dans le Portail Azure. Dans le volet Mise en réseau, sous l’onglet Connecter ivity, définissez la version TLS minimale sur TLS 1.0.

    Capture d'écran de la configuration de la mise en réseau de la base de données SQL TLS 1.0.

  3. Dans le volet Mise en réseau , sous l’onglet Accès public, sélectionnez Autoriser les services et ressources Azure à accéder à ce serveur.

    Capture d’écran des règles de pare-feu : autoriser l’accès aux ressources Azure.

  4. Si vous souhaitez tester l’application localement, vérifiez que votre adresse IPv4 cliente se trouve dans la liste verte des règles de pare-feu

    Capture d’écran des règles de pare-feu : autoriser l’accès client.

  5. Enregistrez vos modifications réseau.

  6. Utilisez la commande suivante pour créer une variable d’environnement pour le nom du 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 préparer AKS à héberger Liberty.

Installer l’Opérateur Open Liberty

Après avoir créé le cluster et vous y être connecté, installez l’opérateur Open Liberty.

Installez l’opérateur Open Liberty en exécutant les commandes suivantes :

# Install cert-manager Operator
CERT_MANAGER_VERSION=v1.11.2
kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/${CERT_MANAGER_VERSION}/cert-manager.yaml

# Install Open Liberty Operator
export OPERATOR_VERSION=1.2.2
mkdir -p overlays/watch-all-namespaces
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/overlays/watch-all-namespaces/olo-all-namespaces.yaml -q -P ./overlays/watch-all-namespaces
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/overlays/watch-all-namespaces/cluster-roles.yaml -q -P ./overlays/watch-all-namespaces
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/overlays/watch-all-namespaces/kustomization.yaml -q -P ./overlays/watch-all-namespaces
mkdir base
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/base/kustomization.yaml -q -P ./base
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/base/open-liberty-crd.yaml -q -P ./base
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/base/open-liberty-operator.yaml -q -P ./base
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/base/open-liberty-roles.yaml -q -P ./base
kubectl create namespace open-liberty
kubectl apply --server-side -k overlays/watch-all-namespaces

Configurer et générer l’image de l’application

Pour déployer et exécuter votre application Liberty sur un cluster AKS, conteneurisez votre application en tant qu’image Docker à l’aide d’images conteneur Open Liberty ou d’images conteneur WebSphere Liberty.

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 ce guide. L’exemple se trouve sur GitHub. Il existe quelques exemples dans le référentiel. Cet article utilise java-app. Voici la structure des fichiers de l’application.

git clone https://github.com/Azure-Samples/open-liberty-on-aks.git
cd open-liberty-on-aks
git checkout 20230830

Si un message vous signale que vous allez passer à l’état « detached HEAD », vous pouvez ignorer ce message sans risque. Cela signifie simplement que vous avez modifié une étiquette.

java-app
├─ src/main/
│  ├─ aks/
│  │  ├─ db-secret.yaml
│  │  ├─ openlibertyapplication.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 deux fichiers de déploiement. db-secret.xml est utilisé pour créer des secrets Kubernetes avec les informations d’identification de connexion de la base de données. Le fichier openlibertyapplication.yaml est utilisé pour déployer l’image de l’application. Dans le répertoire docker, il y a deux fichiers pour créer l’image de l’application avec Open Liberty ou WebSphere Liberty.

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

Créer le projet

Maintenant que vous avez regroupé les 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 <path-to-your-repo>/java-app

# The following variables will be used for deployment file generation into target/
export LOGIN_SERVER=${LOGIN_SERVER}
export REGISTRY_NAME=${REGISTRY_NAME}
export USER_NAME=${USER_NAME}
export PASSWORD=${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>

mvn clean install

(Facultatif) Tester votre projet localement

Vous pouvez maintenant exécuter et tester le projet localement avant de le déployer sur Azure. Pour des raisons pratiques, utilisez le liberty-maven-plugin. Pour en savoir plus sur le liberty-maven-plugin, consultez Building a web application with Maven. Pour votre application, vous pouvez faire quelque chose de similaire à l’aide de n’importe quel autre mécanisme tel que votre IDE local. Vous pouvez également utiliser l’option liberty:devc destinée au développement avec des conteneurs. Pour en savoir plus sur liberty:devc, consultez la documentation Liberty.

Remarque

Si vous avez sélectionné un déploiement de base de données « serverless », vérifiez que votre base de données SQL n’a pas entré en mode pause. Pour ce faire, vous pouvez vous connecter à l’éditeur de requête de base de données comme décrit dans le guide de démarrage rapide : Utilisez l’éditeur de requête Portail Azure (préversion) pour interroger Azure SQL Database.

  1. Démarrez l’application à l’aide de liberty:run. liberty:run utilise les variables d’environnement définies à l’étape précédente.

    cd <path-to-your-repo>/java-app
    mvn liberty:run
    
  2. Vérifiez que l’application fonctionne comme prévu. Vous devriez voir un message similaire à [INFO] [AUDIT] CWWKZ0003I: The application javaee-cafe updated in 1.930 seconds. dans la sortie de la commande en cas de réussite. 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. Appuyez sur Ctrl+C pour arrêter.

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

Vous pouvez maintenant exécuter la docker buildx build commande pour générer l’image, comme illustré dans l’exemple suivant :

cd <path-to-your-repo>/java-app/target

# If you are running with Open Liberty
docker buildx --platform linux/amd64 build -t javaee-cafe:v1 --pull --file=Dockerfile .

# If you are running with WebSphere Liberty
docker buildx --platform linux/amd64 build -t javaee-cafe:v1 --pull --file=Dockerfile-wlp .

(Facultatif) Tester l’image Docker localement

Vous pouvez maintenant utiliser 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 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. Appuyez sur Ctrl+C pour arrêter.

Charger l’image dans ACR

Ensuite, chargez l’image générée dans l’ACR que vous avez créée au cours des étapes précédentes.

Si ce n’est déjà fait, connectez-vous au registre de conteneurs à l’aide de la commande suivante :

docker login -u ${USER_NAME} -p ${PASSWORD} ${LOGIN_SERVER}

Utilisez les commandes suivantes pour baliser et envoyer (push) l’image conteneur :

docker tag javaee-cafe:v1 ${LOGIN_SERVER}/javaee-cafe:v1
docker push ${LOGIN_SERVER}/javaee-cafe:v1

Déployer l’application sur le cluster AKS

Procédez comme suit pour déployer l’application Liberty sur le cluster AKS :

  1. Attachez l’instance ACR au cluster AKS afin que le cluster AKS soit authentifié pour extraire l’image de l’instance ACR, comme illustré dans l’exemple suivant :

    az aks update \
        --resource-group $RESOURCE_GROUP_NAME \
        --name $CLUSTER_NAME \
        --attach-acr $REGISTRY_NAME
    
  2. Appliquez le fichier secret et de déploiement de base de données en exécutant les commandes suivantes :

    cd <path-to-your-repo>/java-app/target
    
    # Apply DB secret
    kubectl apply -f db-secret.yaml
    
    # Apply deployment file
    kubectl apply -f openlibertyapplication.yaml
    
  3. Déterminez si l’instance OpenLibertyApplication est créée en exécutant la commande suivante :

    kubectl get openlibertyapplication javaee-cafe-cluster
    

    Vous devez obtenir une sortie similaire à la suivante :

    NAME                        IMAGE                                                   EXPOSED   RECONCILED   AGE
    javaee-cafe-cluster         youruniqueacrname.azurecr.io/javaee-cafe:1.0.25         True         59s
    
  4. Déterminez si le déploiement créé par l’opérateur est prêt en exécutant la commande suivante :

    kubectl get deployment javaee-cafe-cluster --watch
    

    Vous devez obtenir une sortie similaire à la suivante :

    NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
    javaee-cafe-cluster         0/3     3            0           20s
    
  5. Attendez que vous voyiez 3/3 sous la READY colonne et 3 sous la AVAILABLE colonne, puis utilisez Ctrl+C pour arrêter le kubectl processus de surveillance.

Tester l’application

Quand l’application s’exécute, un service Kubernetes d’équilibrage de charge expose le front-end de l’application sur Internet. Ce processus peut prendre un certain temps.

Pour surveiller la progression, utilisez la commande kubectl get service avec l’argument --watch , comme illustré dans l’exemple suivant :

kubectl get service javaee-cafe-cluster --watch

Vous devez obtenir une sortie similaire à la suivante :

NAME                        TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)          AGE
javaee-cafe-cluster         LoadBalancer   10.0.251.169   52.152.189.57   80:31732/TCP     68s

Une fois que l’adresse EXTERNAL-IP passe de l’attente à une adresse IP publique réelle, utilisez Ctrl+C pour arrêter le kubectl processus de surveillance.

Si un certain temps est passé entre l’exécution des étapes de cette section et celle précédente, vérifiez que la base de données est active, si nécessaire. Consultez la note précédente concernant la pause de base de données.

Ouvrez un navigateur web sur l’adresse IP externe de votre service (52.152.189.57 pour l’exemple ci-dessus) afin d’afficher la page d’accueil à l’application. Si la page n’est pas chargée correctement, c’est parce que l’application démarre. Vous pouvez attendre un certain temps et actualiser la page ultérieurement. Le nom de pod de vos réplicas d’application doit s’afficher en haut à gauche de la page. Attendez quelques minutes et actualisez la page. Vous verrez un autre nom de pod affiché en raison de l’équilibrage de charge fourni par le cluster AKS.

Application Java liberty déployée avec succès sur AKS.

Remarque

Actuellement, l’application n’utilise pas HTTPS. Nous vous recommandons d’activer TLS avec vos propres certificats. Pour plus d’informations, consultez Utiliser TLS avec un contrôleur d’entrée sur Azure Kubernetes Service (AKS).

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

Vous pouvez en savoir plus sur les références utilisées dans ce guide :