Uso de Java EE JCache con Open Liberty o WebSphere Liberty en un clúster de Azure Kubernetes Service (AKS)
En este artículo se describe cómo usar JCache de Java EE en una aplicación en contenedor implementada en AKS.
En esta guía, hará lo siguiente:
- Cree la infraestructura para ejecutar la aplicación Java, Java EE, Jakarta EE o MicroProfile en el entorno de ejecución de Open Liberty o WebSphere Liberty.
- Use Java EE JCache respaldado por Azure Cache for Redis como caché de sesión.
- Compilar la imagen de Docker de la aplicación mediante imágenes de contenedor de Open Liberty o WebSphere Liberty.
- Implementar la aplicación contenedorizada en un clúster de AKS mediante el operador de Open Liberty.
Este artículo está diseñado para ayudarle a llegar rápidamente a la implementación. Antes de ir a producción, debe explorar Tuning Liberty.
Si está interesado en proporcionar comentarios o trabajar estrechamente en sus escenarios de migración con el equipo de ingeniería que desarrolla WebSphere en soluciones de Azure, rellene esta breve encuesta sobre la migración de WebSphere e incluya la información de contacto. El equipo de administradores de programas, arquitectos e ingenieros se pondrá en contacto rápidamente con usted para iniciar una estrecha colaboración.
Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
Requisitos previos
Use el entorno de Bash en Azure Cloud Shell. Para más información, consulte Inicio rápido para Bash en Azure Cloud Shell.
Si prefiere ejecutar comandos de referencia de la CLI localmente, instale la CLI de Azure. Si utiliza Windows o macOS, considere la posibilidad de ejecutar la CLI de Azure en un contenedor Docker. Para más información, vea Ejecución de la CLI de Azure en un contenedor de Docker.
Si usa una instalación local, inicie sesión en la CLI de Azure mediante el comando az login. Siga los pasos que se muestran en el terminal para completar el proceso de autenticación. Para ver otras opciones de inicio de sesión, consulte Inicio de sesión con la CLI de Azure.
En caso de que se le solicite, instale las extensiones de la CLI de Azure la primera vez que la use. Para más información sobre las extensiones, consulte Uso de extensiones con la CLI de Azure.
Ejecute az version para buscar cuál es la versión y las bibliotecas dependientes que están instaladas. Para realizar la actualización a la versión más reciente, ejecute az upgrade.
- En este artículo se necesita la versión más reciente de la CLI de Azure. Si usa Azure Cloud Shell, ya está instalada la versión más reciente.
- Si ejecuta los comandos de esta guía localmente (en lugar de Azure Cloud Shell):
- Prepare una máquina local con un sistema operativo similar a Unix instalado (por ejemplo, Ubuntu, macOS o Subsistema de Windows para Linux).
- Instale una implementación de Java SE, versión 17 o posterior (por ejemplo, Eclipse Open J9).
- Instale Maven 3.5.0 o una versión superior.
- Instale Docker para el sistema operativo.
- Asegúrese de que se le ha asignado el
Owner
rol oContributor
yUser Access Administrator
los roles de la suscripción. Puede comprobar las asignaciones siguiendo los pasos descritos en Enumeración de asignaciones de roles para un usuario o grupo.
Creación de la infraestructura
Los pasos de esta sección le guían para crear la infraestructura de aplicaciones en Azure. Después de completar estos pasos, tendrá una instancia de Azure Container Registry, un clúster de Azure Kubernetes Service y una instancia de Azure Cache for Redis para ejecutar la aplicación de ejemplo.
Crear un grupo de recursos
Un grupo de recursos de Azure es un grupo lógico en el que se implementan y administran recursos de Azure.
Cree un grupo de recursos denominado java-liberty-project mediante el comando az group create en la ubicación eastus. Este grupo de recursos se usa más adelante para crear la instancia de Azure Container Registry (ACR) y el clúster de AKS.
export RESOURCE_GROUP_NAME=java-liberty-project
az group create --name $RESOURCE_GROUP_NAME --location eastus
Creación de una instancia de ACR
Use el comando az acr create para crear la instancia de ACR. En el ejemplo siguiente se crea una instancia de ACR denominada youruniqueacrname. Asegúrese de que youruniqueacrname sea única en Azure.
export REGISTRY_NAME=youruniqueacrname
az acr create \
--resource-group $RESOURCE_GROUP_NAME \
--name $REGISTRY_NAME \
--sku Basic \
--admin-enabled
Tras un breve período de tiempo, debería ver una salida JSON que contiene:
"provisioningState": "Succeeded",
"publicNetworkAccess": "Enabled",
"resourceGroup": "java-liberty-project",
Como alternativa, puede crear una instancia de Azure Container Registry siguiendo los pasos descritos en Inicio rápido: Creación de un registro de contenedor de Azure mediante Azure Portal.
Conexión a la instancia de ACR
Deberá iniciar sesión en la instancia de ACR para poder insertar una imagen en ella. Ejecute los comandos siguientes para comprobar la conexión:
export LOGIN_SERVER=$(az acr show \
--name $REGISTRY_NAME \
--resource-group $RESOURCE_GROUP_NAME \
--query 'loginServer' \
--output tsv)
export USER_NAME=$(az acr credential show \
--name $REGISTRY_NAME \
--resource-group $RESOURCE_GROUP_NAME \
--query 'username' \
--output tsv)
export PASSWORD=$(az acr credential show \
--name $REGISTRY_NAME \
--resource-group $RESOURCE_GROUP_NAME \
--query 'passwords[0].value' \
--output tsv)
docker login $LOGIN_SERVER -u $USER_NAME -p $PASSWORD
Debería ver Login Succeeded
al final de la salida del comando si ha iniciado sesión correctamente en la instancia de ACR.
Si ve un problema al iniciar sesión en el registro de contenedor de Azure, consulte Solución de problemas de inicio de sesión del registro.
Creación de un clúster de AKS
Use el comando az aks create para crear un clúster de AKS y concederle permiso de extracción de imágenes de la instancia de ACR. En el siguiente ejemplo se crea un clúster denominado myAKSCluster con un nodo. El comando tarda varios minutos en completarse.
export CLUSTER_NAME=myAKSCluster
az aks create \
--resource-group $RESOURCE_GROUP_NAME \
--name $CLUSTER_NAME \
--node-count 1 \
--generate-ssh-keys \
--enable-managed-identity \
--attach-acr $REGISTRY_NAME
Después de unos minutos, el comando finaliza y devuelve información con formato JSON sobre el clúster, incluidas las siguientes líneas:
"nodeResourceGroup": "MC_java-liberty-project_myAKSCluster_eastus",
"privateFqdn": null,
"provisioningState": "Succeeded",
"resourceGroup": "java-liberty-project",
Conexión al clúster de AKS
Para administrar un clúster de Kubernetes, usará kubectl, el cliente de línea de comandos de Kubernetes. Si usa Azure Cloud Shell, kubectl
ya está instalado. Para instalar kubectl
localmente, use el comando az aks install-cli:
az aks install-cli
Para configurar kubectl
para conectarse a su clúster de Kubernetes, use el comando az aks get-credentials. Con este comando se descargan las credenciales y se configura la CLI de Kubernetes para usarlas.
az aks get-credentials \
--resource-group $RESOURCE_GROUP_NAME \
--name $CLUSTER_NAME \
--overwrite-existing
Para comprobar la conexión al clúster, use el comando kubectl get para devolver una lista de los nodos del clúster.
kubectl get nodes
La salida del ejemplo siguiente muestra el nodo único creado en los pasos anteriores. Asegúrese de que el estado del nodo sea Listo.
NAME STATUS ROLES AGE VERSION
aks-nodepool1-xxxxxxxx-yyyyyyyyyy Ready agent 76s v1.18.10
Instalación de Operator de Open Liberty
Después de crear el clúster y conectarse a él, ejecute los comandos siguientes para instalar Operator de Open Liberty.
# 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
Creación de una instancia de Azure Redis Cache
Azure Cache for Redis respalda la persistencia de HttpSession
una aplicación Java que se ejecuta dentro de un servidor Open Liberty o WebSphere Liberty. Siga los pasos de esta sección para crear una instancia de Azure Cache for Redis y anotar su información de conexión. Usaremos esta información más adelante.
Siga los pasos descritos en Inicio rápido: Uso de Azure Cache for Redis en Java hasta el momento, pero no incluye Descripción del ejemplo de Java.
Copie el nombre de host y la clave de acceso principal de la instancia de Azure Cache for Redis y, a continuación, ejecute los siguientes comandos para agregar variables de entorno:
export REDISCACHEHOSTNAME=<YOUR_HOST_NAME> export REDISCACHEKEY=<YOUR_PRIMARY_ACCESS_KEY>
Compilar la aplicación
Siga los pasos de esta sección para compilar y incluir en contenedores la aplicación de ejemplo. En estos pasos se usa Maven, liberty-maven-plugin
y az acr build. Para más información sobre liberty-maven-plugin
, consulte Creación de una aplicación web con Maven.
Extracción de la aplicación
Use los siguientes comandos para clonar el código de ejemplo de esta guía. El ejemplo se encuentra en el repositorio open-liberty-on-aks en GitHub. Hay algunos ejemplos en el repositorio. En este artículo se usa java-app-jcache.
git clone https://github.com/Azure-Samples/open-liberty-on-aks.git
cd open-liberty-on-aks
git checkout 20230906
Si se ve un mensaje sobre estar en estado "HEAD desasociado", es seguro ignorar este mensaje. Solo significa que ha desprotegido una etiqueta.
La aplicación tiene la siguiente estructura de archivos:
java-app-jcache/
├── pom.xml
└── src
└── main
├── aks
│ └── openlibertyapplication.yaml
├── docker
│ ├── Dockerfile
│ └── Dockerfile-wlp
├── java
├── liberty
│ └── config
│ └── server.xml
├── redisson
│ └── redisson-config.yaml
├── resources
└── webapp
Los directorios java, resources y webapp contienen el código fuente de la aplicación de ejemplo.
En el directorio aks , el archivo de implementación openlibertyapplication.yaml se usa para implementar la imagen de aplicación.
En el directorio docker , colocamos dos Dockerfiles. Dockerfile se usa para compilar una imagen con Open Liberty y Dockerfile-wlp para compilar la imagen con WebSphere Liberty.
En el directorio liberty/config , el archivo server.xml se usa para configurar la caché de sesión para el clúster de Open Liberty y WebSphere Liberty.
En el directorio redisson, el archivo redisson-config.yaml se usa para configurar la conexión de la instancia de Azure Cache for Redis.
Incluir la aplicación en contenedores
Para implementar y ejecutar la aplicación Liberty en el clúster de AKS, siga estos pasos para incluir la aplicación en contenedores como una imagen de Docker. Puede usar imágenes de contenedor de Open Liberty o imágenes de contenedor de WebSphere Liberty.
Cambie el directorio a java-app-jcache del clon local.
Ejecute
mvn clean package
para empaquetar la aplicación.Ejecute
mvn -Predisson validate
para copiar el archivo de configuración de Redisson en la ubicación especificada. Este paso inserta los valores de las variablesREDISCACHEHOSTNAME
de entorno yREDISCACHEKEY
en el archivo redisson-config.yaml , al que hace referencia el archivo server.xml .Ejecute
mvn liberty:dev
para probar la aplicación. Si la prueba se realiza correctamente, debería verThe defaultServer server is ready to run a smarter planet.
en la salida del comando. Debería ver una salida similar a la siguiente si la conexión de Redis se ha realizado correctamente.[INFO] [err] [Default Executor-thread-5] INFO org.redisson.Version - Redisson 3.16.7 [INFO] [err] [redisson-netty-2-2] INFO org.redisson.connection.pool.MasterPubSubConnectionPool - 1 connections initialized for redacted.redis.cache.windows.net/20.25.90.239:6380 [INFO] [err] [redisson-netty-2-20] INFO org.redisson.connection.pool.MasterConnectionPool - 24 connections initialized for redacted.redis.cache.windows.net/20.25.90.239:6380
Puede visitar
http://localhost:9080/
para ver la aplicación en ejecución, pero la prueba de funcionamiento de Redis es la salida que se muestra en el paso anterior.Use Ctrl+C para detener la aplicación.
Use los comandos siguientes para recuperar los valores de las propiedades
artifactId
yversion
definidos en el archivo pom.xml .export artifactId=$(mvn -q -Dexec.executable=echo -Dexec.args='${project.artifactId}' --non-recursive exec:exec) export version=$(mvn -q -Dexec.executable=echo -Dexec.args='${project.version}' --non-recursive exec:exec)
Ejecute
cd target
para cambiar el directorio a la compilación del ejemplo.Ejecute uno de estos comandos para crear la imagen de la aplicación e insertarla en la instancia de ACR.
Use el siguiente comando para compilar con una imagen base de Open Liberty si prefiere usar Open Liberty como un entorno de ejecución ligero de Java™ código abierto:
# Build and tag application image. This causes the ACR instance to pull the necessary Open Liberty base images. az acr build -t ${artifactId}:${version} -r $REGISTRY_NAME --resource-group $RESOURCE_GROUP_NAME .
Use el siguiente comando para compilar con una imagen base de WebSphere Liberty si prefiere usar una versión comercial de Open Liberty:
# Build and tag application image. This causes the ACR instance to pull the necessary WebSphere Liberty base images. az acr build -t ${artifactId}:${version} -r $REGISTRY_NAME --resource-group $RESOURCE_GROUP_NAME --file=Dockerfile-wlp .
Implementación de la aplicación
Siga los pasos de esta sección para implementar la aplicación de ejemplo en contenedor en el clúster de AKS.
Compruebe que el directorio de trabajo actual es java-app-jcache/target en el clon local.
Use los siguientes comandos para crear un secreto con información de configuración de Redisson. Con este secreto, la aplicación puede conectarse a la instancia de Azure Cache for Redis creada.
export REDISSON_CONFIG_SECRET_NAME=redisson-config-secret kubectl create secret generic ${REDISSON_CONFIG_SECRET_NAME} --from-file=$(pwd)/liberty/wlp/usr/servers/defaultServer/redisson-config.yaml
Use los siguientes comandos para implementar la aplicación Liberty con tres réplicas en el clúster de AKS. La salida del comando también se muestra en línea.
# Set number of application replicas export REPLICAS=3 # Create OpenLibertyApplication "javaee-cafe-jcache-cluster" envsubst < openlibertyapplication.yaml | kubectl create -f - openlibertyapplication.openliberty.io/javaee-cafe-jcache-cluster created # Check if OpenLibertyApplication instance is created kubectl get openlibertyapplication ${artifactId}-cluster NAME IMAGE EXPOSED RECONCILED AGE javaee-cafe-jcache-cluster youruniqueacrname.azurecr.io/javaee-cafe-jcache:1.0.0 True 59s # Check if deployment created by Operator is ready kubectl get deployment ${artifactId}-cluster --watch NAME READY UP-TO-DATE AVAILABLE AGE javaee-cafe-jcache-cluster 0/3 3 0 20s
Espere hasta que vea
3/3
debajo de laREADY
columna y3
debajo de laAVAILABLE
columna y, a continuación, use Ctrl+C para detener el proceso dekubectl
inspección.
Prueba de la aplicación
Cuando se ejecuta la aplicación, un servicio de equilibrador de carga de Kubernetes expone el front-end de la aplicación a Internet. Este proceso puede tardar en completarse.
Para supervisar el progreso, utilice el comando kubectl get service con el argumento --watch
.
kubectl get service ${artifactId}-cluster --watch
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
javaee-cafe-jcache-cluster LoadBalancer 10.0.50.29 20.84.16.169 80:31732/TCP 68s
Una vez que la dirección EXTERNAL-IP cambia de pendiente a una dirección IP pública real, use Ctrl+C para detener el proceso de kubectl
inspección.
Abra un explorador web en la dirección IP externa del servicio (20.84.16.169
en el ejemplo anterior) para ver la página principal de la aplicación. Si la página no se carga correctamente, esto se debe a que la aplicación se está iniciando. Puede esperar un tiempo y actualizar la página más adelante. Debería ver el nombre del pod de las réplicas de aplicación que se muestran en la parte superior izquierda de la página (javaee-cafe-jcache-cluster-77d54bccd4-5xnzx
para este caso).
En el formulario Nuevo café en la sesión, establezca valores para los campos Nombre y Precio y, a continuación, seleccione Enviar. Después de unos segundos, verá Recuento de envío: 1 mostrado en la parte inferior izquierda de la página.
Para demostrar que la memoria caché de sesión se conserva en todas las réplicas de la aplicación, ejecute el siguiente comando para eliminar la réplica actual con el nombre javaee-cafe-jcache-cluster-<pod id from your running app>
del pod :
kubectl delete pod javaee-cafe-jcache-cluster-77d54bccd4-5xnzx
pod "javaee-cafe-jcache-cluster-77d54bccd4-5xnzx" deleted
A continuación, actualice la página principal de la aplicación. Verá los mismos datos que se muestran en la sección Nuevo café en la sesión , pero se muestra un nombre de pod diferente en la parte superior izquierda de la página.
Por último, siga estos pasos para demostrar que los datos de sesión se conservan en la instancia de Azure Cache for Redis. Puede emitir comandos a la instancia de Azure Cache for Redis mediante la consola de Redis.
Busque la instancia de Azure Cache for Redis desde Azure Portal.
Seleccione Consola para abrir la consola de Redis.
Ejecute los siguientes comandos para ver los datos de sesión:
scan 0 count 1000 match '*' hgetall "com.ibm.ws.session.attr.default_host%2F"
Busque café.model.entity.Coffee[id=1, name=Coffee 3, price=30.0] desde la página web, que es el café que creó y se conserva en la instancia de Azure Cache for Redis.
Limpieza de recursos
Para evitar los cargos de Azure, se recomienda limpiar los recursos que no sean necesarios. Cuando el clúster ya no se necesite, puede usar el comando az group delete para quitar el grupo de recursos, el servicio de contenedor, el registro de contenedor y todos los recursos relacionados.
az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait
Para eliminar la instancia de Azure Cache for Redis, busque su nombre del grupo de recursos y ejecute el siguiente comando:
az group delete --name <AZURE_CACHE_FOR_REDIS_RESOURCE_GROUP_NAME> --yes --no-wait
Pasos siguientes
Puede obtener más información en las referencias que se usan en esta guía:
- Configuración de la persistencia de sesión de Liberty con JCache
- Compatibilidad de JCache con Redisson
- Configuración del servidor Open Liberty
Para explorar las opciones para ejecutar productos de WebSphere en Azure, consulte ¿Qué son las soluciones para ejecutar la familia de productos de WebSphere en Azure?
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente las Cuestiones de GitHub como mecanismo de retroalimentación para el contenido y lo sustituiremos por un nuevo sistema de retroalimentación. Para más información, consulta:Enviar y ver comentarios de