Sdílet prostřednictvím


Použití Java EE JCache s Open Liberty nebo WebSphere Liberty v clusteru Azure Kubernetes Service (AKS)

Tento článek popisuje, jak používat Java EE JCache v kontejnerizované aplikaci nasazené do AKS.

V této příručce:

  • Vytvořte infrastrukturu pro spuštění aplikace Java, Java EE, Jakarta EE nebo MicroProfile v modulu runtime Open Liberty nebo WebSphere Liberty.
  • Jako mezipaměť relací použijte Java EE JCache zálohovanou službou Azure Cache for Redis.
  • Sestavte image Dockeru aplikace pomocí imagí kontejneru Open Liberty nebo WebSphere Liberty.
  • Nasaďte kontejnerizovanou aplikaci do clusteru AKS pomocí operátoru Open Liberty.

Tento článek vám pomůže rychle se dostat k nasazení. Než půjdete do produkce, měli byste prozkoumat Tuning Liberty.

Pokud chcete poskytnout zpětnou vazbu nebo úzce spolupracovat na scénářích migrace s technickým týmem, který vyvíjí webSphere v řešeních Azure, vyplňte tento krátký průzkum o migraci WebSphere a uveďte své kontaktní informace. Tým programových manažerů, architektů a inženýrů se s vámi okamžitě spojí a zahájí úzkou spolupráci.

Požadavky

Vytvoření infrastruktury

Kroky v této části vás provedou vytvořením aplikační infrastruktury v Azure. Po dokončení těchto kroků budete mít azure Container Registry, cluster Azure Kubernetes Service a instanci Azure Cache for Redis pro spuštění ukázkové aplikace.

Vytvoření skupiny zdrojů

Skupina prostředků Azure je logická skupina, ve které se nasazují a spravují prostředky Azure.

Vytvořte skupinu prostředků s názvem java-liberty-project pomocí příkazu az group create v umístění eastus . Tato skupina prostředků se použije později k vytvoření instance služby Azure Container Registry (ACR) a clusteru AKS.

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

Vytvoření instance ACR

K vytvoření instance ACR použijte příkaz az acr create. Následující příklad vytvoří instanci ACR s názvem youruniqueacrname. Ujistěte se, že je vašeuniqueacrname v rámci Azure jedinečný.

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

Po krátké době by se měl zobrazit výstup JSON, který obsahuje:

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

Případně můžete vytvořit instanci registru kontejneru Azure pomocí postupu v rychlém startu: Vytvoření registru kontejnerů Azure pomocí webu Azure Portal.

Připojení k instanci ACR

Před nasdílení image do instance služby ACR se budete muset přihlásit k instanci služby ACR. Spuštěním následujících příkazů ověřte připojení:

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

Poznámka:

Použití přihlašovacích údajů uživatelského jména a hesla k udělení přístupu k registru kontejneru se nedoporučuje. Pokud vaše konkrétní požadavky na využití naznačují, že přístup na základě přihlašovacích údajů je nejlepší, můžete získat uživatelské jméno a heslo pomocí az acr credential show a použít tyto hodnoty s docker login.

Pokud jste se k instanci ACR úspěšně přihlásili, měli byste se na konci výstupu příkazu podívat Login Succeeded .

Pokud se zobrazí problém s přihlášením k registru kontejneru Azure, přečtěte si téma Řešení potíží s přihlášením k registru.

Vytvoření clusteru AKS

Pomocí příkazu az aks create vytvořte cluster AKS a udělte mu oprávnění k vyžádání image z instance ACR. Následující příklad vytvoří cluster myAKSCluster s jedním uzlem. Dokončení tohoto příkazu trvá několik minut.

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

Po několika minutách se příkaz dokončí a vrátí informace o clusteru ve formátu JSON, včetně následujících řádků:

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

Připojení ke clusteru AKS

Ke správě clusteru Kubernetes použijete klienta příkazového řádku Kubernetes kubectl. Pokud chcete nainstalovat kubectl místně, použijte příkaz az aks install-cli :

az aks install-cli

Pomocí příkazu az aks get-credentials nakonfigurujte klienta kubectl pro připojení k vašemu clusteru Kubernetes. Tento příkaz stáhne přihlašovací údaje a nakonfiguruje rozhraní příkazového řádku Kubernetes tak, aby je používalo.

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

Pokud chcete ověřit připojení ke clusteru, použijte příkaz kubectl get, který vrátí seznam uzlů clusteru.

kubectl get nodes

Následující příklad výstupu ukazuje jeden uzel vytvořený v předchozích krocích. Ujistěte se, že je stav uzlu připravený.

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

Instalace operátoru Open Liberty

Po vytvoření a připojení ke clusteru nainstalujte operátor Open Liberty Pomocí následujících příkazů.

# 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

Vytvoření instance Azure Cache for Redis

Azure Cache for Redis zálohuje trvalost HttpSession aplikace v Javě spuštěné na serveru Open Liberty nebo WebSphere Liberty. Podle kroků v této části vytvořte instanci Azure Cache for Redis a poznamenejte si její informace o připojení. Tyto informace použijeme později.

  1. Postupujte podle kroků v rychlém startu: Použití služby Azure Cache for Redis v Javě až do jazyka Java , ale nezahrnuje vysvětlení ukázky Javy.

    Poznámka:

    V kroku 6 části Vytvoření služby Azure Cache for Redis vyberte pro možnost Ověřování přístupové klíče. Tato možnost se vyžaduje, aby se ukázková aplikace připojila k instanci Azure Cache for Redis pomocí klientské knihovny Redisson . Další informace najdete v tématu Redisson Configuration .

  2. Zkopírujte název hostitele a primární přístupový klíč pro instanci Azure Cache for Redis a pak spuštěním následujících příkazů přidejte proměnné prostředí:

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

Sestavení aplikace

Podle kroků v této části sestavte a kontejnerizujte ukázkovou aplikaci. Tyto kroky používají Maven liberty-maven-plugina az acr build. Další informace o této liberty-maven-pluginfunkci najdete v tématu Vytvoření webové aplikace pomocí Mavenu.

Podívejte se na aplikaci

Pomocí následujících příkazů naklonujte vzorový kód pro tuto příručku. Ukázka je v úložišti open-liberty-on-aks na GitHubu. V úložišti je několik ukázek. Tento článek používá 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

Pokud se zobrazí zpráva o tom, že je v odpojeném stavu HEAD, je tato zpráva v bezpečí ignorovat. Znamená to, že jste si rezervovali značku.

Aplikace má následující strukturu souborů:

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

Adresáře javy, prostředků a webových aplikací obsahují zdrojový kód ukázkové aplikace.

V adresáři aks se k nasazení image aplikace používá soubor nasazení openlibertyapplication.yaml.

V adresáři Dockeru umístíme dva soubory Dockerfile. Dockerfile se používá k sestavení image s Open Liberty a Dockerfile-wlp se používá k sestavení image pomocí WebSphere Liberty.

V adresáři liberty/config se soubor server.xml používá ke konfiguraci mezipaměti relací pro cluster Open Liberty a WebSphere Liberty.

V adresáři redisson se soubor redisson-config.yaml používá ke konfiguraci připojení instance Azure Cache for Redis.

Kontejnerizace aplikace

Pokud chcete nasadit a spustit aplikaci Liberty v clusteru AKS, pomocí následujících kroků kontejnerizujte aplikaci jako image Dockeru. Můžete použít image kontejnerů Open Liberty nebo image kontejnerů WebSphere Liberty.

  1. Ověřte, že aktuální pracovní adresář je java-app-jcache v místním klonu.

  2. Spusťte mvn clean package balíček aplikace.

  3. Spusťte mvn -Predisson validate kopírování konfiguračního souboru Redisson do zadaného umístění. Tento krok vloží hodnoty proměnných REDISCACHEHOSTNAME prostředí a REDISCACHEKEY do souboru redisson-config.yaml , na který odkazuje soubor server.xml .

  4. Spusťte mvn liberty:dev test aplikace. Pokud je test úspěšný, měl by se zobrazit The defaultServer server is ready to run a smarter planet. ve výstupu příkazu. Pokud je připojení Redis úspěšné, měl by se zobrazit výstup podobný následujícímu.

    [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. Můžete http://localhost:9080/ navštívit spuštěnou aplikaci, ale důkaz o fungování Redisu je výstup uvedený v předchozím kroku.

  6. K zastavení aplikace použijte kombinaci kláves Ctrl+C.

  7. Pomocí následujících příkazů načtěte hodnoty pro vlastnosti artifactId a definované v souboru pom.xmlversion.

    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. Spuštěním příkazu změňte cd target adresář na sestavení ukázky.

  9. Spuštěním jednoho z následujících příkazů sestavte image aplikace a odešlete ji do instance ACR.

    • Pokud chcete použít Open Liberty jako jednoduchý opensourcový modul runtime Java™, použijte následující příkaz:

      # 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 .
      
    • Pokud chcete použít komerční verzi Open Liberty, použijte následující příkaz k sestavení se základní imagí WebSphere 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 .
      

Nasazení aplikace

Podle kroků v této části nasaďte kontejnerizovanou ukázkovou aplikaci v clusteru AKS.

  1. Ověřte, že je aktuální pracovní adresář v místním klonu java-app-jcache/target .

  2. Pomocí následujících příkazů vytvořte tajný kód s informacemi o konfiguraci Redisson. S tímto tajným kódem se aplikace může připojit k vytvořené instanci Azure Cache for Redis.

    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. Pomocí následujících příkazů nasaďte aplikaci Liberty se třemi replikami do clusteru AKS. Výstup příkazu se také zobrazí jako vložený.

    # 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. Počkejte, až se pod sloupcem a 3 pod AVAILABLE sloupcem zobrazí 3/3 READY, a pak pomocí Ctrl+C proces kukátku kubectl zastavíte.

Testování aplikace

Když se aplikace spustí, služba nástroje pro vyrovnávání zatížení Kubernetes zveřejní front-end aplikace na internetu. Dokončení tohoto procesu může chvíli trvat.

Pomocí příkazu kubectl get service s argumentem --watch můžete sledovat průběh.

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

Jakmile se externí IP adresa změní z čekání na skutečnou kubectl veřejnou IP adresu, zastavte proces sledování pomocí ctrl+C.

Otevřete webový prohlížeč s externí IP adresou vaší služby (20.84.16.169 pro výše uvedený příklad) a zobrazte domovskou stránku aplikace. Pokud se stránka nenačte správně, je to proto, že se aplikace spouští. Chvíli můžete počkat a stránku aktualizovat později. V levém horním rohu stránky by se měl zobrazit název podu replik aplikace (javaee-cafe-jcache-cluster-77d54bccd4-5xnzx v tomto případě).

Snímek obrazovky aplikace Java liberty úspěšně nasazené v A K S

Ve formuláři Nová káva v relaci nastavte hodnoty polí Název a Cena a pak vyberte Odeslat. Po několika sekundách uvidíte počet odeslání: 1 se zobrazí v levém dolním rohu stránky.

Snímek obrazovky ukázkové aplikace zobrazující novou kávu vytvořenou a trvalou v relaci aplikace

Pokud chcete předvést, že mezipaměť relace je trvalá ve všech replikách aplikace, spuštěním následujícího příkazu odstraňte aktuální repliku s názvem javaee-cafe-jcache-cluster-<pod id from your running app>podu:

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

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

Potom aktualizujte domovskou stránku aplikace. Stejná data se zobrazí v části Nová káva v relaci , ale v levém horním rohu stránky se zobrazí jiný název podu.

Nakonec pomocí následujících kroků předveďte, že data relace se uchovávají v instanci Azure Cache for Redis. Příkazy pro instanci Azure Cache for Redis můžete vydávat pomocí konzoly Redis.

  1. Najděte instanci Azure Cache for Redis na webu Azure Portal.

  2. Výběrem konzoly Konzola otevřete konzolu Redis.

  3. Spuštěním následujících příkazů zobrazte data relace:

    scan 0 count 1000 match '*'
    
    hgetall "com.ibm.ws.session.attr.default_host%2F"
    
  4. Na webové stránce vyhledejte café.model.entity.Coffee[id=1, name=Coffee 3, price=30.0] z webové stránky, což je káva, kterou jste vytvořili a zachovali v instanci Azure Cache for Redis.

Vyčištění prostředků

Abyste se vyhnuli poplatkům za Azure, měli byste vyčistit nepotřebné prostředky. Pokud už cluster nepotřebujete, pomocí příkazu az group delete odeberte skupinu prostředků, službu kontejneru, registr kontejneru a všechny související prostředky.

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

Pokud chcete odstranit instanci Azure Cache for Redis, vyhledejte její název skupiny prostředků a spusťte následující příkaz:

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

Další kroky

Další informace najdete v referencích použitých v tomto průvodci:

Pokud chcete prozkoumat možnosti spouštění produktů WebSphere v Azure, přečtěte si téma Co jsou řešení pro spuštění řady produktů WebSphere v Azure?