Dela via


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 eller Contributor roller User 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.

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

  2. 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-pluginSkapa 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.

  1. Kontrollera att den aktuella arbetskatalogen är java-app-jcache i din lokala klon.

  2. Kör mvn clean package för att paketera programmet.

  3. 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övariablerna REDISCACHEHOSTNAME och REDISCACHEKEY i filen redisson-config.yaml , som refereras av filen server.xml .

  4. Kör mvn liberty:dev för att testa programmet. Om testet lyckas bör du se The 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
    
  5. 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.

  6. Använd Ctrl+C för att stoppa programmet.

  7. Använd följande kommandon för att hämta värden för egenskaper artifactId och version 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)
    
  8. Kör cd target för att ändra katalogen till versionen av exemplet.

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

  1. Kontrollera att den aktuella arbetskatalogen är java-app-jcache/target i din lokala klon.

  2. 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
    
  3. 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
    
  4. Vänta tills du ser 3/3 under READY kolumnen och 3 under AVAILABLE kolumnen och använd sedan Ctrl +C för att stoppa kubectl 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).

Skärmbild av Java Liberty-programmet som har distribuerats på A K S.

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.

Skärmbild av exempelprogrammet som visar nytt kaffe som skapats och sparats i programmets session.

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.

  1. Hitta din Azure Cache for Redis-instans från Azure Portal.

  2. Välj Konsol för att öppna Redis-konsolen.

  3. Kör följande kommandon för att visa sessionsdata:

    scan 0 count 1000 match '*'
    
    hgetall "com.ibm.ws.session.attr.default_host%2F"
    
  4. 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:

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?