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ôlesContributor
etUser 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 --file
de .
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.
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
, notammentlocation
,server
login
resourceGroup
database
et .password
Cet article fait référence à la base de donnéesresourceGroup
en tant que<db-resource-group>
.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.
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.
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
Enregistrez vos modifications réseau.
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.
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
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’adressehttp://localhost:9080/
dans votre navigateur et vérifiez que l’application est accessible et que toutes les fonctions fonctionnent.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.
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
Une fois que le conteneur a démarré, accédez à
http://localhost:9080/
dans votre navigateur pour accéder à l’application.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 :
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
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
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
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
Attendez que vous voyiez
3/3
sous laREADY
colonne et3
sous laAVAILABLE
colonne, puis utilisez Ctrl+C pour arrêter lekubectl
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.
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 :
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour