Udostępnij za pośrednictwem


Ręczne wdrażanie aplikacji Java przy użyciu biblioteki Open Liberty lub WebSphere Liberty w klastrze usługi Azure Kubernetes Service (AKS)

Ten artykuł zawiera szczegółowe wskazówki dotyczące uruchamiania oprogramowania Open/WebSphere Liberty na platformie Azure.

W szczególności w tym artykule wyjaśniono, jak wykonać następujące zadania:

  • Uruchom aplikację Java, Java EE, Jakarta EE lub MicroProfile w środowisku uruchomieniowym Open Liberty lub WebSphere Liberty.
  • Skompiluj obraz platformy Docker aplikacji przy użyciu obrazów kontenera Liberty.
  • Wdróż konteneryzowaną aplikację w klastrze usługi Azure Kubernetes Service (AKS) przy użyciu operatora Liberty.

Operator Liberty upraszcza wdrażanie aplikacji działających w klastrach Kubernetes i zarządzanie nimi. Za pomocą operatora Open Liberty lub Operatora WebSphere Liberty można również wykonywać bardziej zaawansowane operacje, takie jak zbieranie śladów i zrzutów.

Aby uzyskać bardziej zautomatyzowane rozwiązanie przyspieszające podróż do usługi AKS, zobacz Deploy a Java application with Open Liberty/WebSphere Liberty on an Azure Kubernetes Service (AKS) cluster (Wdrażanie aplikacji Java przy użyciu biblioteki Open Liberty/WebSphere Liberty w klastrze usługi Azure Kubernetes Service (AKS).

Aby uzyskać więcej informacji na temat open liberty, zobacz stronę projektu Open Liberty. Aby uzyskać więcej informacji na temat ibm WebSphere Liberty, zobacz stronę produktu WebSphere Liberty.

Ten artykuł ma pomóc w szybkim rozpoczęciu wdrażania. Przed przejściem do środowiska produkcyjnego należy zapoznać się z tematem Tuning Liberty.

Jeśli chcesz przekazać opinię lub ściśle pracować nad scenariuszami migracji z zespołem inżynierów opracowującym rozwiązanie WebSphere na platformie Azure, wypełnij tę krótką ankietę dotyczącą migracji webSphere i dołącz informacje kontaktowe. Zespół menedżerów programów, architektów i inżynierów natychmiast skontaktuje się z Tobą w celu zainicjowania ścisłej współpracy.

Wymagania wstępne

Logowanie się do platformy Azure

Jeśli jeszcze tego nie zrobiono, zaloguj się do subskrypcji platformy Azure przy użyciu polecenia az login i postępuj zgodnie z instrukcjami wyświetlanymi na ekranie.

az login

Uwaga

Większość poleceń interfejsu wiersza polecenia platformy Azure można uruchamiać w programie PowerShell tak samo jak w powłoce Bash. Różnica istnieje tylko w przypadku używania zmiennych. W poniższych sekcjach różnica jest rozwiązywana na różnych kartach w razie potrzeby.

Jeśli masz wiele dzierżaw platformy Azure skojarzonych z poświadczeniami platformy Azure, musisz określić dzierżawę, do której chcesz się zalogować. Możesz to zrobić za --tenant pomocą opcji . Na przykład az login --tenant contoso.onmicrosoft.com.

Tworzenie grupy zasobów

Grupa zasobów platformy Azure to logiczna grupa przeznaczona do wdrażania zasobów platformy Azure i zarządzania nimi.

Utwórz grupę zasobów o nazwie java-liberty-project przy użyciu polecenia az group create w lokalizacji eastus . Ta grupa zasobów jest używana później do tworzenia wystąpienia usługi Azure Container Registry (ACR) i klastra usługi AKS.

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

Tworzenie wystąpienia usługi ACR

Użyj polecenia az acr create, aby utworzyć wystąpienie usługi ACR. Poniższy przykład tworzy wystąpienie usługi ACR o nazwie youruniqueacrname. Upewnij się, że nazwa youruniqueacrname jest unikatowa na platformie Azure.

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

Po krótkim czasie powinny zostać wyświetlone dane wyjściowe JSON zawierające następujące wiersze:

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

Nawiązywanie połączenia z wystąpieniem usługi ACR

Musisz zalogować się do wystąpienia usługi ACR, zanim będzie można wypchnąć do niego obraz. Użyj następujących poleceń, aby zweryfikować połączenie:

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

Jeśli pomyślnie zalogowano się do wystąpienia usługi ACR, na końcu danych wyjściowych polecenia powinny Login Succeeded zostać wyświetlone dane wyjściowe.

Tworzenie klastra AKS

Utwórz klaster AKS za pomocą polecenia az aks create. W poniższym przykładzie pokazano tworzenie klastra o nazwie myAKSCluster z jednym węzłem. Wykonanie tego polecenia trwa kilka 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 kilku minutach polecenie zostanie zakończone i zwróci informacje w formacie JSON dotyczące klastra, w tym następujące dane wyjściowe:

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

Nawiązywanie połączenia z klastrem usługi AKS

Aby zarządzać klastrem Kubernetes, należy użyć klienta wiersza polecenia usługi Kubernetes — narzędzia kubectl. Aby zainstalować kubectl lokalnie, użyj polecenia az aks install-cli , jak pokazano w poniższym przykładzie:

az aks install-cli

Aby skonfigurować narzędzie kubectl w celu nawiązania połączenia z klastrem Kubernetes, użyj polecenia az aks get-credentials. To polecenie powoduje pobranie poświadczeń i zastosowanie ich w konfiguracji interfejsu wiersza polecenia Kubernetes.

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

Uwaga

Powyższe polecenie używa domyślnej lokalizacji pliku konfiguracji kubernetes, czyli ~/.kube/config. Możesz określić inną lokalizację pliku konfiguracji platformy Kubernetes przy użyciu polecenia --file.

Aby sprawdzić połączenie z klastrem, użyj polecenia kubectl get, aby powrócić do listy węzłów klastra.

kubectl get nodes

Poniższe przykładowe dane wyjściowe zawierają jeden węzeł utworzony w poprzednich krokach. Upewnij się, że stan węzła to Gotowy:

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

Tworzenie bazy danych SQL platformy Azure

W tej sekcji utworzysz pojedynczą bazę danych usługi Azure SQL Database do użycia z aplikacją.

Utwórz pojedynczą bazę danych w usłudze Azure SQL Database, wykonując kroki interfejsu wiersza polecenia platformy Azure lub programu PowerShell w przewodniku Szybki start: tworzenie pojedynczej bazy danych usługi Azure SQL Database. Skorzystaj z poniższych wskazówek, przechodząc przez ten artykuł, a następnie wróć do tego dokumentu po utworzeniu i skonfigurowaniu serwera bazy danych.

  1. Po osiągnięciu sekcji Ustawianie wartości parametrów w przewodniku Szybki start skopiuj i zapisz wartości wszystkich zmiennych w przykładzie kodu oznaczonym Variable blocketykietą , w tym location, , resourceGroupdatabaseserver, , logini password. Ten artykuł odnosi się do bazy danych resourceGroup jako <db-resource-group>.

  2. Po utworzeniu serwera bazy danych przejdź do nowo utworzonego serwera w witrynie Azure Portal. W okienku Sieć na karcie Łączność ustaw minimalną wersję protokołu TLS na TLS 1.0.

    Zrzut ekranu przedstawiający konfigurowanie sieci usługi SQL Database TLS 1.0.

  3. W okienku Sieć na karcie Dostęp publiczny wybierz pozycję Zezwalaj usługom i zasobom platformy Azure na dostęp do tego serwera.

    Zrzut ekranu przedstawiający reguły zapory — zezwalaj na dostęp do zasobów platformy Azure.

  4. Jeśli chcesz przetestować aplikację lokalnie, upewnij się, że adres IPv4 klienta znajduje się na liście dozwolonych reguł zapory

    Zrzut ekranu przedstawiający reguły zapory — zezwalaj na dostęp klienta.

  5. Zapisz zmiany sieci.

  6. Użyj następującego polecenia, aby utworzyć zmienną środowiskową dla nazwy grupy zasobów dla bazy danych:

    export DB_RESOURCE_GROUP_NAME=<db-resource-group>
    

Po utworzeniu bazy danych i klastra usługi AKS możesz przygotować usługę AKS do hostowania usługi Liberty.

Instalowanie operatora Open Liberty

Po utworzeniu i nawiązaniu połączenia z klastrem zainstaluj operator Open Liberty.

Zainstaluj operator Open Liberty, uruchamiając następujące polecenia:

# 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

Konfigurowanie i kompilowanie obrazu aplikacji

Aby wdrożyć i uruchomić aplikację Liberty w klastrze usługi AKS, konteneryzuj aplikację jako obraz platformy Docker przy użyciu obrazów kontenerów Open Liberty lub obrazów kontenerów WebSphere Liberty.

Wykonaj kroki opisane w tej sekcji, aby wdrożyć przykładową aplikację w środowisku uruchomieniowym Liberty. W tych krokach użyto narzędzia Maven.

Wyewidencjonowywanie aplikacji

Sklonuj przykładowy kod dla tego przewodnika. Przykład znajduje się w witrynie GitHub. W repozytorium znajduje się kilka przykładów. W tym artykule użyto języka java-app. Oto struktura plików aplikacji.

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

Jeśli zostanie wyświetlony komunikat o stanie "odłączony HEAD", ten komunikat jest bezpieczny do zignorowania. Oznacza to po prostu wyewidencjonowanie tagu.

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

Katalogi java, zasoby i aplikacja internetowa zawierają kod źródłowy przykładowej aplikacji. Kod deklaruje i używa źródła danych o nazwie jdbc/JavaEECafeDB.

W katalogu aks znajdują się dwa pliki wdrożenia. db-secret.xml służy do tworzenia wpisów tajnych kubernetes z poświadczeniami połączenia bazy danych. Plik openlibertyapplication.yaml służy do wdrażania obrazu aplikacji. W katalogu platformy Docker istnieją dwa pliki do utworzenia obrazu aplikacji za pomocą polecenia Open Liberty lub WebSphere Liberty.

W katalogu liberty/config server.xml służy do konfigurowania połączenia bazy danych dla klastra Open Liberty i WebSphere Liberty.

Kompilowanie projektu

Po zebraniu niezbędnych właściwości możesz skompilować aplikację. Plik POM dla projektu odczytuje wiele zmiennych ze środowiska. W ramach kompilacji narzędzia Maven te zmienne są używane do wypełniania wartości w plikach YAML znajdujących się w pliku src/main/aks. Jeśli wolisz, możesz zrobić coś podobnego dla aplikacji spoza narzędzia Maven.

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

# The following variables are 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

(Opcjonalnie) Testowanie projektu lokalnie

Teraz możesz uruchomić i przetestować projekt lokalnie przed wdrożeniem na platformie Azure. Dla wygody użyj .liberty-maven-plugin Aby dowiedzieć się więcej na temat programu liberty-maven-plugin, zobacz Tworzenie aplikacji internetowej za pomocą narzędzia Maven. W przypadku aplikacji możesz zrobić coś podobnego przy użyciu dowolnego innego mechanizmu, takiego jak lokalne środowisko IDE. Możesz również rozważyć użycie opcji przeznaczonej liberty:devc do programowania z kontenerami. Więcej liberty:devc informacji można przeczytać w dokumentacji Liberty.

Uwaga

Jeśli wybrano wdrożenie bazy danych "bezserwerowe", sprawdź, czy baza danych SQL nie została wprowadzona w trybie wstrzymania. Jednym ze sposobów wykonania tej czynności jest zalogowanie się do edytora zapytań bazy danych zgodnie z opisem w przewodniku Szybki start: używanie edytora zapytań witryny Azure Portal (wersja zapoznawcza) do wykonywania zapytań w usłudze Azure SQL Database.

  1. Uruchom aplikację przy użyciu polecenia liberty:run. liberty:run używa zmiennych środowiskowych zdefiniowanych w poprzednim kroku.

    cd <path-to-your-repo>/java-app
    mvn liberty:run
    
  2. Sprawdź, czy aplikacja działa zgodnie z oczekiwaniami. W przypadku powodzenia powinien zostać wyświetlony komunikat podobny do [INFO] [AUDIT] CWWKZ0003I: The application javaee-cafe updated in 1.930 seconds. w danych wyjściowych polecenia. Przejdź do http://localhost:9080/ witryny w przeglądarce, aby sprawdzić, czy aplikacja jest dostępna, a wszystkie funkcje działają.

  3. Naciśnij Ctrl+C, aby zatrzymać.

Kompilowanie obrazu dla wdrożenia usługi AKS

Teraz możesz uruchomić docker buildx build polecenie , aby skompilować obraz, jak pokazano w poniższym przykładzie:

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 .

(Opcjonalnie) Testowanie obrazu platformy Docker lokalnie

Teraz możesz użyć poniższych kroków, aby przetestować obraz platformy Docker lokalnie przed wdrożeniem na platformie Azure.

  1. Uruchom obraz przy użyciu następującego polecenia. To polecenie używa wcześniej zdefiniowanych zmiennych środowiskowych.

    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 uruchomieniu kontenera przejdź do http://localhost:9080/ witryny w przeglądarce, aby uzyskać dostęp do aplikacji.

  3. Naciśnij Ctrl+C, aby zatrzymać.

Przekazywanie obrazu do usługi ACR

Następnie przekaż utworzony obraz do usługi ACR utworzonej w poprzednich krokach.

Jeśli jeszcze tego nie zrobiono, zaloguj się do rejestru kontenerów przy użyciu następującego polecenia:

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

Użyj następujących poleceń, aby oznaczyć i wypchnąć obraz kontenera:

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

Wdrażanie aplikacji w klastrze usługi AKS

Aby wdrożyć aplikację Liberty w klastrze usługi AKS, wykonaj następujące kroki:

  1. Dołącz wystąpienie usługi ACR do klastra usługi AKS, aby klaster usługi AKS był uwierzytelniony w celu ściągnięcia obrazu z wystąpienia usługi ACR, jak pokazano w poniższym przykładzie:

    az aks update \
        --resource-group $RESOURCE_GROUP_NAME \
        --name $CLUSTER_NAME \
        --attach-acr $REGISTRY_NAME
    
  2. Zastosuj klucz tajny bazy danych i plik wdrożenia, uruchamiając następujące polecenia:

    cd <path-to-your-repo>/java-app/target
    
    # Apply database secret
    kubectl apply -f db-secret.yaml
    
    # Apply deployment file
    kubectl apply -f openlibertyapplication.yaml
    
  3. Ustal, czy OpenLibertyApplication wystąpienie zostało utworzone, uruchamiając następujące polecenie:

    kubectl get openlibertyapplication javaee-cafe-cluster
    

    Powinny zostać wyświetlone dane wyjściowe podobne do następującego przykładu:

    NAME                        IMAGE                                                   EXPOSED   RECONCILED   AGE
    javaee-cafe-cluster         youruniqueacrname.azurecr.io/javaee-cafe:1.0.25         True         59s
    
  4. Ustal, czy wdrożenie utworzone przez operatora jest gotowe, uruchamiając następujące polecenie:

    kubectl get deployment javaee-cafe-cluster --watch
    

    Powinny zostać wyświetlone dane wyjściowe podobne do następującego przykładu:

    NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
    javaee-cafe-cluster         0/3     3            0           20s
    
  5. Poczekaj, aż zobaczysz 3/3 pod kolumną READY i 3 pod kolumnąAVAILABLE, a następnie naciśnij Ctrl+C, aby zatrzymać proces zegarka.kubectl

Testowanie aplikacji

Po uruchomieniu aplikacji usługa modułu równoważenia obciążenia Kubernetes uwidacznia fronton aplikacji w Internecie. Ukończenie tego procesu może zająć trochę czasu.

Aby monitorować postęp, użyj polecenia kubectl get service z argumentem --watch , jak pokazano w poniższym przykładzie:

kubectl get service javaee-cafe-cluster --watch

Powinny zostać wyświetlone dane wyjściowe podobne do następującego przykładu:

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

Gdy adres EXTERNAL-IP zmieni się z oczekujące na rzeczywisty publiczny adres IP, naciśnij Ctrl+C, aby zatrzymać kubectl proces oglądania.

Jeśli upłynął jakiś czas między wykonaniem kroków w tej sekcji a poprzednim, upewnij się, że baza danych jest aktywna, jeśli jest to konieczne. Zobacz poprzednią notatkę dotyczącą wstrzymania bazy danych.

Otwórz przeglądarkę internetową na zewnętrzny adres IP usługi (52.152.189.57 w powyższym przykładzie), aby wyświetlić stronę główną aplikacji. Jeśli strona nie jest poprawnie załadowana, oznacza to, że aplikacja jest uruchamiana. Możesz poczekać chwilę i odświeżyć stronę później. Powinna zostać wyświetlona nazwa zasobnika replik aplikacji w lewym górnym rogu strony. Poczekaj kilka minut i odśwież stronę, aby wyświetlić inną nazwę zasobnika z powodu równoważenia obciążenia dostarczonego przez klaster usługi AKS.

Pomyślnie wdrożono aplikację Java liberty w usłudze AKS.

Uwaga

Obecnie aplikacja nie używa protokołu HTTPS. Zalecamy włączenie protokołu TLS przy użyciu własnych certyfikatów. Aby uzyskać więcej informacji, zobacz Używanie protokołu TLS z kontrolerem ruchu przychodzącego w usłudze Azure Kubernetes Service (AKS).

Czyszczenie zasobów

Aby uniknąć opłat za platformę Azure, należy wyczyścić niepotrzebne zasoby. Gdy klaster nie jest już potrzebny, użyj polecenia az group delete , aby usunąć grupę zasobów, usługę kontenera, rejestr kontenerów, bazę danych i wszystkie powiązane zasoby.

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

Następne kroki

Więcej informacji można dowiedzieć się z odwołań używanych w tym przewodniku:

Aby włączyć usługę Azure Cache for Redis do aplikacji Java, zobacz Używanie usługi Azure Cache for Redis w języku Java z klientem Redis Redisson.

Aby zapoznać się z opcjami uruchamiania produktów WebSphere na platformie Azure, zobacz Co to są rozwiązania do uruchamiania rodziny produktów WebSphere na platformie Azure?