Compartir a través de


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 mediante kubectl.
  • 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:

  1. Clone el código de ejemplo de esta guía. El ejemplo se encuentra en GitHub.
  2. Cambie el directorio a javaee-app-simple-cluster del clon local.
  3. Ejecute mvn clean package para empaquetar la aplicación.
  4. 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.
  5. 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:

  1. 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
    
  2. 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}
    
  3. 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.

  4. Compruebe que el directorio de trabajo actual es javaee-app-simple-cluster en el clon local.

  5. 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
    
  6. 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.

Captura de pantalla de una aplicación de Java Liberty implementada correctamente en 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: