Wdrażanie aplikacji Java za pomocą aplikacji Quarkus w klastrze usługi Azure Kubernetes Service

W tym artykule pokazano, jak szybko wdrożyć aplikację Red Hat Quarkus w usłudze Azure Kubernetes Service (AKS) przy użyciu prostej aplikacji CRUD. Aplikacja jest "listą do wykonania" z frontonem JavaScript i punktem końcowym REST. Usługa Azure Database for PostgreSQL udostępnia warstwę trwałości dla aplikacji. W artykule pokazano, jak przetestować aplikację lokalnie i wdrożyć ją w usłudze AKS.

Wymagania wstępne

  • Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto platformy Azure.
  • Usługa Azure Cloud Shell ma wstępnie zainstalowane wszystkie te wymagania wstępne. Aby uzyskać więcej informacji, zobacz Szybki start dotyczący usługi Azure Cloud Shell.
  • Jeśli uruchamiasz polecenia w tym przewodniku lokalnie (zamiast korzystać z usługi Azure Cloud Shell), wykonaj następujące kroki:
    • Przygotuj maszynę lokalną z zainstalowanym systemem operacyjnym przypominającym system Unix (na przykład Ubuntu, macOS lub Podsystem Windows dla systemu Linux).
    • Zainstaluj implementację środowiska Java SE (na przykład microsoft build of OpenJDK).
    • Zainstaluj program Maven w wersji 3.5.0 lub nowszej.
    • Zainstaluj platformę Docker lub narzędzie Podman dla systemu operacyjnego.
    • Zainstaluj pakiet jq.
    • Zainstaluj program cURL.
    • Zainstaluj interfejs wiersza polecenia quarkus.
  • Interfejs wiersza polecenia platformy Azure dla środowisk przypominających system Unix. Ten artykuł wymaga tylko wariantu powłoki Bash interfejsu wiersza polecenia platformy Azure.
    • Deweloper powinien zainstalować interfejs wiersza polecenia platformy Azure i zalogować się interaktywnie za pomocą polecenia az login , aby zalogować się na platformie Azure przed użyciem polecenia DefaultAzureCredential w kodzie.
      az login
      
    • Ten artykuł wymaga co najmniej wersji 2.31.0 interfejsu wiersza polecenia platformy Azure. W przypadku korzystania z usługi Azure Cloud Shell najnowsza wersja jest już zainstalowana.

Tworzenie projektu aplikacji

Użyj następującego polecenia, aby sklonować przykładowy projekt Java dla tego artykułu. Przykład znajduje się w witrynie GitHub.

git clone https://github.com/Azure-Samples/quarkus-azure
cd quarkus-azure
git checkout 2023-07-17
cd aks-quarkus

Jeśli zostanie wyświetlony komunikat o odłączeniu stanu HEAD , ten komunikat jest bezpieczny do zignorowania. Ponieważ ten artykuł nie wymaga żadnych zatwierdzeń, odłączony stan HEAD jest odpowiedni.

Lokalne testowanie aplikacji Quarkus

W krokach w tej sekcji pokazano, jak uruchomić aplikację lokalnie.

Aplikacja Quarkus obsługuje automatyczną aprowizację nieskonfigurowanych usług w trybie programowania i testowania. Quarkus odnosi się do tej możliwości jako usług deweloperskich. Załóżmy, że dołączysz funkcję Quarkus, taką jak nawiązywanie połączenia z usługą bazy danych. Chcesz przetestować aplikację, ale nie skonfigurowano jeszcze w pełni połączenia z rzeczywistą bazą danych. Aplikacja Quarkus automatycznie uruchamia wersję wycinkową odpowiedniej usługi i łączy aplikację z nią. Aby uzyskać więcej informacji, zobacz Omówienie usług Dev Services w dokumentacji aplikacji Quarkus.

Upewnij się, że środowisko kontenera, docker lub Podman, jest uruchomione i użyj następującego polecenia, aby wprowadzić tryb deweloperski Quarkus:

quarkus dev

quarkus devZamiast programu można wykonać to samo za pomocą narzędzia Maven przy użyciu polecenia mvn quarkus:dev.

Możesz zapytać, czy chcesz wysłać dane telemetryczne użycia trybu deweloperskiego Quarkus. Jeśli tak, odpowiedz jak chcesz.

Tryb deweloperski Quarkus umożliwia ponowne ładowanie na żywo przy użyciu kompilacji w tle. Jeśli zmodyfikujesz jakikolwiek aspekt kodu źródłowego aplikacji i odświeżysz przeglądarkę, możesz zobaczyć zmiany. Jeśli występują problemy z kompilacją lub wdrożeniem, na stronie błędu pojawi się komunikat o błędzie. Tryb deweloperski Quarkus nasłuchuje debugera na porcie 5005. Jeśli chcesz poczekać na dołączenie debugera przed uruchomieniem, przekaż -Dsuspend go w wierszu polecenia. Jeśli w ogóle nie chcesz debugera, możesz użyć polecenia -Ddebug=false.

Dane wyjściowe powinny wyglądać podobnie do następującego przykładu:

__  ____  __  _____   ___  __ ____  ______
 --/ __ \/ / / / _ | / _ \/ //_/ / / / __/
 -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/
INFO  [io.quarkus] (Quarkus Main Thread) quarkus-todo-demo-app-aks 1.0.0-SNAPSHOT on JVM (powered by Quarkus 3.2.0.Final) started in 3.377s. Listening on: http://localhost:8080

INFO  [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live Coding activated.
INFO  [io.quarkus] (Quarkus Main Thread) Installed features: [agroal, cdi, hibernate-orm, hibernate-orm-panache, hibernate-validator, jdbc-postgresql, narayana-jta, resteasy-reactive, resteasy-reactive-jackson, smallrye-context-propagation, vertx]

--
Tests paused
Press [e] to edit command line args (currently ''), [r] to resume testing, [o] Toggle test output, [:] for the terminal, [h] for more options>

Naciśnij klawisz w terminalu, w którym jest uruchomiony tryb deweloperski Quarkus. Klucz w otwiera domyślną przeglądarkę internetową, aby wyświetlić aplikację Todo . Możesz również uzyskać bezpośredni dostęp do graficznego interfejsu użytkownika http://localhost:8080 aplikacji.

Zrzut ekranu przedstawiający przykładową aplikację Todo.

Spróbuj wybrać kilka zadań do wykonania na liście zadań do wykonania. Interfejs użytkownika wskazuje wybór ze stylem tekstu przekreślenia. Możesz również dodać nowy element zadań do wykonania do listy zadań do wykonania, wpisując polecenie Weryfikuj aplikacje do wykonania i naciskając klawisz ENTER, jak pokazano na poniższym zrzucie ekranu:

Zrzut ekranu przedstawiający przykładową aplikację Todo z dodanymi nowymi elementami.

Uzyskaj dostęp do interfejsu API RESTful (/api), aby pobrać wszystkie elementy zadań do wykonania przechowywane w lokalnej bazie danych PostgreSQL:

curl --verbose http://localhost:8080/api | jq .

Dane wyjściowe powinny wyglądać podobnie do następującego przykładu:

* Connected to localhost (127.0.0.1) port 8080 (#0)
> GET /api HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.88.1
> Accept: */*
>
< HTTP/1.1 200 OK
< content-length: 664
< Content-Type: application/json;charset=UTF-8
<
{ [664 bytes data]
100   664  100   664    0     0  13278      0 --:--:-- --:--:-- --:--:-- 15441
* Connection #0 to host localhost left intact
[
  {
    "id": 1,
    "title": "Introduction to Quarkus Todo App",
    "completed": false,
    "order": 0,
    "url": null
  },
  {
    "id": 2,
    "title": "Quarkus on Azure App Service",
    "completed": false,
    "order": 1,
    "url": "https://learn.microsoft.com/en-us/azure/developer/java/eclipse-microprofile/deploy-microprofile-quarkus-java-app-with-maven-plugin"
  },
  {
    "id": 3,
    "title": "Quarkus on Azure Container Apps",
    "completed": false,
    "order": 2,
    "url": "https://learn.microsoft.com/en-us/training/modules/deploy-java-quarkus-azure-container-app-postgres/"
  },
  {
    "id": 4,
    "title": "Quarkus on Azure Functions",
    "completed": false,
    "order": 3,
    "url": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-create-first-quarkus"
  },
  {
    "id": 5,
    "title": "Verify Todo apps",
    "completed": false,
    "order": 5,
    "url": null
  }
]

Naciśnij klawisz q , aby zamknąć tryb deweloperski Quarkus.

Tworzenie zasobów platformy Azure w celu uruchomienia aplikacji Quarkus

W krokach w tej sekcji pokazano, jak utworzyć następujące zasoby platformy Azure w celu uruchomienia przykładowej aplikacji Quarkus:

  • Azure Database for PostgreSQL
  • Azure Container Registry (ACR)
  • Azure Kubernetes Service (AKS)

Niektóre z tych zasobów muszą mieć unikatowe nazwy w zakresie subskrypcji platformy Azure. Aby zapewnić tę unikatowość, możesz użyć inicjałów, sekwencji, daty, wzorca sufiksu . Aby zastosować ten wzorzec, nadaj zasobom nazwę, wyświetlając inicjały, numer sekwencji, bieżącą datę i jakiś sufiks specyficzny dla zasobu — na przykład rg "grupa zasobów". Użyj następujących poleceń, aby zdefiniować niektóre zmienne środowiskowe do późniejszego użycia:

export UNIQUE_VALUE=<your unique value, such as ejb010717>
export RESOURCE_GROUP_NAME=${UNIQUE_VALUE}rg
export LOCATION=<your desired Azure region for deploying your resources. For example, eastus>
export REGISTRY_NAME=${UNIQUE_VALUE}reg
export DB_SERVER_NAME=${UNIQUE_VALUE}db
export CLUSTER_NAME=${UNIQUE_VALUE}aks
export AKS_NS=${UNIQUE_VALUE}ns

Tworzenie serwera usługi Azure Database for PostgreSQL

Azure Database for PostgreSQL to zarządzana usługa do uruchamiania i skalowania baz danych PostgreSQL o wysokiej dostępności oraz zarządzania nimi w chmurze platformy Azure. W tej sekcji opisano sposób tworzenia pojedynczego serwera usługi Azure Database for PostgreSQL i nawiązywania z nim połączenia. Jednak po wykonaniu kroków opisanych w przewodniku Szybki start należy użyć ustawień w poniższej tabeli, aby dostosować wdrożenie bazy danych dla przykładowej aplikacji Quarkus. Zastąp zmienne środowiskowe wartościami rzeczywistymi podczas wypełniania pól w witrynie Azure Portal.

Ustawienie Wartość Opis
Grupa zasobów ${RESOURCE_GROUP_NAME} Wybierz pozycjęUtwórz nowy. Wdrożenie tworzy tę nową grupę zasobów.
Nazwa serwera ${DB_SERVER_NAME} Ta wartość stanowi część nazwy hosta serwera bazy danych.
Lokalizacja ${LOCATION} Wybierz lokalizację z listy rozwijanej. Zanotuj lokalizację. Musisz użyć tej samej lokalizacji dla innych tworzonych zasobów platformy Azure.
Nazwa użytkownika administratora kwarkus Przykładowy kod zakłada tę wartość.
Hasło Secret123456 Przykładowy kod zakłada tę wartość.

Mając na uwadze te podstawy wartości, wykonaj kroki opisane w przewodniku Szybki start: tworzenie serwera usługi Azure Database for PostgreSQL przy użyciu witryny Azure Portal w sekcji "Konfigurowanie reguły zapory". Następnie w sekcji "Konfigurowanie reguły zapory" wybierz pozycję Tak w polu Zezwalaj na dostęp do usług platformy Azure, a następnie wybierz pozycję Zapisz. Jeśli tego nie zrobisz, aplikacja Quarkus nie może uzyskać dostępu do bazy danych i po prostu nie będzie mogła się uruchomić.

Po wykonaniu kroków opisanych w przewodniku Szybki start w sekcji "Konfigurowanie reguły zapory", w tym kroku zezwalania na dostęp do usług platformy Azure, wróć do tego artykułu.

Tworzenie bazy danych zadań do wykonania w bazie danych PostgreSQL

Utworzony wcześniej serwer PostgreSQL jest pusty. Nie ma żadnej bazy danych, której można używać z aplikacją Quarkus. Utwórz nową bazę danych o nazwie todo przy użyciu następującego polecenia:

az postgres db create \
    --resource-group ${RESOURCE_GROUP_NAME} \
    --name todo \
    --server-name ${DB_SERVER_NAME}

Musisz użyć todo jako nazwy bazy danych, ponieważ przykładowy kod zakłada, że nazwa bazy danych.

Jeśli polecenie zakończy się pomyślnie, dane wyjściowe wyglądają podobnie do następującego przykładu:

{
  "charset": "UTF8",
  "collation": "English_United States.1252",
  "id": "/subscriptions/REDACTED/resourceGroups/ejb010718rg/providers/Microsoft.DBforPostgreSQL/servers/ejb010718db/databases/todo",
  "name": "todo",
  "resourceGroup": "ejb010718rg",
  "type": "Microsoft.DBforPostgreSQL/servers/databases"
}

Tworzenie wystąpienia usługi Microsoft Azure Container Registry

Ponieważ Quarkus jest technologią natywną dla chmury, ma wbudowaną obsługę tworzenia kontenerów uruchamianych na platformie Kubernetes. Platforma Kubernetes jest całkowicie zależna od posiadania rejestru kontenerów, z którego zostaną znalezione obrazy kontenerów do uruchomienia. Usługa AKS ma wbudowaną obsługę usługi Azure Container Registry (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 z wartością zmiennej środowiskowej ${REGISTRY_NAME}:

az acr create \
    --resource-group $RESOURCE_GROUP_NAME \
    --location ${LOCATION} \
    --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": "<YOUR_RESOURCE_GROUP>",

Połączenie platformy Docker do wystąpienia usługi ACR

Zaloguj się do wystąpienia usługi ACR. Logowanie umożliwia wypychanie obrazu. Użyj następujących poleceń, aby zweryfikować połączenie:

export LOGIN_SERVER=$(az acr show \
    --name $REGISTRY_NAME \
    --query 'loginServer' \
    --output tsv)
echo $LOGIN_SERVER
export USER_NAME=$(az acr credential show \
    --name $REGISTRY_NAME \
    --query 'username' \
    --output tsv)
echo $USER_NAME
export PASSWORD=$(az acr credential show \
    --name $REGISTRY_NAME \
    --query 'passwords[0].value' \
    --output tsv)
echo $PASSWORD
docker login $LOGIN_SERVER -u $USER_NAME -p $PASSWORD

Jeśli używasz narzędzia Podman zamiast platformy Docker, wprowadź niezbędne zmiany w poleceniu.

Jeśli pomyślnie zalogowałeś się do wystąpienia usługi ACR, powinien zostać wyświetlony Login Succeeded na końcu danych wyjściowych polecenia.

Tworzenie klastra AKS

Utwórz klaster AKS za pomocą polecenia az aks create. Poniższy przykład tworzy klaster o nazwie z wartością zmiennej środowiskowej ${CLUSTER_NAME} z jednym węzłem. Klaster jest połączony z wystąpieniem usługi ACR utworzonym w poprzednim kroku. Wykonanie tego polecenia trwa kilka minut.

az aks create \
    --resource-group $RESOURCE_GROUP_NAME \
    --location ${LOCATION} \
    --name $CLUSTER_NAME \
    --attach-acr $REGISTRY_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_<your resource_group_name>_<your cluster name>_<your region>",
  "privateFqdn": null,
  "provisioningState": "Succeeded",
  "resourceGroup": "<your resource group name>",

Połączenie do klastra usługi AKS

Aby zarządzać klastrem Kubernetes, należy użyć kubectlklienta wiersza polecenia Kubernetes. Jeśli korzystasz z usługi Azure Cloud Shell, narzędzie kubectl jest już zainstalowane. Aby zainstalować kubectl lokalnie, użyj polecenia az aks install-cli , jak pokazano w poniższym przykładzie:

az aks install-cli

Aby uzyskać więcej informacji na temat kubectlprogramu , zobacz Narzędzie wiersza polecenia (kubectl) w dokumentacji platformy Kubernetes.

Aby skonfigurować kubectl połączenie z klastrem Kubernetes, użyj polecenia az aks get-credentials , jak pokazano w poniższym przykładzie. 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

Pomyślne dane wyjściowe zawierają tekst podobny do następującego przykładu:

Merged "ejb010718aks-admin" as current context in /Users/edburns/.kube/config

Przydatne może być aliasy k w pliku kubectl. Jeśli tak, użyj następującego polecenia:

alias k=kubectl

Aby zweryfikować połączenie z klastrem, użyj kubectl get polecenia , aby zwrócić listę węzłów klastra, jak pokazano w poniższym przykładzie:

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 nowej przestrzeni nazw w usłudze AKS

Użyj następującego polecenia, aby utworzyć nową przestrzeń nazw w usłudze Kubernetes dla aplikacji Quarkus:

kubectl create namespace ${AKS_NS}

Dane wyjściowe powinny wyglądać podobnie do następującego przykładu:

namespace/<your namespace> created

Dostosowywanie natywnej konfiguracji chmury

Jako technologia natywna dla chmury firma Quarkus oferuje możliwość automatycznego konfigurowania zasobów dla standardowych platform Kubernetes, Red Hat OpenShift i Knative. Aby uzyskać więcej informacji, zobacz Przewodnik po usłudze Quarkus Kubernetes, Przewodnik quarkus OpenShift i Przewodnik po knacie Quarkus. Deweloperzy mogą wdrażać aplikację w docelowym klastrze Kubernetes, stosując wygenerowane manifesty.

Aby wygenerować odpowiednie zasoby kubernetes, użyj następującego polecenia, aby dodać quarkus-kubernetes rozszerzenia i container-image-jib w terminalu lokalnym:

quarkus ext add kubernetes container-image-jib

Funkcja Quarkus modyfikuje funkcję POM, aby upewnić się, że te rozszerzenia są wyświetlane jako <dependencies>. Jeśli zostanie wyświetlony monit o zainstalowanie czegoś o nazwie JBang, odpowiedz tak i zezwól na jego zainstalowanie.

Dane wyjściowe powinny wyglądać podobnie do następującego przykładu:

[SUCCESS] ✅  Extension io.quarkus:quarkus-kubernetes has been installed
[SUCCESS] ✅  Extension io.quarkus:quarkus-container-image-jib has been installed

Aby sprawdzić, czy rozszerzenia są dodawane, możesz uruchomić git diff polecenie i zbadać dane wyjściowe.

Jako natywna dla chmury technologia Quarkus obsługuje pojęcie profilów konfiguracji. Aplikacja Quarkus ma następujące trzy wbudowane profile:

  • dev - Aktywowane w trybie programowania
  • test - Aktywowane podczas uruchamiania testów
  • prod — Profil domyślny, gdy nie działa w trybie programowania lub testowania

Funkcja Quarkus obsługuje dowolną liczbę nazwanych profilów zgodnie z potrzebami.

Pozostałe kroki w tej sekcji umożliwiają usunięcie komentarza i dostosowanie wartości w pliku src/main/resources/application.properties . Upewnij się, że wszystkie wiersze rozpoczynające się od # %prod. ciągu są niezakomentowane przez usunięcie wiodącego #ciągu .

Prefiks prod. wskazuje, że te właściwości są aktywne podczas uruchamiania prod w profilu. Aby uzyskać więcej informacji na temat profilów konfiguracji, zobacz dokumentację aplikacji Quarkus.

Konfiguracja bazy danych

Dodaj następujące zmienne konfiguracji bazy danych. Zastąp wartości <DB_SERVER_NAME_VALUE> wartościami rzeczywistymi zmiennej środowiskowej ${DB_SERVER_NAME} .

# Database configurations
%prod.quarkus.datasource.db-kind=postgresql
%prod.quarkus.datasource.jdbc.url=jdbc:postgresql://<DB_SERVER_NAME_VALUE>.postgres.database.azure.com:5432/todo
%prod.quarkus.datasource.jdbc.driver=org.postgresql.Driver
%prod.quarkus.datasource.username=quarkus@<DB_SERVER_NAME_VALUE>
%prod.quarkus.datasource.password=Secret123456
%prod.quarkus.hibernate-orm.database.generation=drop-and-create

Konfiguracja rozwiązania Kubernetes

Dodaj następujące zmienne konfiguracji platformy Kubernetes. Upewnij się, że ustawiono opcję service-type , aby load-balancer uzyskać dostęp do aplikacji zewnętrznie.

# AKS configurations
%prod.quarkus.kubernetes.deployment-target=kubernetes
%prod.quarkus.kubernetes.service-type=load-balancer

Konfiguracja obrazu kontenera

Jako technologia natywna dla chmury aplikacja Quarkus obsługuje generowanie obrazów kontenerów OCI zgodnych z platformami Docker i Podman. Dodaj następujące zmienne obrazu kontenera. Zastąp wartości <LOGIN_SERVER_VALUE> i <USER_NAME_VALUE> wartościami wartości rzeczywistych ${LOGIN_SERVER} zmiennych środowiskowych i ${USER_NAME} odpowiednio.

# Container Image Build
%prod.quarkus.container-image.build=true
%prod.quarkus.container-image.registry=<LOGIN_SERVER_VALUE>
%prod.quarkus.container-image.group=<USER_NAME_VALUE>
%prod.quarkus.container-image.name=todo-quarkus-aks
%prod.quarkus.container-image.tag=1.0

Skompiluj obraz kontenera i wypchnij go do usługi ACR

Teraz użyj następującego polecenia, aby skompilować samą aplikację. To polecenie używa rozszerzeń Kubernetes i Jib do kompilowania obrazu kontenera.

quarkus build --no-tests

Dane wyjściowe powinny kończyć się ciągiem BUILD SUCCESS. Pliki manifestu kubernetes są generowane w lokalizacji docelowej/kubernetes, jak pokazano w poniższym przykładzie:

tree target/kubernetes
target/kubernetes
├── kubernetes.json
└── kubernetes.yml

0 directories, 2 files

Możesz sprawdzić, czy obraz kontenera jest również generowany przy użyciu dockerpodman wiersza polecenia lub wiersza polecenia. Dane wyjściowe wyglądają podobnie do następującego przykładu:

docker images | grep todo
<LOGIN_SERVER_VALUE>/<USER_NAME_VALUE>/todo-quarkus-aks   1.0       b13c389896b7   18 minutes ago   420MB

Wypchnij obrazy kontenerów do usługi ACR przy użyciu następującego polecenia:

export TODO_QUARKUS_TAG=$(docker images | grep todo-quarkus-aks | head -n1 | cut -d " " -f1)
echo ${TODO_QUARKUS_TAG}
docker push ${TODO_QUARKUS_TAG}:1.0

Dane wyjściowe powinny wyglądać mniej więcej tak jak w tym przykładzie:

The push refers to repository [<LOGIN_SERVER_VALUE>/<USER_NAME_VALUE>/todo-quarkus-aks]
dfd615499b3a: Pushed
56f5cf1aa271: Pushed
4218d39b228e: Pushed
b0538737ed64: Pushed
d13845d85ee5: Pushed
60609ec85f86: Pushed
1.0: digest: sha256:0ffd70d6d5bb3a4621c030df0d22cf1aa13990ca1880664d08967bd5bab1f2b6 size: 1995

Teraz, gdy aplikacja została wypchnięta do usługi ACR, możesz poinformować usługę AKS o uruchomieniu aplikacji.

Wdrażanie aplikacji Quarkus w usłudze AKS

W krokach w tej sekcji pokazano, jak uruchomić przykładową aplikację Quarkus w utworzonych zasobach platformy Azure.

Wdrażanie aplikacji Quarkus w usłudze AKS przy użyciu narzędzia kubectl apply

Wdróż zasoby platformy Kubernetes przy użyciu polecenia kubectl w wierszu polecenia, jak pokazano w poniższym przykładzie:

kubectl apply -f target/kubernetes/kubernetes.yml -n ${AKS_NS}

Dane wyjściowe powinny wyglądać podobnie do następującego przykładu:

deployment.apps/quarkus-todo-demo-app-aks created

Sprawdź, czy aplikacja jest uruchomiona przy użyciu następującego polecenia:

kubectl -n $AKS_NS get pods

Jeśli wartość STATUS pola zawiera inne elementy niż Running, przed kontynuowaniem rozwiąż problem i rozwiąż ten problem. Może to pomóc w zbadania dzienników zasobników przy użyciu następującego polecenia:

kubectl -n $AKS_NS logs $(kubectl -n $AKS_NS get pods | grep quarkus-todo-demo-app-aks | cut -d " " -f1)

EXTERNAL-IP Aby uzyskać dostęp do aplikacji todo, użyj następującego polecenia:

kubectl get svc -n ${AKS_NS}

Dane wyjściowe powinny wyglądać podobnie do następującego przykładu:

NAME                        TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)        AGE
quarkus-todo-demo-app-aks   LoadBalancer   10.0.236.101   20.12.126.200   80:30963/TCP   37s

Możesz użyć następującego polecenia, aby zapisać wartość EXTERNAL-IP zmiennej środowiskowej jako w pełni kwalifikowany adres URL:

export QUARKUS_URL=http://$(kubectl get svc -n ${AKS_NS} | grep quarkus-todo-demo-app-aks | cut -d " " -f10)
echo $QUARKUS_URL

Otwórz nową przeglądarkę internetową na wartość ${QUARKUS_URL}. Następnie dodaj nowy element zadań do wykonania z tekstem Deployed the Todo app to AKS. Ponadto wybierz element jako ukończony Introduction to Quarkus Todo App .

Zrzut ekranu przedstawiający przykładową aplikację todo działającą w usłudze AKS.

Uzyskaj dostęp do interfejsu API RESTful (/api), aby pobrać wszystkie elementy zadań do wykonania przechowywane w bazie danych Azure PostgreSQL, jak pokazano w poniższym przykładzie:

curl --verbose ${QUARKUS_URL}/api | jq .

Dane wyjściowe powinny wyglądać podobnie do następującego przykładu:

* Connected to 20.237.68.225 (20.237.68.225) port 80 (#0)
> GET /api HTTP/1.1
> Host: 20.237.68.225
> User-Agent: curl/7.88.1
> Accept: */*
>
< HTTP/1.1 200 OK
< content-length: 828
< Content-Type: application/json;charset=UTF-8
<
[
  {
    "id": 2,
    "title": "Quarkus on Azure App Service",
    "completed": false,
    "order": 1,
    "url": "https://learn.microsoft.com/en-us/azure/developer/java/eclipse-microprofile/deploy-microprofile-quarkus-java-app-with-maven-plugin"
  },
  {
    "id": 3,
    "title": "Quarkus on Azure Container Apps",
    "completed": false,
    "order": 2,
    "url": "https://learn.microsoft.com/en-us/training/modules/deploy-java-quarkus-azure-container-app-postgres/"
  },
  {
    "id": 4,
    "title": "Quarkus on Azure Functions",
    "completed": false,
    "order": 3,
    "url": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-create-first-quarkus"
  },
  {
    "id": 5,
    "title": "Deployed the Todo app to AKS",
    "completed": false,
    "order": 5,
    "url": null
  },
  {
    "id": 1,
    "title": "Introduction to Quarkus Todo App",
    "completed": true,
    "order": 0,
    "url": null
  }
]

Sprawdź, czy baza danych została zaktualizowana przy użyciu usługi Azure Cloud Shell

Otwórz usługę Azure Cloud Shell w witrynie Azure Portal, wybierając ikonę usługi Cloud Shell , jak pokazano na poniższym zrzucie ekranu:

Zrzut ekranu witryny Azure Portal z wyróżnionym przyciskiem usługi Cloud Shell.

Uruchom następujące polecenie lokalnie i wklej wynik w usłudze Azure Cloud Shell:

echo psql --host=${DB_SERVER_NAME}.postgres.database.azure.com --port=5432 --username=quarkus@${DB_SERVER_NAME} --dbname=todo

Po wyświetleniu monitu o hasło użyj wartości użytej podczas tworzenia bazy danych.

Użyj następującego zapytania, aby pobrać wszystkie elementy zadań do wykonania:

select * from todo;

Dane wyjściowe powinny wyglądać podobnie do poniższego przykładu i powinny zawierać te same elementy w wyświetlonym wcześniej graficznym interfejsie użytkownika aplikacji Todo:

Zrzut ekranu przedstawiający dane wyjściowe zapytania jako tabelę ASCII.

Jeśli zobaczysz MORE w danych wyjściowych, wpisz q , aby zamknąć pager.

Wprowadź \q , aby zamknąć psql program i wrócić do usługi Cloud Shell.

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 i wszystkie powiązane zasoby.

git reset --hard
docker rmi ${TODO_QUARKUS_TAG}:1.0
docker rmi postgres
az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait

Możesz również użyć docker rmi polecenia , aby usunąć obrazy kontenerów postgres i testcontainers wygenerować je w trybie deweloperskim Quarkus.

Następne kroki