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

  • Een Azure-abonnement. Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.
  • Bereid een lokale computer voor waarop unix-achtig besturingssysteem is geïnstalleerd, bijvoorbeeld Ubuntu, macOS of Windows-subsysteem voor Linux.
  • Installeer de Azure CLI om Azure CLI-opdrachten uit te voeren.
    • Meld u aan met Azure CLI met behulp van de opdracht az login. Volg de stappen die worden weergegeven in de terminal, om het verificatieproces te voltooien. Zie Aanmelden bij Azure met Azure CLI voor andere aanmeldingsopties.
    • Installeer de Azure CLI-extensie bij het eerste gebruik, wanneer u hierom wordt gevraagd. Zie Extensies gebruiken en beheren met de Azure CLI voor meer informatie over extensies.
    • Voer az version uit om de versie en afhankelijke bibliotheken te vinden die zijn geïnstalleerd. Voer az upgradeuit om een upgrade uit te voeren naar de nieuwste versie.
  • Installeer een Java SE-implementatieversie 17 of hoger, bijvoorbeeld Microsoft-build van OpenJDK.
  • Installeer Maven 3.5.0 of hoger.
  • Installeer Docker voor uw besturingssysteem.
  • Zorg ervoor dat Git is geïnstalleerd.
  • Zorg ervoor dat u een rol of ContributorUser Access Administrator rollen voor het abonnement hebt toegewezenOwner. U kunt uw toewijzingen controleren door de stappen te volgen in Roltoewijzingen weergeven voor een gebruiker of groep.

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 exemplaar van Azure Cache voor Redis om de voorbeeldtoepassing uit te voeren.

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 op de eastus locatie. 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 youruniqueacrname 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

Je moet je aanmelden bij de ACR-instantie voordat je er een afbeelding naartoe 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.

Je ziet Login Succeeded aan het einde van de opdrachtuitvoer als je bent aangemeld bij het ACR-exemplaar.

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 het trekken van afbeeldingen van de ACR-instantie toe te staan. 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 te configureren om verbinding te maken met uw 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 is Ready.

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

    Selecteer in stap 7 van de sectie Een Azure Cache voor Redis-maken toegangssleutelsverificatie voor de optie Verificatie in het deelvenster Geavanceerd voor deze handleiding. Voor optimale beveiliging wordt u aangeraden Microsoft Entra ID met beheerde identiteiten te gebruiken om aanvragen voor uw cache te autoriseren, indien mogelijk. Autorisatie met behulp van Microsoft Entra ID en beheerde identiteiten biedt superieure beveiliging en gebruiksgemak ten opzichte van autorisatie van gedeelde toegangssleutels. Zie Microsoft Entra ID gebruiken voor cacheverificatievoor meer informatie over het gebruik van beheerde identiteiten met uw cache.

  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 worden Maven, liberty-maven-pluginen az acr buildgebruikt. 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 detached HEAD status, is dit bericht veilig te negeren. Het betekent alleen dat je een tag hebt gecontroleerd.

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 pom.xml-bestand:

    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.

Als u de voortgang wilt controleren, gebruikt u de opdracht kubectl get service met het argument --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

Nadat het EXTERNAL-IP-adres is gewijzigd van pending in een werkelijk 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 vorige 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 de podnaam van uw toepassingsreplica's linksboven op de pagina (javaee-cafe-jcache-cluster-77d54bccd4-5xnzx in dit geval).

Screenshot of Java liberty application successfully deployed on A K S.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.

Screenshot of sample application showing new coffee created and persisted in the session of the application.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 weergegeven in 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?