Ruční nasazení aplikace v Javě pomocí Open Liberty nebo WebSphere Liberty v clusteru Azure Kubernetes Service

Tento článek vysvětluje následující postupy:

  • Spusťte svoji aplikaci Java, Java EE, Jakarta EE nebo MicroProfile v modulu runtime Open Liberty nebo WebSphere Liberty.
  • Sestavte image Dockeru aplikace pomocí imagí kontejneru Liberty.
  • Nasaďte kontejnerizovanou aplikaci do clusteru Azure Kubernetes Service (AKS) pomocí operátoru Liberty.

Operátor Liberty zjednodušuje nasazení a správu aplikací spuštěných v clusterech Kubernetes. Pomocí operátoru Open Liberty nebo WebSphere Liberty Operator můžete také provádět pokročilejší operace, jako je shromažďování trasování a výpisů.

Další informace o open liberty naleznete na stránce projektu Open Liberty. Další informace o IBM WebSphere Liberty naleznete na stránce produktu WebSphere Liberty.

Tento článek obsahuje podrobné pokyny k ručnímu spuštění Open/WebSphere Liberty v Azure. Automatizovanější řešení, které urychlí vaši cestu ke službě AKS, najdete v tématu Nasazení aplikace v Javě s platformou Open Liberty/WebSphere Liberty v clusteru Azure Kubernetes Service (AKS).

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

Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet před tím, než začnete.

Požadavky

Poznámka:

Příkazy v tomto článku můžete spustit také z Azure Cloud Shellu. Tento přístup má předinstalované všechny požadované nástroje s výjimkou Dockeru.

Přihlášení k Azure

Pokud jste to ještě neudělali, přihlaste se ke svému předplatnému Azure pomocí příkazu az login a postupujte podle pokynů na obrazovce.

az login

Poznámka:

Většinu příkazů Azure CLI můžete spustit v PowerShellu stejně jako v Bash. Rozdíl existuje pouze při použití proměnných. V následujících částech se rozdíl bude v případě potřeby řešit na různých kartách.

Pokud máte k přihlašovacím údajům Azure přidružených více tenantů Azure, musíte určit, ke kterému tenantovi se chcete přihlásit. Můžete to udělat pomocí --tenant této možnosti. Například az login --tenant contoso.onmicrosoft.com.

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 \
    --admin-enabled

Po krátké době by se měl zobrazit výstup JSON, který obsahuje následující řádky:

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

Připojení k instanci služby ACR

Před nasdílení image do instance služby ACR se musíte 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 \
    --query 'loginServer' \
    --output tsv)
export USER_NAME=$(az acr credential show \
    --name $REGISTRY_NAME \
    --query 'username' \
    --output tsv)
export PASSWORD=$(az acr credential show \
    --name $REGISTRY_NAME \
    --query 'passwords[0].value' \
    --output tsv)

docker login $LOGIN_SERVER -u $USER_NAME -p $PASSWORD

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

Vytvoření clusteru AKS

Pomocí příkazu az aks create vytvořte cluster AKS. 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

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

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

Připojení do 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 , jak je znázorněno v následujícím příkladu:

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 \
    --admin

Poznámka:

Výše uvedený příkaz používá výchozí umístění pro konfigurační soubor Kubernetes, což je ~/.kube/config. Můžete zadat jiné umístění konfiguračního souboru Kubernetes pomocí --file.

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

Vytvoření databáze Azure SQL Database

V této části vytvoříte jednoúčelovou databázi Azure SQL Database pro použití s vaší aplikací.

V Azure SQL Database vytvořte jednu databázi pomocí kroků Azure CLI nebo PowerShellu v rychlém startu: Vytvoření izolované databáze Azure SQL Database. Při procházení článku použijte následující pokyny a po vytvoření a konfiguraci databázového serveru se vraťte k tomuto dokumentu.

  1. Když se dostanete do části Nastavení hodnot parametrů rychlého startu, zapište všechny proměnné v příkladu kódu označeném Variable block, včetně location, ,databaseresourceGroup , , loginserver, a password. Tento článek odkazuje na databázi resourceGroup jako <db-resource-group>.

  2. Po vytvoření databázového serveru přejděte na nově vytvořený server na webu Azure Portal. V podokně Sítě na kartě Připojení ivity nastavte minimální verzi protokolu TLS na TLS 1.0.

    Snímek obrazovky konfigurace sítě SQL Database TLS 1.0

  3. V podokně Sítě na kartě Veřejný přístup vyberte Povolit službám a prostředkům Azure přístup k tomuto serveru.

    Snímek obrazovky s pravidly brány firewall – Povolení přístupu k prostředkům Azure

  4. Pokud chcete aplikaci otestovat místně, ujistěte se, že adresa IPv4 klienta je v seznamu povolených pravidel brány firewall.

    Snímek obrazovky s pravidly brány firewall – Povolit klientský přístup

  5. Uložte změny sítě.

  6. Pomocí následujícího příkazu vytvořte proměnnou prostředí pro název skupiny prostředků pro databázi:

    export DB_RESOURCE_GROUP_NAME=<db-resource-group>
    

Teď, když jste vytvořili databázi a cluster AKS, můžete AKS připravit na hostování Liberty.

Instalace operátoru Open Liberty

Po vytvoření a připojení ke clusteru nainstalujte operátor Open Liberty Operator.

Spuštěním následujících příkazů nainstalujte operátor Open Liberty:

# 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.2.2
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

Konfigurace a sestavení image aplikace

Pokud chcete nasadit a spustit aplikaci Liberty v clusteru AKS, kontejnerizujte aplikaci jako image Dockeru pomocí imagí kontejnerů Open Liberty nebo imagí kontejnerů WebSphere Liberty.

Podle kroků v této části nasaďte ukázkovou aplikaci do modulu runtime Liberty. Tyto kroky používají Maven.

Podívejte se na aplikaci

Naklonujte vzorový kód pro tuto příručku. Ukázka je na GitHubu. V úložišti je několik ukázek. Tento článek používá java-app. Tady je struktura souborů aplikace.

git clone https://github.com/Azure-Samples/open-liberty-on-aks.git
cd open-liberty-on-aks
git checkout 20230830

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

java-app
├─ src/main/
│  ├─ aks/
│  │  ├─ db-secret.yaml
│  │  ├─ openlibertyapplication.yaml
│  ├─ docker/
│  │  ├─ Dockerfile
│  │  ├─ Dockerfile-wlp
│  ├─ liberty/config/
│  │  ├─ server.xml
│  ├─ java/
│  ├─ resources/
│  ├─ webapp/
├─ pom.xml

Adresáře java, resources a webová aplikace obsahují zdrojový kód ukázkové aplikace. Kód deklaruje a používá zdroj dat s názvem jdbc/JavaEECafeDB.

V adresáři aks jsou dva soubory nasazení. db-secret.xml slouží k vytvoření tajných kódů Kubernetes s přihlašovacími údaji pro připojení k databázi. Soubor openlibertyapplication.yaml se používá k nasazení image aplikace. V adresáři dockeru existují dva soubory pro vytvoření image aplikace s open Liberty nebo WebSphere Liberty.

V adresáři liberty/config se server.xml používá ke konfiguraci připojení databáze pro cluster Open Liberty a WebSphere Liberty.

Sestavení projektu

Teď, když jste shromáždili potřebné vlastnosti, můžete aplikaci sestavit. Soubor POM pro projekt čte mnoho proměnných z prostředí. V rámci sestavení Maven se tyto proměnné používají k naplnění hodnot v souborech YAML umístěných v souborech src/main/aks. Pokud chcete, můžete pro svou aplikaci udělat něco podobného mimo Maven.

cd <path-to-your-repo>/java-app

# The following variables will be used for deployment file generation into target/
export LOGIN_SERVER=${LOGIN_SERVER}
export REGISTRY_NAME=${REGISTRY_NAME}
export USER_NAME=${USER_NAME}
export PASSWORD=${PASSWORD}
export DB_SERVER_NAME=<Server name>.database.windows.net
export DB_NAME=<Database name>
export DB_USER=<Server admin login>@<Server name>
export DB_PASSWORD=<Server admin password>

mvn clean install

(Volitelné) Místní testování projektu

Projekt teď můžete spustit a otestovat místně před nasazením do Azure. Pro usnadnění použití .liberty-maven-plugin Další informace o této liberty-maven-pluginfunkci najdete v tématu Vytvoření webové aplikace pomocí Mavenu. Pro vaši aplikaci můžete udělat něco podobného pomocí jakéhokoli jiného mechanismu, jako je místní integrované vývojové prostředí (IDE). Můžete také zvážit použití liberty:devc možnosti určené pro vývoj s kontejnery. Další liberty:devc informace si můžete přečíst v dokumentech o Liberty.

Poznámka:

Pokud jste vybrali nasazení bezserverové databáze, ověřte, že databáze SQL nezašla do režimu pozastavení. Jedním ze způsobů, jak to udělat, je přihlásit se k editoru databázových dotazů, jak je popsáno v rychlém startu: K dotazování služby Azure SQL Database použijte editor dotazů na webu Azure Portal (Preview).

  1. Spusťte aplikaci pomocí liberty:run. liberty:run používá proměnné prostředí definované v předchozím kroku.

    cd <path-to-your-repo>/java-app
    mvn liberty:run
    
  2. Ověřte, že aplikace funguje podle očekávání. V případě úspěchu by se měla zobrazit zpráva podobná [INFO] [AUDIT] CWWKZ0003I: The application javaee-cafe updated in 1.930 seconds. výstupu příkazu. http://localhost:9080/ Přejděte v prohlížeči a ověřte, že je aplikace přístupná a všechny funkce fungují.

  3. Stisknutím kláves Ctrl+C zastavte.

Sestavení image pro nasazení AKS

Teď můžete spustit docker buildx build příkaz pro sestavení image, jak je znázorněno v následujícím příkladu:

cd <path-to-your-repo>/java-app/target

# If you are running with Open Liberty
docker buildx --platform linux/amd64 build -t javaee-cafe:v1 --pull --file=Dockerfile .

# If you are running with WebSphere Liberty
docker buildx --platform linux/amd64 build -t javaee-cafe:v1 --pull --file=Dockerfile-wlp .

(Volitelné) Místní testování image Dockeru

Teď můžete pomocí následujících kroků otestovat image Dockeru místně před nasazením do Azure.

  1. Spusťte image pomocí následujícího příkazu. Tento příkaz používá dříve definované proměnné prostředí.

    docker run -it --rm -p 9080:9080 \
        -e DB_SERVER_NAME=${DB_SERVER_NAME} \
        -e DB_NAME=${DB_NAME} \
        -e DB_USER=${DB_USER} \
        -e DB_PASSWORD=${DB_PASSWORD} \
        javaee-cafe:v1
    
  2. Po spuštění kontejneru přejděte v http://localhost:9080/ prohlížeči a získejte přístup k aplikaci.

  3. Stisknutím kláves Ctrl+C zastavte.

Odeslat image do služby ACR

Potom nahrajte sestavenou image do služby ACR, kterou jste vytvořili v předchozích krocích.

Pokud jste to ještě neudělali, přihlaste se k registru kontejneru pomocí následujícího příkazu:

docker login -u ${USER_NAME} -p ${PASSWORD} ${LOGIN_SERVER}

K označení a nasdílení image kontejneru použijte následující příkazy:

docker tag javaee-cafe:v1 ${LOGIN_SERVER}/javaee-cafe:v1
docker push ${LOGIN_SERVER}/javaee-cafe:v1

Nasazení aplikace do clusteru AKS

Pomocí následujících kroků nasaďte aplikaci Liberty v clusteru AKS:

  1. Připojte instanci ACR ke clusteru AKS, aby se cluster AKS ověřil pro vyžádání image z instance ACR, jak je znázorněno v následujícím příkladu:

    az aks update \
        --resource-group $RESOURCE_GROUP_NAME \
        --name $CLUSTER_NAME \
        --attach-acr $REGISTRY_NAME
    
  2. Pomocí následujících příkazů použijte tajný klíč a soubor nasazení databáze:

    cd <path-to-your-repo>/java-app/target
    
    # Apply DB secret
    kubectl apply -f db-secret.yaml
    
    # Apply deployment file
    kubectl apply -f openlibertyapplication.yaml
    
  3. Spuštěním následujícího příkazu určete, jestli OpenLibertyApplication je instance vytvořená:

    kubectl get openlibertyapplication javaee-cafe-cluster
    

    Měl by se zobrazit výstup podobný následujícímu příkladu:

    NAME                        IMAGE                                                   EXPOSED   RECONCILED   AGE
    javaee-cafe-cluster         youruniqueacrname.azurecr.io/javaee-cafe:1.0.25         True         59s
    
  4. Spuštěním následujícího příkazu určete, jestli je nasazení vytvořené operátorem připravené:

    kubectl get deployment javaee-cafe-cluster --watch
    

    Měl by se zobrazit výstup podobný následujícímu příkladu:

    NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
    javaee-cafe-cluster         0/3     3            0           20s
    
  5. Počkejte, až se pod sloupcem a pod sloupcem zobrazí 3/3READY, a pak pomocí ctrl+C proces kukátku kubectl zastavte.AVAILABLE3

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 monitorovat průběh, použijte příkaz kubectl get service s argumentem --watch , jak je znázorněno v následujícím příkladu:

kubectl get service javaee-cafe-cluster --watch

Měl by se zobrazit výstup podobný následujícímu příkladu:

NAME                        TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)          AGE
javaee-cafe-cluster         LoadBalancer   10.0.251.169   52.152.189.57   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.

Pokud mezi provedením kroků v této části a předchozími kroky uplynul nějaký čas, ujistěte se, že je databáze v případě potřeby aktivní. Viz předchozí poznámka týkající se pozastavení databáze.

Otevřete webový prohlížeč s externí IP adresou vaší služby (52.152.189.57 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. Počkejte několik minut a aktualizujte stránku, aby se zobrazil jiný název podu kvůli vyrovnávání zatížení poskytovanému clusterem AKS.

Aplikace Java liberty byla úspěšně nasazena v AKS.

Poznámka:

V současné době aplikace nepoužívá protokol HTTPS. Doporučujeme povolit protokol TLS s vlastními certifikáty. Další informace najdete v tématu Použití protokolu TLS s kontrolerem příchozího přenosu dat ve službě Azure Kubernetes Service (AKS).

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, databázi a všechny související prostředky.

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

Další kroky

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