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 dev
Zamiast 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.
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:
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ć kubectl
klienta 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 kubectl
programu , 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 programowaniatest
- Aktywowane podczas uruchamiania testówprod
— 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 docker
podman
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
.
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:
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:
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.