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
- Předplatné Azure. Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet před tím, než začnete.
- Připravte místní počítač s nainstalovaným operačním systémem Unix , například Ubuntu, macOS nebo Subsystém Windows pro Linux.
- Nainstalujte Azure CLI a spusťte příkazy Azure CLI.
- Přihlaste se pomocí Azure CLI pomocí příkazu
az login
. Pokud chcete dokončit proces ověřování, postupujte podle kroků zobrazených na terminálu. Další možnosti přihlášení najdete v tématu Přihlášení k Azure pomocí Azure CLI . - Po zobrazení výzvy nainstalujte rozšíření Azure CLI při prvním použití. Další informace o rozšířeních najdete v tématu Použití a správa rozšíření pomocí Azure CLI.
- Spuštěním
az version
vyhledejte nainstalované verze a závislé knihovny. Pokud chcete upgradovat na nejnovější verzi, spusťteaz upgrade
.
- Přihlaste se pomocí Azure CLI pomocí příkazu
- Nainstalujte implementaci Java SE verze 17 nebo novější – například sestavení OpenJDK od Microsoftu.
- Nainstalujte Maven 3.5.0 nebo novější.
- Nainstalujte Docker pro váš operační systém.
- Ujistěte se, že je nainstalovaný Git .
- Ujistěte se, že máte přiřazenou
Owner
roli neboContributor
User Access Administrator
role předplatného. Přiřazení můžete ověřit pomocí kroků v části Výpis přiřazení rolí pro uživatele nebo skupinu.
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ů máte 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
. Zkontrolujte, že youruniqueacrname
je jedinečný v rámci Azure.
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
Než můžete nahrát obraz do instance služby ACR, musíte se přihlásit k této instanci. 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 vidět Login Succeeded
na konci výstupu příkazu.
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 s názvem 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
Ke konfiguraci kubectl
pro připojení ke clusteru Kubernetes použijte příkaz az aks get-credentials
. 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 Ready
.
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.
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 7 sekce Vytvoření Azure Cache for Redisvyberte Ověřování pomocí přístupových klíčů pro možnost Ověřování v podokně Pokročilé tohoto průvodce. Pro zajištění optimálního zabezpečení doporučujeme použít MICROSOFT Entra ID se spravovanými identitami k autorizaci požadavků v mezipaměti, pokud je to možné. Autorizace pomocí Microsoft Entra ID a spravovaných identit poskytuje vynikající zabezpečení a snadné použití prostřednictvím autorizace sdíleného přístupového klíče. Další informace o používání spravovaných identit s mezipamětí najdete v tématu Použití Id Microsoft Entra pro ověřování mezipaměti.
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-plugin
a az acr build
. Další informace o této liberty-maven-plugin
funkci 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 stavu detached HEAD
, je bezpečné tuto zprávu ignorovat. Jen to znamená, že jste si prohlédli 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.
Ověřte, že aktuální pracovní adresář je java-app-jcache v místním klonu.
Spusťte
mvn clean package
balíček aplikace.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ýchREDISCACHEHOSTNAME
prostředí aREDISCACHEKEY
do souboru redisson-config.yaml , na který odkazuje soubor server.xml .Spusťte
mvn liberty:dev
test aplikace. Pokud je test úspěšný, měl by se zobrazitThe 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
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.K zastavení aplikace použijte Ctrl+C.
Pomocí následujících příkazů načtěte hodnoty vlastností
artifactId
aversion
definovaných v souboru 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)
Spuštěním příkazu změňte
cd target
adresář na sestavení ukázky.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.
Ověřte, že je aktuální pracovní adresář v místním klonu java-app-jcache/target .
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
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
Počkejte, až se pod sloupcem a
3
podAVAILABLE
sloupcem zobrazí3/3
READY
, a pak pomocí Ctrl+C proces kukátkukubectl
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.
Pokud chcete sledovat průběh, použijte příkaz kubectl get service
s argumentem --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
Jakmile se adresa EXTERNAL-IP
změní z pending
na skutečnou veřejnou IP adresu, pomocí klávesy Ctrl+C zastavte proces sledování kubectl
.
Otevřete webový prohlížeč na externí IP adresu vaší služby (20.84.16.169
pro předchozí příklad) a podívejte se na 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 této stránky by se měl zobrazit název podu vaší aplikace a jejích replik (javaee-cafe-jcache-cluster-77d54bccd4-5xnzx pro tento 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.
Najděte instanci Azure Cache for Redis na webu Azure Portal.
Výběrem konzoly Konzola otevřete konzolu Redis.
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"
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 kontejnerů 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:
- Konfigurace trvalosti relace Liberty pomocí JCache
- Podpora JCache pro Redisson
- Otevření konfigurace serveru Liberty
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?