Implementación de una aplicación Java con Open Liberty o WebSphere Liberty en un clúster de Azure Kubernetes Service
Se aplica a: AKS en Azure Local 22H2, AKS en Windows Server
En este artículo se explica cómo:
- Ejecutar una aplicación Java, Java EE, Yakarta EE o Microprofile en el runtime en Open Liberty o WebSphere Liberty.
- Compilar la imagen de Docker de la aplicación mediante imágenes de contenedor de Open Liberty.
- Implemente la aplicación en contenedor en un clúster de AKS local en AKS habilitado por Arc mediante el operador Open Liberty.
El operador de Open Liberty simplifica la implementación y administración de las aplicaciones que se ejecutan en clústeres de Kubernetes. Con este operador también puede realizar operaciones más avanzadas, como recopilar seguimientos y volcados.
Para obtener más información sobre Open Liberty, consulte la página del proyecto Open Liberty. Para obtener más información sobre IBM WebSphere Liberty, consulte la página del producto WebSphere Liberty.
Este artículo se divide en dos partes:
La parte 1 se centra en la implementación de los artefactos necesarios en Azure. Esta implementación incluye un grupo de recursos y Azure Container Registry. Para realizar estas tareas, puede usar Azure Cloud Shell (más sencillo), que incluye la versión más reciente de la CLI de Azure o un sistema local con las siguientes herramientas instaladas:
- Un sistema operativo similar a Unix instalado (por ejemplo, Ubuntu, macOS, Subsistema de Windows para Linux).
- Instale la CLI de Azure siguiendo las instrucciones anteriores.
- Instale una implementación de Java SE (por ejemplo, AdoptOpenJDK OpenJDK 8 LTS/OpenJ9).
- Instale Maven 3.5.0 o una versión superior.
- Instale Docker para el sistema operativo.
La parte 2 se centra en la implementación de la aplicación desde Azure Container Registry en el entorno de AKS Arc. En esta sección, no puede usar Azure Cloud Shell. Para el entorno de AKS Arc, se requieren los siguientes elementos:
- Un clúster de AKS con al menos un nodo de trabajo de Linux que esté en funcionamiento.
- Un entorno local
kubectl
configurado que apunta al clúster de AKS. Puede usar el comando de PowerShell Get-AksHciCredential para acceder al clúster mediantekubectl
. - Herramientas de línea de comandos GIT instaladas en el sistema. En un sistema Windows, puede usar Git Bash como consola principal y, dentro de la consola de Git Bash, llamar a PowerShell y Azure cuando sea necesario.
Creación de un grupo de recursos en Azure
Un grupo de recursos de Azure es un grupo lógico en el que se implementan y administran los recursos de Azure.
Puede crear un grupo de recursos denominado java-liberty-project cuando use 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:
RESOURCE_GROUP_NAME=java-liberty-project
az group create --name $RESOURCE_GROUP_NAME --location eastus
Creación de una instancia de Container Registry en Azure
Use el comando az acr create para crear la instancia de Azure Container Registry. En el ejemplo siguiente se crea una instancia de Container Registry denominada youruniquecontainerregistryname. Asegúrese de que youruniquecontainerregistryname es único en Azure:
REGISTRY_NAME=youruniquecontainerregistryname
az acr create --resource-group $RESOURCE_GROUP_NAME --name $REGISTRY_NAME --sku Basic --admin-enabled
Después de un breve tiempo, debería ver la salida JSON similar al ejemplo siguiente:
"provisioningState": "Succeeded",
"publicNetworkAccess": "Enabled",
"resourceGroup": "java-liberty-project",
Conexión a la instancia de Container Registry en Azure
Debe iniciar sesión en la instancia de Container Registry para poder insertar una imagen en ella. Ejecute los comandos siguientes para comprobar la conexión. Anote los detalles de inicio de sesión. Los usará más adelante al conectarse a AKS:
LOGIN_SERVER=$(az acr show -n $REGISTRY_NAME --query 'loginServer' -o tsv)
USER_NAME=$(az acr credential show -n $REGISTRY_NAME --query 'username' -o tsv)
PASSWORD=$(az acr credential show -n $REGISTRY_NAME --query 'passwords[0].value' -o tsv)
echo $LOGIN_SERVER
echo $USER_NAME
echo $PASSWORD
docker login $LOGIN_SERVER -u $USER_NAME -p $PASSWORD
Debería ver Inicio de sesión correcto al final de la salida del comando si ha iniciado sesión correctamente en la instancia de Container Registry.
Creación de una imagen de la aplicación en Azure
Para implementar y ejecutar la aplicación Liberty en el clúster de AKS, primero debe incluir en contenedores la aplicación como una imagen de Docker mediante imágenes de contenedor de Open Liberty o imágenes de contenedor de WebSphere Liberty:
- Clone el código de ejemplo de esta guía. El ejemplo se encuentra en GitHub.
- Cambie el directorio a
javaee-app-simple-cluster
del clon local. - Ejecute
mvn clean package
para empaquetar la aplicación. - Ejecute
mvn liberty:dev
para probar la aplicación. Debería ver Que el servidor defaultServer está listo para ejecutar un planeta más inteligente en la salida del comando si el comando se realizó correctamente. Use CTRL-C para detener la aplicación. - Ejecute uno de los siguientes comandos para compilar la imagen de la aplicación e insertarla en la instancia de Container Registry:
Compile con la imagen base de Open Liberty si prefiere usar Open Liberty como Java Runtime ligero de código abierto:
# Build and tag application image. This causes the Container Registry instance to pull the necessary Open Liberty base images. az acr build -t javaee-cafe-simple:1.0.0 -r $REGISTRY_NAME .
Compile con la imagen base de WebSphere Liberty si prefiere usar una versión comercial de Open Liberty:
# Build and tag application image. This causes the Container Registry instance to pull the necessary WebSphere Liberty base images. az acr build -t javaee-cafe-simple:1.0.0 -r $REGISTRY_NAME --file=Dockerfile-wlp .
Conectarse al clúster AKS
Para administrar un clúster de Kubernetes, use kubectl, el cliente de línea de comandos de Kubernetes. Una vez instalado en Windows, puede ejecutarse kubectl
desde el símbolo del sistema, la consola de PowerShell y Git Bash.
Como requisito previo, debe configurar el entorno local kubectl
para que apunte al clúster de AKS. Puede usar el comando Get-AksHciCredential de PowerShell para acceder al clúster mediante kubectl
:
Get-AksHciCredential -name AksHciClusterName
Nota:
El comando anterior usa la ubicación predeterminada para el archivo de configuración de Kubernetes, que es %USERPROFILE%.kube. Puede especificar una ubicación diferente para el archivo de configuración de Kubernetes mediante el -outputLocation
parámetro .
De nuevo en la consola, 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, instale el operador Open Liberty mediante la ejecución de los siguientes comandos:
OPERATOR_NAMESPACE=default
WATCH_NAMESPACE='""'
# Install Custom Resource Definitions (CRDs) for OpenLibertyApplication
kubectl apply -f https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/master/deploy/releases/0.7.1/openliberty-app-crd.yaml
# Install cluster-level role-based access
curl -L https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/master/deploy/releases/0.7.1/openliberty-app-cluster-rbac.yaml \
| sed -e "s/OPEN_LIBERTY_OPERATOR_NAMESPACE/${OPERATOR_NAMESPACE}/" \
| kubectl apply -f -
# Install the operator
curl -L https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/master/deploy/releases/0.7.1/openliberty-app-operator.yaml \
| sed -e "s/OPEN_LIBERTY_WATCH_NAMESPACE/${WATCH_NAMESPACE}/" \
| kubectl apply -n ${OPERATOR_NAMESPACE} -f -
Implementación de una aplicación en el clúster de AKS
Siga estos pasos para implementar la aplicación Liberty en el clúster de AKS. Debe recuperar los detalles de inicio de sesión de la sesión anterior:
Si ha usado Azure Cloud Shell anteriormente y ahora usa una consola independiente para conectarse a AKS, debe especificar las credenciales de nuevo:
LOGIN_SERVER=YourLoginServerFromEarlier USER_NAME=YourUsernameFromEarlier PASSWORD=YourPwdFromEarlier
Cree un secreto de extracción para que el clúster de AKS se autentique para extraer la imagen de la instancia de Container Registry:
kubectl create secret docker-registry acr-secret \ --docker-server=${LOGIN_SERVER} \ --docker-username=${USER_NAME} \ --docker-password=${PASSWORD}
De nuevo, si usó Azure Cloud Shell anteriormente y ahora usa una herramienta o sesión independientes para conectarse a AKS, debe clonar el código de ejemplo de esta guía. El ejemplo se encuentra en GitHub.
Compruebe que el directorio de trabajo actual es javaee-app-simple-cluster en el clon local.
Ejecute 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:
# Create OpenLibertyApplication "javaee-app-simple-cluster" cat openlibertyapplication.yaml | sed -e "s/\${Container_Registry_URL}/${LOGIN_SERVER}/g" | sed -e "s/\${REPLICAS}/3/g" | kubectl apply -f - openlibertyapplication.openliberty.io/javaee-app-simple-cluster created # Check if OpenLibertyApplication instance is created kubectl get openlibertyapplication javaee-app-simple-cluster NAME IMAGE EXPOSED RECONCILED AGE javaee-app-simple-cluster youruniquecontainerregistryname.azurecr.io/javaee-cafe-simple:1.0.0 True 59s # Check if deployment created by Operator is ready kubectl get deployment javaee-app-simple-cluster --watch NAME READY UP-TO-DATE AVAILABLE AGE javaee-app-simple-cluster 0/3 3 0 20s
Espere hasta que vea 3/3 en la columna READY y 3 en la columna DISPONIBLE . A continuación, puede usar CTRL-C para detener el proceso de
kubectl
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 javaee-app-simple-cluster --watch
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
javaee-app-simple-cluster LoadBalancer 10.109.118.3 192.168.0.152 80:30580/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 (192.168.0.152 en este ejemplo) para ver la página principal de la aplicación. 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. Espere unos minutos y actualice la página para ver un nombre de pod diferente que se muestra como resultado del equilibrio de carga proporcionado por el clúster de AKS.
Nota:
Actualmente, la aplicación no usa HTTPS. Debe habilitar TLS con sus propios certificados.
Limpiar los recursos
Para evitar los cargos de Azure, se recomienda limpiar los recursos que no sean necesarios. Cuando ya no necesite el clúster, use el comando az group delete para quitar el grupo de recursos, el registro de contenedor y los recursos de Azure relacionados:
RESOURCE_GROUP_NAME=java-liberty-project
az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait
Para limpiar los recursos implementados en AKS, ejecute los siguientes comandos desde la consola local:
kubectl delete -f https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/master/deploy/releases/0.7.1/openliberty-app-crd.yaml
kubectl delete -f https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/master/deploy/releases/0.7.1/openliberty-app-operator.yaml
kubectl delete -f openlibertyapplication.yaml
Pasos siguientes
Para obtener más información, consulte las referencias usadas en esta guía: