Använda Java EE JCache med Open Liberty eller WebSphere Liberty i ett AKS-kluster (Azure Kubernetes Service)
Den här artikeln beskriver hur du använder Java EE JCache i ett containerbaserat program som distribueras till AKS.
I den här guiden gör du följande:
- Skapa infrastrukturen för att köra java-, Java EE-, Jakarta EE- eller MicroProfile-programmet på Open Liberty- eller WebSphere Liberty-körningen.
- Använd Java EE JCache som backas upp av Azure Cache for Redis som sessionscache.
- Skapa docker-avbildningen för programmet med hjälp av Open Liberty- eller WebSphere Liberty-containeravbildningar.
- Distribuera det containerbaserade programmet till ett AKS-kluster med hjälp av Open Liberty-operatorn.
Den här artikeln är avsedd att hjälpa dig att snabbt komma till distributionen. Innan du går till produktion bör du utforska Tuning Liberty.
Om du är intresserad av att ge feedback eller arbeta nära dina migreringsscenarier med teknikteamet som utvecklar WebSphere på Azure-lösningar kan du fylla i den här korta undersökningen om WebSphere-migrering och inkludera din kontaktinformation. Teamet med programchefer, arkitekter och ingenjörer kommer snabbt att kontakta dig för att initiera ett nära samarbete.
Förutsättningar
- En Azure-prenumeration. Om du inte har en Azure-prenumeration kan du skapa ettkostnadsfritt konto innan du börjar.
- Förbered en lokal dator med Unix-liknande operativsystem installerat , till exempel Ubuntu, macOS eller Windows-undersystem för Linux.
- Installera Azure CLI för att köra Azure CLI-kommandon.
- Logga in med Azure CLI med kommandot az login . Slutför autentiseringsprocessen genom att följa stegen som visas i terminalen. Se Logga in på Azure med Azure CLI för andra inloggningsalternativ.
- När du uppmanas att installera Azure CLI-tillägget vid första användningen. Mer information om tillägg finns i Använda och hantera tillägg med Azure CLI.
- Kör az version om du vill hitta versionen och de beroende bibliotek som är installerade. Om du vill uppgradera till den senaste versionen kör du az upgrade.
- Installera en Java SE-implementeringsversion 17 eller senare – till exempel Microsoft-version av OpenJDK.
- Installera Maven 3.5.0 eller senare.
- Installera Docker för operativsystemet.
- Kontrollera att Git är installerat.
- Se till att du har tilldelats antingen
Owner
roll ellerContributor
rollerUser Access Administrator
för prenumerationen. Du kan verifiera dina tilldelningar genom att följa stegen i Lista rolltilldelningar för en användare eller grupp.
Skapa infrastrukturen
Stegen i det här avsnittet hjälper dig att skapa programinfrastrukturen i Azure. När du har slutfört de här stegen har du ett Azure Container Registry, ett Azure Kubernetes Service-kluster och en Azure Cache for Redis-instans för att köra exempelprogrammet.
Skapa en resursgrupp
En Azure-resursgrupp är en logisk grupp där Azure-resurser distribueras och hanteras.
Skapa en resursgrupp med namnet java-liberty-project med kommandot az group create på platsen eastus . Den här resursgruppen används senare för att skapa Azure Container Registry-instansen (ACR) och AKS-klustret.
export RESOURCE_GROUP_NAME=java-liberty-project
az group create --name $RESOURCE_GROUP_NAME --location eastus
Skapa en ACR-instans
Använd kommandot az acr create för att skapa ACR-instansen. I följande exempel skapas en ACR-instans med namnet youruniqueacrname. Kontrollera att dittuniqueacrname är unikt i Azure.
export REGISTRY_NAME=youruniqueacrname
az acr create \
--resource-group $RESOURCE_GROUP_NAME \
--name $REGISTRY_NAME \
--sku Basic
Efter en kort tid bör du se en JSON-utdata som innehåller:
"provisioningState": "Succeeded",
"publicNetworkAccess": "Enabled",
"resourceGroup": "java-liberty-project",
Du kan också skapa en Azure-containerregisterinstans genom att följa stegen i Snabbstart: Skapa ett Azure-containerregister med hjälp av Azure Portal.
Ansluta till ACR-instansen
Du måste logga in på ACR-instansen innan du kan skicka en bild till den. Kör följande kommandon för att verifiera anslutningen:
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
Kommentar
Användning av autentiseringsuppgifter för användarnamn och lösenord för att bevilja åtkomst till ett containerregister rekommenderas inte. Om dina specifika användningskrav tyder på att autentiseringsbaserad åtkomst är den bästa metoden kan du hämta användarnamnet och lösenordet med och az acr credential show
använda dessa värden med docker login
.
Du bör se Login Succeeded
i slutet av kommandoutdata om du har loggat in på ACR-instansen.
Om du ser ett problem med att logga in i Azure-containerregistret kan du läsa Felsöka registerinloggning.
Skapa ett AKS-kluster
Använd kommandot az aks create för att skapa ett AKS-kluster och ge det behörighet att hämta avbildningar från ACR-instansen. I följande exempel skapas ett kluster med namnet myAKSCluster och en enda nod. Det tar flera minuter att slutföra det här kommandot.
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
Efter några minuter slutförs kommandot och returnerar JSON-formaterad information om klustret, inklusive följande rader:
"nodeResourceGroup": "MC_java-liberty-project_myAKSCluster_eastus",
"privateFqdn": null,
"provisioningState": "Succeeded",
"resourceGroup": "java-liberty-project",
Ansluta till AKS-klustret
För att hantera Kubernetes-kluster använder du kubectl, Kubernetes kommandoradsklient. För att installera kubectl
lokalt använder du kommandot az aks install-cli:
az aks install-cli
För att konfigurera kubectl
till att ansluta till ditt Kubernetes-kluster använder du kommandot az aks get-credentials. Det här kommandot laddar ned autentiseringsuppgifter och konfigurerar Kubernetes CLI för att använda dem.
az aks get-credentials \
--resource-group $RESOURCE_GROUP_NAME \
--name $CLUSTER_NAME \
--overwrite-existing
Du kan kontrollera anslutningen till klustret genom att köra kommandot kubectl get för att returnera en lista över klusternoderna.
kubectl get nodes
Följande exempelutdata visar den enskilda nod som skapades i föregående steg. Kontrollera att nodens status är Klar.
NAME STATUS ROLES AGE VERSION
aks-nodepool1-xxxxxxxx-yyyyyyyyyy Ready agent 76s v1.18.10
Installera Open Liberty-operatorn
När du har skapat och anslutit till klustret installerar du Open Liberty Operator genom att köra följande kommandon.
# 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
Skapa en Azure Cache for Redis-instans
Azure Cache for Redis stöder beständigheten HttpSession
för ett Java-program som körs inom en Open Liberty- eller WebSphere Liberty-server. Följ stegen i det här avsnittet för att skapa en Azure Cache for Redis-instans och anteckna dess anslutningsinformation. Vi använder den här informationen senare.
Följ stegen i Snabbstart: Använd Azure Cache for Redis i Java upp till, men inte Förstå Java-exemplet.
Kommentar
I steg 6 i avsnittet Skapa en Azure Cache for Redis väljer du Autentisering av åtkomstnycklar som autentiseringsalternativ . Det här alternativet krävs för att exempelprogrammet ska kunna ansluta till Azure Cache for Redis-instansen med hjälp av Redisson-klientbiblioteket . Mer information finns i Redisson Configuration .
Kopiera värdnamn och primär åtkomstnyckel för din Azure Cache for Redis-instans och kör sedan följande kommandon för att lägga till miljövariabler:
export REDISCACHEHOSTNAME=<YOUR_HOST_NAME> export REDISCACHEKEY=<YOUR_PRIMARY_ACCESS_KEY>
Skapa programmet
Följ stegen i det här avsnittet för att skapa och containerisera exempelprogrammet. De här stegen använder Maven, liberty-maven-plugin
, och az acr build. Mer information om finns i liberty-maven-plugin
Skapa ett webbprogram med Maven.
Kolla in programmet
Använd följande kommandon för att klona exempelkoden för den här guiden. Exemplet finns på lagringsplatsen open-liberty-on-aks på GitHub. Det finns några exempel på lagringsplatsen. Den här artikeln använder java-app-jcache.
git clone https://github.com/Azure-Samples/open-liberty-on-aks.git
cd open-liberty-on-aks
git checkout 20240909
cd java-app-jcache
Om du ser ett meddelande om att vara i "frånkopplat HEAD"-tillstånd är det här meddelandet säkert att ignorera. Det betyder bara att du har checkat ut en tagg.
Programmet har följande filstruktur:
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
Katalogerna java, resurser och webapp innehåller källkoden för exempelprogrammet.
I aks-katalogen används distributionsfilen openlibertyapplication.yaml för att distribuera programbilden.
I docker-katalogen placerar vi två Dockerfiles. Dockerfile används för att skapa avbildningar med Open Liberty och Dockerfile-wlp används för att skapa en avbildning med WebSphere Liberty.
I katalogen liberty/config används server.xml-filen för att konfigurera sessionscachen för Open Liberty- och WebSphere Liberty-klustret.
I katalogen redisson används filen redisson-config.yaml för att konfigurera anslutningen för Azure Cache for Redis-instansen.
Använd programmet med en container
Om du vill distribuera och köra ditt Liberty-program i AKS-klustret använder du följande steg för att containerisera ditt program som en Docker-avbildning. Du kan använda Open Liberty-containeravbildningar eller WebSphere Liberty-containeravbildningar.
Kontrollera att den aktuella arbetskatalogen är java-app-jcache i din lokala klon.
Kör
mvn clean package
för att paketera programmet.Kör
mvn -Predisson validate
för att kopiera Redisson-konfigurationsfilen till den angivna platsen. Det här steget infogar värdena för miljövariablernaREDISCACHEHOSTNAME
ochREDISCACHEKEY
i filen redisson-config.yaml , som refereras av filen server.xml .Kör
mvn liberty:dev
för att testa programmet. Om testet lyckas bör du seThe defaultServer server is ready to run a smarter planet.
i kommandoutdata. Du bör se utdata som liknar följande om Redis-anslutningen lyckas.[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
Du kan besöka
http://localhost:9080/
programmet som körs, men beviset på att Redis fungerar är utdata som anges i föregående steg.Använd Ctrl+C för att stoppa programmet.
Använd följande kommandon för att hämta värden för egenskaper
artifactId
ochversion
definieras i filen 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)
Kör
cd target
för att ändra katalogen till versionen av exemplet.Kör något av följande kommandon för att skapa programbilden och skicka den till ACR-instansen.
Använd följande kommando för att skapa med en Open Liberty-basavbildning om du föredrar att använda Open Liberty som en enkel öppen källkod Java-körning™:
# 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 .
Använd följande kommando för att skapa med en WebSphere Liberty-basavbildning om du föredrar att använda en kommersiell version av Open Liberty:
# 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 .
Distribuera programmet
Följ stegen i det här avsnittet för att distribuera det containerbaserade exempelprogrammet i AKS-klustret.
Kontrollera att den aktuella arbetskatalogen är java-app-jcache/target i din lokala klon.
Använd följande kommandon för att skapa en hemlighet med Redisson-konfigurationsinformation. Med den här hemligheten kan programmet ansluta till den skapade Azure Cache for Redis-instansen.
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
Använd följande kommandon för att distribuera ditt Liberty-program med tre repliker till AKS-klustret. Kommandots utdata visas också infogat.
# 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
Vänta tills du ser
3/3
underREADY
kolumnen och3
underAVAILABLE
kolumnen och använd sedan Ctrl +C för att stoppakubectl
klockprocessen.
Testa programmet
När programmet körs exponerar en Kubernetes-lastbalanserartjänst programmets klientdel till Internet. Den här processen kan ta en stund att slutföra.
Du kan övervaka förloppet genom att använda kommandot kubectl get service med argumentet --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
När DEN EXTERNA IP-adressen ändras från väntande till en faktisk offentlig IP-adress använder du Ctrl+C för att stoppa kubectl
klockprocessen.
Öppna en webbläsare till tjänstens externa IP-adress (20.84.16.169
i exemplet ovan) för att se programmets startsida. Om sidan inte läses in korrekt beror det på att appen startas. Du kan vänta en stund och uppdatera sidan senare. Du bör se poddnamnet för dina programrepliker som visas längst upp till vänster på sidan (javaee-cafe-jcache-cluster-77d54bccd4-5xnzx
för det här fallet).
I formuläret Ny kaffe i session anger du värden för fälten Namn och Pris och väljer sedan Skicka. Efter några sekunder ser du Antal skicka: 1 visas längst ned till vänster på sidan.
För att visa att sessionscachen sparas i alla repliker i programmet kör du följande kommando för att ta bort den aktuella repliken med poddnamnet javaee-cafe-jcache-cluster-<pod id from your running app>
:
kubectl delete pod javaee-cafe-jcache-cluster-77d54bccd4-5xnzx
pod "javaee-cafe-jcache-cluster-77d54bccd4-5xnzx" deleted
Uppdatera sedan programmets startsida. Du ser samma data som visas i avsnittet Ny kaffe i session men ett annat poddnamn visas längst upp till vänster på sidan.
Använd slutligen följande steg för att visa att sessionsdata sparas i Azure Cache for Redis-instansen. Du kan utfärda kommandon till din Azure Cache for Redis-instans med hjälp av Redis-konsolen.
Hitta din Azure Cache for Redis-instans från Azure Portal.
Välj Konsol för att öppna Redis-konsolen.
Kör följande kommandon för att visa sessionsdata:
scan 0 count 1000 match '*' hgetall "com.ibm.ws.session.attr.default_host%2F"
Sök efter café.model.entity.Coffee[id=1, name=Coffee 3, price=30.0] från webbsidan, vilket är kaffet du skapade och bevarade i Azure Cache for Redis-instansen.
Rensa resurser
För att undvika Azure-avgifter bör du rensa onödiga resurser. När klustret inte längre behövs använder du kommandot az group delete för att ta bort resursgruppen, containertjänsten, containerregistret och alla relaterade resurser.
az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait
Om du vill ta bort Azure Cache for Redis-instansen letar du reda på resursgruppens namn och kör följande kommando:
az group delete --name <AZURE_CACHE_FOR_REDIS_RESOURCE_GROUP_NAME> --yes --no-wait
Nästa steg
Du kan lära dig mer från referenser som används i den här guiden:
- Konfigurera Liberty-sessionspersistence med JCache
- JCache-stöd för Redisson
- Öppna Liberty Server-konfiguration
Information om alternativ för att köra WebSphere-produkter i Azure finns i Vad är lösningar för att köra WebSphere-serien med produkter i Azure?