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 geïnstalleerde versie en afhankelijke bibliotheken te vinden. Voer az upgrade uit om te upgraden 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
Contributor
User 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 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.
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.
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-plugin
en az acr build gebruikt. Zie Een webtoepassing bouwen met Maven voor meer informatie over de liberty-maven-plugin
webtoepassing.
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.
Controleer of de huidige werkmap java-app-jcache is in uw lokale kloon.
Voer
mvn clean package
uit om de toepassing te verpakken.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 omgevingsvariabelenREDISCACHEHOSTNAME
ingevoegd enREDISCACHEKEY
in het bestand redisson-config.yaml waarnaar wordt verwezen door het server.xml-bestand .Voer deze opdracht uit
mvn liberty:dev
om de toepassing te testen. Als de test is geslaagd, zietThe 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
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.Gebruik Ctrl+C om de toepassing te stoppen.
Gebruik de volgende opdrachten om waarden op te halen voor eigenschappen
artifactId
enversion
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)
Voer deze
cd target
opdracht uit om de map te wijzigen in de build van het voorbeeld.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.
Controleer of de huidige werkmap java-app-jcache/target is in uw lokale kloon.
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
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
Wacht totdat u onder de
READY
kolom en3
onder deAVAILABLE
kolom ziet3/3
en gebruik vervolgens Ctrl+C om hetkubectl
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).
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.
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.
Zoek uw Azure Cache voor Redis exemplaar vanuit Azure Portal.
Selecteer Console om de Redis-console te openen.
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"
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:
- Liberty-sessiepersistentie configureren met JCache
- JCache-ondersteuning voor Redisson
- Open Liberty Server-configuratie
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?