Delen via


Java EE JCache gebruiken met Open Liberty of WebSphere Liberty in een AKS-cluster (Azure Kubernetes Service)

In dit artikel wordt beschreven hoe u Java EE JCache gebruikt in een containertoepassing die is geïmplementeerd in AKS.

In deze handleiding gaat u het volgende doen:

  • Maak de infrastructuur voor het uitvoeren van uw Java-, Java EE-, Jakarta EE- of MicroProfile-toepassing op de Open Liberty- of WebSphere Liberty-runtime.
  • Gebruik Java EE JCache ondersteund door Azure Cache voor Redis als sessiecache.
  • Bouw de Docker-toepassingsinstallatiekopieën met behulp van Open Liberty- of WebSphere Liberty-containerinstallatiekopieën.
  • Implementeer de containertoepassing in een AKS-cluster met behulp van de Open Liberty Operator.

Dit artikel is bedoeld om u snel te helpen bij de implementatie. Voordat u naar productie gaat, moet u Tuning Liberty verkennen.

Als u feedback wilt geven of nauw wilt samenwerken aan uw migratiescenario's met het technische team dat WebSphere op Azure-oplossingen ontwikkelt, vult u deze korte enquête over WebSphere-migratie in en neemt u uw contactgegevens op. Het team van programmamanagers, architecten en technici neemt onmiddellijk contact met u op om nauwe samenwerking te initiëren.

Vereisten

De infrastructuur maken

De stappen in deze sectie helpen u bij het maken van de toepassingsinfrastructuur in Azure. Nadat u deze stappen hebt voltooid, hebt u een Azure Container Registry, een Azure Kubernetes Service-cluster en een Azure Cache voor Redis exemplaar voor het uitvoeren van de voorbeeldtoepassing.

Een brongroep maken

Een Azure-resourcegroep is een logische groep waarin Azure-resources worden geïmplementeerd en beheerd.

Maak een resourcegroep met de naam java-liberty-project met behulp van de opdracht az group create in de locatie eastus. Deze resourcegroep wordt later gebruikt voor het maken van het ACR-exemplaar (Azure Container Registry) en het AKS-cluster.

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

Een ACR-exemplaar maken

Gebruik de opdracht az acr create om het ACR-exemplaar te maken. In het volgende voorbeeld wordt een ACR-exemplaar gemaakt met de naam youruniqueacrname. Zorg ervoor dat uwuniqueacrname uniek is binnen Azure.

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

Na korte tijd ziet u een JSON-uitvoer die het volgende bevat:

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

U kunt ook een exemplaar van een Azure-containerregister maken door de stappen in quickstart te volgen: Een Azure-containerregister maken met behulp van Azure Portal.

Verbinding maken met het ACR-exemplaar

U moet zich aanmelden bij het ACR-exemplaar voordat u een installatiekopieën naar het exemplaar kunt pushen. Voer de volgende opdrachten uit om de verbinding te controleren:

export LOGIN_SERVER=$(az acr show \
    --name $REGISTRY_NAME \
    --resource-group $RESOURCE_GROUP_NAME \
    --query 'loginServer' \
    --output tsv)

az acr login \
    --name $REGISTRY_NAME \
    --resource-group $RESOURCE_GROUP_NAME

Notitie

Het gebruik van gebruikersnaam- en wachtwoordreferenties om toegang te verlenen tot een containerregister wordt afgeraden. Als uw specifieke gebruiksvereisten suggereren dat toegang op basis van referenties de beste methode is, kunt u de gebruikersnaam en het wachtwoord az acr credential show verkrijgen en deze waarden gebruiken met docker login.

Als u zich bij het ACR-exemplaar hebt aangemeld, ziet Login Succeeded u aan het einde van de opdrachtuitvoer.

Als u een probleem ondervindt bij het aanmelden bij het Azure-containerregister, raadpleegt u Aanmelding bij register oplossen.

Een AKS-cluster maken

Gebruik de opdracht az aks create om een AKS-cluster te maken en de pull-machtiging voor de installatiekopie van het ACR-exemplaar te verlenen. In het volgende voorbeeld wordt een cluster met de naam myAKSCluster gemaakt met één knooppunt. Het voltooien van deze opdracht duurt enkele minuten.

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

Na enkele minuten wordt de opdracht voltooid en retourneert JSON-geformatteerde informatie over het cluster, met inbegrip van de volgende regels:

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

Verbinding maken met het AKS-cluster

Als u een Kubernetes-cluster wilt beheren, gebruikt u kubectl, de Kubernetes-opdrachtregelclient. Als u kubectl lokaal wilt installeren, gebruikt u de opdracht az aks install-cli:

az aks install-cli

Gebruik de opdracht az aks get-credentials om kubectl zodanig te configureren dat er verbinding wordt gemaakt met het Kubernetes-cluster. Bij deze opdracht worden referenties gedownload en wordt Kubernetes CLI geconfigureerd voor het gebruik van deze referenties.

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

Als u de verbinding met uw cluster wilt controleren, gebruikt u de opdracht kubectl get om een lijst met clusterknooppunten te retourneren.

kubectl get nodes

In de volgende voorbeelduitvoer ziet u het enkele knooppunt dat is gemaakt in de vorige stappen. Zorg ervoor dat de status van het knooppunt gereed is.

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

Open Liberty Operator installeren

Nadat u het cluster hebt gemaakt en er verbinding mee hebt gemaakt, installeert u de Open Liberty Operator door de volgende opdrachten uit te voeren.

# 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.3.3
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

Een instantie van Azure Cache voor Redis maken

Azure Cache voor Redis de persistentie van de HttpSession voor een Java-toepassing die wordt uitgevoerd op een Open Liberty- of WebSphere Liberty-server, wordt teruggezet. Volg de stappen in deze sectie om een Azure Cache voor Redis exemplaar te maken en noteer de verbindingsgegevens. We gebruiken deze informatie later.

  1. Volg de stappen in de quickstart: Gebruik Azure Cache voor Redis in Java tot, maar niet inclusief Inzicht in het Java-voorbeeld.

    Notitie

    In stap 6 van de sectie Een Azure Cache voor Redis maken, selecteert u Verificatie van toegangssleutels voor de optie Verificatie. Deze optie is vereist voor de voorbeeldtoepassing om verbinding te maken met het Azure Cache voor Redis exemplaar met behulp van de Redisson-clientbibliotheek. Zie Redisson Configuration voor meer informatie.

  2. Kopieer hostnaam en primaire toegangssleutel voor uw Azure Cache voor Redis exemplaar en voer vervolgens de volgende opdrachten uit om omgevingsvariabelen toe te voegen:

    export REDISCACHEHOSTNAME=<YOUR_HOST_NAME>
    export REDISCACHEKEY=<YOUR_PRIMARY_ACCESS_KEY>
    

De toepassing bouwen

Volg de stappen in deze sectie om de voorbeeldtoepassing te bouwen en in een container te plaatsen. In deze stappen wordt Maven, liberty-maven-pluginen az acr build gebruikt. Zie Een webtoepassing bouwen met Maven voor meer informatie over de liberty-maven-pluginwebtoepassing.

De toepassing uitchecken

Gebruik de volgende opdrachten om de voorbeeldcode voor deze handleiding te klonen. Het voorbeeld bevindt zich in de opslagplaats open-liberty-on-aks op GitHub. Er zijn enkele voorbeelden in de opslagplaats. In dit artikel wordt java-app-jcache gebruikt.

git clone https://github.com/Azure-Samples/open-liberty-on-aks.git
cd open-liberty-on-aks
git checkout 20240909
cd java-app-jcache

Als u een bericht ziet over 'losgekoppelde HEAD'-status, is dit bericht veilig te negeren. Het betekent alleen dat je een tag hebt uitgecheckt.

De toepassing heeft de volgende bestandsstructuur:

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

De java-, resources- en webapp-mappen bevatten de broncode van de voorbeeldtoepassing.

In de aks-map wordt het implementatiebestand openlibertyapplication.yaml gebruikt om de toepassingsinstallatiekopie te implementeren.

In de docker-map plaatsen we twee Dockerfiles. Dockerfile wordt gebruikt voor het bouwen van installatiekopieën met Open Liberty en Dockerfile-wlp wordt gebruikt voor het bouwen van installatiekopieën met WebSphere Liberty.

In de map liberty/config wordt het server.xml-bestand gebruikt om sessiecache te configureren voor het Open Liberty- en WebSphere Liberty-cluster.

In de redisson-map wordt het bestand redisson-config.yaml gebruikt om de verbinding van het Azure Cache voor Redis exemplaar te configureren.

De toepassing in een container plaatsen

Als u uw Liberty-toepassing wilt implementeren en uitvoeren op het AKS-cluster, gebruikt u de volgende stappen om uw toepassing als docker-installatiekopieën te containeriseren. U kunt Open Liberty-containerinstallatiekopieën of WebSphere Liberty-containerinstallatiekopieën gebruiken.

  1. Controleer of de huidige werkmap java-app-jcache is in uw lokale kloon.

  2. Voer mvn clean package uit om de toepassing te verpakken.

  3. Voer deze opdracht mvn -Predisson validate uit om het Redisson-configuratiebestand naar de opgegeven locatie te kopiëren. Met deze stap worden de waarden van de omgevingsvariabelen REDISCACHEHOSTNAME ingevoegd en REDISCACHEKEY in het bestand redisson-config.yaml waarnaar wordt verwezen door het server.xml-bestand .

  4. Voer deze opdracht uit mvn liberty:dev om de toepassing te testen. Als de test is geslaagd, ziet The defaultServer server is ready to run a smarter planet. u in de uitvoer van de opdracht. Als de Redis-verbinding is geslaagd, ziet u uitvoer die er ongeveer als volgt uitziet.

    [INFO] [err] [Default Executor-thread-5] INFO org.redisson.Version - Redisson 3.23.4
    [INFO] [err] [redisson-netty-2-7] 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
    
  5. U kunt de http://localhost:9080/ toepassing bekijken die wordt uitgevoerd, maar het bewijs dat Redis werkt, is de uitvoer die in de vorige stap wordt vermeld.

  6. Gebruik Ctrl+C om de toepassing te stoppen.

  7. Gebruik de volgende opdrachten om waarden op te halen voor eigenschappen artifactId en version gedefinieerd in het bestand 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)
    
  8. Voer deze cd target opdracht uit om de map te wijzigen in de build van het voorbeeld.

  9. Voer een van de volgende opdrachten uit om de installatiekopieën van de toepassing te bouwen en deze naar het ACR-exemplaar te pushen.

    • Gebruik de volgende opdracht om te bouwen met een Open Liberty-basisinstallatiekopieën als u Open Liberty liever gebruikt als een lichtgewicht opensource Java-runtime™:

      # 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 .
      
    • Gebruik de volgende opdracht om te bouwen met een WebSphere Liberty-basisinstallatiekopieën als u liever een commerciële versie van Open Liberty gebruikt:

      # 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 .
      

De toepassing implementeren

Volg de stappen in deze sectie om de voorbeeldtoepassing in een container te implementeren op het AKS-cluster.

  1. Controleer of de huidige werkmap java-app-jcache/target is in uw lokale kloon.

  2. Gebruik de volgende opdrachten om een geheim te maken met redisson-configuratiegegevens. Met dit geheim kan de toepassing verbinding maken met het gemaakte Azure Cache voor Redis exemplaar.

    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
    
  3. Gebruik de volgende opdrachten om uw Liberty-toepassing met drie replica's te implementeren in het AKS-cluster. De uitvoer van de opdracht wordt ook inline weergegeven.

    # 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
    
  4. Wacht totdat u onder de READY kolom en 3 onder de AVAILABLE kolom ziet 3/3 en gebruik vervolgens Ctrl+C om het kubectl controleproces te stoppen.

De toepassing testen

Wanneer de toepassing wordt uitgevoerd, maakt een Kubernetes Load Balancer-service de front-end van de toepassing beschikbaar op internet. Dit proces kan enige tijd duren.

Gebruik de opdracht kubectl get service met het argument --watch om de voortgang te controleren.

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

Zodra het EXTERNAL-IP-adres is gewijzigd van in behandeling tot een daadwerkelijk openbaar IP-adres, gebruikt u Ctrl+C om het kubectl controleproces te stoppen.

Open een webbrowser naar het externe IP-adres van uw service (20.84.16.169 voor het bovenstaande voorbeeld) om de startpagina van de toepassing weer te geven. Als de pagina niet correct is geladen, komt dat doordat de app wordt gestart. U kunt even wachten en de pagina later vernieuwen. U ziet nu de podnaam van uw toepassingsreplica's in de linkerbovenhoek van de pagina (javaee-cafe-jcache-cluster-77d54bccd4-5xnzx voor dit geval).

Schermopname van de Java liberty-toepassing die is geïmplementeerd op A K S.

Stel in het formulier Nieuwe koffie in sessie waarden in voor de velden Naam en Prijs en selecteer Vervolgens Verzenden. Na een paar seconden ziet u het aantal verzenden: 1 wordt linksonder op de pagina weergegeven.

Schermopname van voorbeeldtoepassing met nieuwe koffie gemaakt en persistent in de sessie van de toepassing.

Voer de volgende opdracht uit om de huidige replica met de naam van de pod javaee-cafe-jcache-cluster-<pod id from your running app>te verwijderen om te laten zien dat de sessiecache behouden blijft op alle replica's van de toepassing:

kubectl delete pod javaee-cafe-jcache-cluster-77d54bccd4-5xnzx

pod "javaee-cafe-jcache-cluster-77d54bccd4-5xnzx" deleted

Vernieuw vervolgens de startpagina van de toepassing. U ziet dezelfde gegevens die worden weergegeven in de sectie Nieuwe koffie in sessie , maar er wordt een andere podnaam weergegeven in de linkerbovenhoek van de pagina.

Gebruik ten slotte de volgende stappen om aan te tonen dat de sessiegegevens in het Azure Cache voor Redis exemplaar worden bewaard. U kunt opdrachten aan uw Azure Cache voor Redis exemplaar uitgeven met behulp van de Redis-console.

  1. Zoek uw Azure Cache voor Redis exemplaar vanuit Azure Portal.

  2. Selecteer Console om de Redis-console te openen.

  3. Voer de volgende opdrachten uit om de sessiegegevens weer te geven:

    scan 0 count 1000 match '*'
    
    hgetall "com.ibm.ws.session.attr.default_host%2F"
    
  4. Zoek naar café.model.entity.Coffee[id=1, name=Coffee 3, price=30.0] op de webpagina. Dit is de koffie die u hebt gemaakt en bewaard in het Azure Cache voor Redis exemplaar.

Resources opschonen

Om Azure-kosten te voorkomen, moet u overbodige resources opschonen. Wanneer het cluster niet meer nodig is, gebruikt u de opdracht az group delete om de resourcegroep, de containerservice, het containerregister en alle gerelateerde resources te verwijderen.

az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait

Als u het Azure Cache voor Redis exemplaar wilt verwijderen, zoekt u de naam van de resourcegroep en voert u de volgende opdracht uit:

az group delete --name <AZURE_CACHE_FOR_REDIS_RESOURCE_GROUP_NAME> --yes --no-wait

Volgende stappen

In deze handleiding vindt u meer informatie over verwijzingen die worden gebruikt:

Als u opties wilt verkennen om WebSphere-producten uit te voeren in Azure, raadpleegt u Wat zijn oplossingen voor het uitvoeren van de WebSphere-producten in Azure?