Aracılığıyla paylaş


Azure Kubernetes Service kümesinde Quarkus ile Java uygulaması dağıtma

Bu makalede, basit bir CRUD uygulamasıyla Azure Kubernetes Service'te (AKS) Red Hat Quarkus'un nasıl hızla dağıtılacağı gösterilmektedir. Uygulama, JavaScript ön ucu ve REST uç noktası olan bir "yapılacaklar listesidir". PostgreSQL için Azure Veritabanı Esnek Sunucu, uygulama için kalıcılık katmanı sağlar. Makalede uygulamanızı yerel olarak test etme ve AKS'ye dağıtma adımları gösterilmektedir.

Önkoşullar

  • Azure aboneliğiniz yoksa başlamadan önce birücretsiz Azure hesabı oluşturun.
  • Ubuntu, macOS veya Linux için Windows Alt Sistemi gibi Unix benzeri işletim sistemi yüklü yerel bir makine hazırlayın.
  • Java SE uygulama sürümü 17 veya üzerini yükleyin; örneğin, OpenJDK'nin Microsoft derlemesi.
  • Maven, sürüm 3.9.8 veya üzerini yükleyin.
  • İşletim sisteminiz için Docker veya Podman'ı yükleyin.
  • jq'yi yükleyin.
  • cURL'yi yükleyin.
  • Quarkus CLI, sürüm 3.12.1 veya üzerini yükleyin.
  • Unix benzeri ortamlar için Azure CLI. Bu makale yalnızca Azure CLI'nın Bash değişkenini gerektirir.
    • Bir geliştiricinin Azure CLI'yi yüklemesi ve kodda DefaultAzureCredential'ı kullanmadan önce Azure'da oturum açmak için az login komutuyla etkileşimli olarak oturum açması gerekir.
      az login
      
    • Bu makale, Azure CLI'nın en az 2.61.0 sürümünü gerektirir.

Uygulama projesini oluşturma

Bu makalenin örnek Java projesini kopyalamak için aşağıdaki komutu kullanın. Örnek GitHub'dadır.

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

Ayrılmış HEAD durumunda olduğunu belirten bir ileti görürseniz, bu iletiyi yoksaymak güvenlidir. Bu makale herhangi bir işleme gerektirmediğinden, ayrılmış HEAD durumu uygundur.

Quarkus uygulamanızı yerel olarak test edin

Bu bölümdeki adımlarda uygulamayı yerel olarak nasıl çalıştırabileceğiniz gösterilmektedir.

Quarkus, geliştirme ve test modunda yapılandırılmamış hizmetlerin otomatik olarak sağlanmasını destekler. Quarkus bu özelliği geliştirme hizmetleri olarak ifade eder. Veritabanı hizmetine bağlanma gibi bir Quarkus özelliği eklediğinizi varsayalım. Uygulamayı test etmek istiyorsunuz ancak gerçek bir veritabanına bağlantıyı henüz tam olarak yapılandırmadınız. Quarkus, ilgili hizmetin saplama sürümünü otomatik olarak başlatır ve uygulamanızı buna bağlar. Daha fazla bilgi için Quarkus belgelerindeki Dev Services'e Genel Bakış bölümüne bakın.

Kapsayıcı ortamınızın Docker veya Podman'ın çalıştığından emin olun ve Quarkus geliştirme moduna girmek için aşağıdaki komutu kullanın:

quarkus dev

quarkus devyerine, kullanarak mvn quarkus:devMaven ile aynı şeyi gerçekleştirebilirsiniz.

Quarkus geliştirme modu kullanımınıza yönelik telemetri göndermek isteyip istemediğiniz sorulabilir. Öyleyse, istediğiniz gibi yanıtlayın.

Quarkus geliştirme modu, arka plan derlemesi ile canlı yeniden yüklemeyi etkinleştirir. Uygulama kaynak kodunuzun herhangi bir yönünü değiştirir ve tarayıcınızı yenilerseniz değişiklikleri görebilirsiniz. Derleme veya dağıtımla ilgili herhangi bir sorun varsa, bir hata sayfası size bildirir. Quarkus geliştirme modu, 5005 numaralı bağlantı noktasında hata ayıklayıcıyı dinler. Hata ayıklayıcının çalışmadan önce eklenmesini beklemek istiyorsanız komut satırını geçirin -Dsuspend . Hata ayıklayıcısını hiç istemiyorsanız kullanabilirsiniz -Ddebug=false.

Çıktı aşağıdaki örnekteki gibi görünmelidir:

__  ____  __  _____   ___  __ ____  ______
 --/ __ \/ / / / _ | / _ \/ //_/ / / / __/
 -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/
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>

Quarkus geliştirme modunun çalıştığı terminalde w tuşuna basın. w tuşu, uygulamayı göstermek Todo için varsayılan web tarayıcınızı açar. Uygulama GUI'sine http://localhost:8080 doğrudan da erişebilirsiniz.

Todo örnek uygulamasının ekran görüntüsü.

Yapılacaklar listesinden birkaç yapılacaklar öğesi seçmeyi deneyin. Kullanıcı arabirimi, üstü çizili metin stiliyle seçimi gösterir. Aşağıdaki ekran görüntüsünde gösterildiği gibi Todo uygulamalarını doğrula yazıp ENTER tuşuna basarak da yapılacaklar listesine yeni bir yapılacaklar öğesi ekleyebilirsiniz:

Yeni öğelerin eklendiği Todo örnek uygulamasının ekran görüntüsü.

Yerel PostgreSQL veritabanında depolayan tüm yapılacaklar öğelerini almak için RESTful API'sine (/api) erişin:

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

Çıktı aşağıdaki örnekteki gibi görünmelidir:

* 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
  }
]

Quarkus geliştirme modundan çıkmak için q tuşuna basın.

Quarkus uygulamasını çalıştırmak için Azure kaynaklarını oluşturma

Bu bölümdeki adımlarda Quarkus örnek uygulamasını çalıştırmak için aşağıdaki Azure kaynaklarının nasıl oluşturulacağı gösterilmektedir:

  • esnek sunucu PostgreSQL için Azure Veritabanı
  • Azure Container Registry (ACR)
  • Azure Kubernetes Service (AKS)

Bu kaynaklardan bazılarının Azure aboneliği kapsamında benzersiz adlara sahip olması gerekir. Bu benzersizliği sağlamak için baş harfleri, sıra, tarih, sonek desenini kullanabilirsiniz. Bu düzeni uygulamak için, kaynaklarınızın baş harflerini, bir dizi numarasını, bugünün tarihini ve bir tür kaynağa özgü soneki (örneğin, rg "kaynak grubu" için) listeleyerek kaynaklarınızı adlandırın. Aşağıdaki ortam değişkenleri bu düzeni kullanır. , LOCATIONve DB_PASSWORD yer tutucu değerlerini UNIQUE_VALUEkendi değerlerinizle değiştirin ve terminalinizde aşağıdaki komutları çalıştırın:

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, northeurope>
export REGISTRY_NAME=${UNIQUE_VALUE}reg
export DB_SERVER_NAME=${UNIQUE_VALUE}db
export DB_NAME=demodb
export DB_ADMIN=demouser
export DB_PASSWORD='<your desired password for the database server - for example, Secret123456>'
export CLUSTER_NAME=${UNIQUE_VALUE}aks
export AKS_NS=${UNIQUE_VALUE}ns

PostgreSQL için Azure Veritabanı Esnek Sunucu oluşturma

PostgreSQL için Azure Veritabanı Esnek Sunucu, veritabanı yönetimi işlevleri ve yapılandırma ayarları üzerinde daha ayrıntılı denetim ve esneklik sağlamak için tasarlanmış tam olarak yönetilen bir veritabanı hizmetidir. Bu bölümde, Azure CLI kullanarak PostgreSQL için Azure Veritabanı Esnek Sunucu örneğinin nasıl oluşturulacağı gösterilmektedir. Daha fazla bilgi için bkz. Hızlı Başlangıç: Azure CLI kullanarak PostgreSQL için Azure Veritabanı - Esnek Sunucu örneği oluşturma.

İlk olarak, aşağıdaki komutu kullanarak veritabanı sunucusunu ve diğer kaynakları içerecek bir kaynak grubu oluşturun:

az group create \
    --name $RESOURCE_GROUP_NAME \
    --location $LOCATION

Ardından, aşağıdaki komutu kullanarak PostgreSQL için Azure Veritabanı esnek bir sunucu örneği oluşturun:

az postgres flexible-server create \
    --name $DB_SERVER_NAME \
    --resource-group $RESOURCE_GROUP_NAME \
    --admin-user $DB_ADMIN \
    --admin-password $DB_PASSWORD \
    --database-name $DB_NAME \
    --public-access 0.0.0.0 \
    --yes

Sunucu, veritabanı, yönetici kullanıcı ve güvenlik duvarı kurallarının oluşturulması birkaç dakika sürer. Komut başarılı olursa, çıkış aşağıdaki örneğe benzer şekilde görünür:

{
  "connectionString": "postgresql://<DB_ADMIN>:<DB_PASSWORD>@<DB_SERVER_NAME>.postgres.database.azure.com/<DB_NAME>?sslmode=require",
  "databaseName": "<DB_NAME>",
  "firewallName": "AllowAllAzureServicesAndResourcesWithinAzureIps_2024-7-5_14-39-45",
  "host": "<DB_SERVER_NAME>.postgres.database.azure.com",
  "id": "/subscriptions/REDACTED/resourceGroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.DBforPostgreSQL/flexibleServers/<DB_SERVER_NAME>",
  "location": "North Europe",
  "password": "<DB_PASSWORD>",
  "resourceGroup": "<RESOURCE_GROUP_NAME>",
  "skuname": "Standard_D2s_v3",
  "username": "<DB_ADMIN>",
  "version": "13"
}

Azure Container Registry örneği oluşturacaksınız

Quarkus bulutta yerel bir teknoloji olduğundan, Kubernetes'te çalışan kapsayıcılar oluşturmak için yerleşik desteğe sahiptir. Kubernetes, tamamen çalıştırılacak kapsayıcı görüntülerini bulduğu bir kapsayıcı kayıt defterine sahip olmasına bağlıdır. AKS, Azure Container Registry (ACR) için yerleşik desteğe sahiptir.

ACR örneğini oluşturmak için az acr create komutunu kullanın. Aşağıdaki örnek, ortam değişkeninizin ${REGISTRY_NAME}değeriyle adlı bir ACR örneği oluşturur:

az acr create \
    --resource-group $RESOURCE_GROUP_NAME \
    --location ${LOCATION} \
    --name $REGISTRY_NAME \
    --sku Basic \
    --admin-enabled

Kısa bir süre sonra aşağıdaki satırları içeren JSON çıktısını görmeniz gerekir:

  "provisioningState": "Succeeded",
  "publicNetworkAccess": "Enabled",
  "resourceGroup": "<YOUR_RESOURCE_GROUP>",

Docker'ınızı ACR örneğine bağlama

ACR örneğinde oturum açın. Oturum açmak, görüntü göndermenizi sağlar. Bağlantıyı doğrulamak için aşağıdaki komutları kullanın:

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

Docker yerine Podman kullanıyorsanız, komutta gerekli değişiklikleri yapın.

ACR örneğinde başarıyla oturum açtıysanız, komut çıkışının sonunda görmeniz Login Succeeded gerekir.

AKS kümesi oluşturma

AKS kümesi oluşturmak için az aks create komutunu kullanın. Aşağıdaki örnek, tek düğümlü ortam değişkeninizin ${CLUSTER_NAME} değeriyle adlı bir küme oluşturur. Küme, önceki adımda oluşturduğunuz ACR örneğine bağlanır. Bu komutun tamamlanması birkaç dakika sürer.

az aks create \
    --resource-group $RESOURCE_GROUP_NAME \
    --location ${LOCATION} \
    --name $CLUSTER_NAME \
    --attach-acr $REGISTRY_NAME \
    --node-count 1 \
    --generate-ssh-keys

Birkaç dakika sonra komut tamamlanıp aşağıdaki çıkış da dahil olmak üzere küme hakkında JSON biçimli bilgileri döndürür:

  "nodeResourceGroup": "MC_<your resource_group_name>_<your cluster name>_<your region>",
  "privateFqdn": null,
  "provisioningState": "Succeeded",
  "resourceGroup": "<your resource group name>",

AKS kümesine bağlanma

Kubernetes kümesini yönetmek için Kubernetes komut satırı istemcisini kullanırsınız kubectl. Yerel olarak yüklemek kubectl için aşağıdaki örnekte gösterildiği gibi az aks install-cli komutunu kullanın:

az aks install-cli

hakkında kubectldaha fazla bilgi için Kubernetes belgelerindeki Komut satırı aracına (kubectl) bakın.

Kubernetes kümenize bağlanacak şekilde yapılandırmak kubectl için aşağıdaki örnekte gösterildiği gibi az aks get-credentials komutunu kullanın. Bu komut kimlik bilgilerini indirir ve Kubernetes CLI'yi bunları kullanacak şekilde yapılandırmaktadır.

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

Başarılı çıktı aşağıdaki örneğe benzer bir metin içerir:

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

için diğer ad k kubectlkullanmak yararlı olabilir. Öyleyse, aşağıdaki komutu kullanın:

alias k=kubectl

Kümenize bağlantıyı doğrulamak için komutunu kullanarak kubectl get aşağıdaki örnekte gösterildiği gibi küme düğümlerinin listesini döndürin:

kubectl get nodes

Aşağıdaki örnekte önceki adımlarda oluşturulan tek düğüm gösterilmiştir. Düğümün durumunun Hazır olduğundan emin olun:

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

AKS'de yeni ad alanı oluşturma

Quarkus uygulamanız için Kubernetes hizmetinizde yeni bir ad alanı oluşturmak için aşağıdaki komutu kullanın:

kubectl create namespace ${AKS_NS}

Çıktı aşağıdaki örnekteki gibi görünmelidir:

namespace/<your namespace> created

AKS'de veritabanı bağlantısı için gizli dizi oluşturma

Veritabanı bağlantı bilgilerini depolamak için AKS ad alanında gizli db-secret dizi oluşturun. Gizli diziyi oluşturmak için aşağıdaki komutu kullanın:

kubectl create secret generic db-secret \
    -n ${AKS_NS} \
    --from-literal=jdbcurl=jdbc:postgresql://${DB_SERVER_NAME}.postgres.database.azure.com:5432/${DB_NAME}?sslmode=require \
    --from-literal=dbusername=${DB_ADMIN} \
    --from-literal=dbpassword=${DB_PASSWORD}

Çıktı aşağıdaki örnekteki gibi görünmelidir:

secret/db-secret created

Bulut yerel yapılandırmasını özelleştirme

Bulutta yerel bir teknoloji olarak Quarkus standart Kubernetes, Red Hat OpenShift ve Knative için kaynakları otomatik olarak yapılandırma olanağı sunar. Daha fazla bilgi için bkz . Quarkus Kubernetes kılavuzu, Quarkus OpenShift kılavuzu ve Quarkus Knative kılavuzu. Geliştiriciler, oluşturulan bildirimleri uygulayarak uygulamayı hedef Kubernetes kümesine dağıtabilir.

Uygun Kubernetes kaynaklarını oluşturmak için aşağıdaki komutu kullanarak ve uzantılarını yerel terminalinize ekleyin quarkus-kubernetes container-image-jib :

quarkus ext add kubernetes container-image-jib

Quarkus, bu uzantıların olarak <dependencies>listelenmiş olduğundan emin olmak için POM'yi değiştirir. adlı JBangbir şey yüklemeniz istenirse evet yanıtlayın ve yüklenmesine izin verin.

Çıktı aşağıdaki örnekteki gibi görünmelidir:

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

Uzantıların eklendiğini doğrulamak için çalıştırabilir git diff ve çıkışı inceleyebilirsiniz.

Quarkus, bulutta yerel bir teknoloji olarak yapılandırma profillerini destekler. Quarkus aşağıdaki üç yerleşik profile sahiptir:

  • dev - Geliştirme modundayken etkinleştirilir
  • test - Testleri çalıştırırken etkinleştirildi
  • prod - Geliştirme veya test modunda çalışmadığında varsayılan profil

Quarkus gerektiğinde herhangi bir sayıda adlandırılmış profili destekler.

Bu bölümdeki kalan adımlar sizi src/main/resources/application.properties dosyasındaki değerleri açıklamayı kaldırmaya ve özelleştirmeye yönlendirir. baştaki öğesini kaldırarak ile # %prod. başlayan tüm satırların #sıkıştırılmadığından emin olun.

Ön ek, prod. profilde çalıştırılırken bu özelliklerin prod etkin olduğunu gösterir. Yapılandırma profilleri hakkında daha fazla bilgi için Quarkus belgelerine bakın.

Veritabanı yapılandırması

Aşağıdaki veritabanı yapılandırma değişkenlerini ekleyin. Veritabanı bağlantısıyla ilgili özellikler %prod.quarkus.datasource.jdbc.url, %prod.quarkus.datasource.usernameve %prod.quarkus.datasource.password ortam değişkenlerinden DB_JDBC_URLdeğerleri sırasıyla , DB_USERNAMEve DB_PASSWORDokuma. Bu ortam değişkenleri, bir sonraki bölümde açıklanan güvenlik nedenleriyle veritabanı bağlantı bilgilerini depolayan gizli dizi değerleriyle eşler.

# Database configurations
%prod.quarkus.datasource.db-kind=postgresql
%prod.quarkus.datasource.jdbc.driver=org.postgresql.Driver
%prod.quarkus.datasource.jdbc.url=${DB_JDBC_URL}
%prod.quarkus.datasource.username=${DB_USERNAME}
%prod.quarkus.datasource.password=${DB_PASSWORD}
%prod.quarkus.hibernate-orm.database.generation=drop-and-create
%prod.quarkus.hibernate-orm.sql-load-script=import.sql

Kubernetes yapılandırması

Aşağıdaki Kubernetes yapılandırma değişkenlerini ekleyin. Uygulamaya dışarıdan erişmek için load-balancer olarak ayarlandığından service-type emin olun.

# Kubernetes configurations
%prod.quarkus.kubernetes.deployment-target=kubernetes
%prod.quarkus.kubernetes.service-type=load-balancer
%prod.quarkus.kubernetes.env.secrets=db-secret
%prod.quarkus.kubernetes.env.mapping.DB_JDBC_URL.from-secret=db-secret
%prod.quarkus.kubernetes.env.mapping.DB_JDBC_URL.with-key=jdbcurl
%prod.quarkus.kubernetes.env.mapping.DB_USERNAME.from-secret=db-secret
%prod.quarkus.kubernetes.env.mapping.DB_USERNAME.with-key=dbusername
%prod.quarkus.kubernetes.env.mapping.DB_PASSWORD.from-secret=db-secret
%prod.quarkus.kubernetes.env.mapping.DB_PASSWORD.with-key=dbpassword

Diğer Kubernetes yapılandırmaları, gizli dizi değerlerinin Quarkus uygulamasındaki ortam değişkenlerine eşleneceğini belirtir. Gizli db-secret dizi, veritabanı bağlantı bilgilerini içerir. Gizli jdbcurldizideki , dbusernameve dbpassword anahtarları sırasıyla , DB_USERNAMEve DB_PASSWORD ortam değişkenleriyle eşlerDB_JDBC_URL.

Kapsayıcı görüntüsü yapılandırması

Bulutta yerel bir teknoloji olarak Quarkus, Docker ve Podman ile uyumlu OCI kapsayıcı görüntüleri oluşturmayı destekler. Aşağıdaki kapsayıcı görüntüsü değişkenlerini ekleyin. ve değerlerini <LOGIN_SERVER_VALUE> sırasıyla ve ${USER_NAME} ortam değişkenlerinin gerçek değerlerinin ${LOGIN_SERVER} değerleriyle <USER_NAME_VALUE> değiştirin.

# 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

Kapsayıcı görüntüsünü oluşturma ve ACR'ye gönderme

Şimdi uygulamanın kendisini oluşturmak için aşağıdaki komutu kullanın. Bu komut, kapsayıcı görüntüsünü oluşturmak için Kubernetes ve Jib uzantılarını kullanır.

quarkus build --no-tests

Çıktı ile BUILD SUCCESSbitmelidir. Kubernetes bildirim dosyaları, aşağıdaki örnekte gösterildiği gibi target/kubernetes içinde oluşturulur:

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

0 directories, 2 files

Kapsayıcı görüntüsünün mi oluşturulduğunu veya komut satırını (CLI) kullanarak docker podman da doğrulayabilirsiniz. Çıktı aşağıdaki örneğe benzer:

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

Aşağıdaki komutu kullanarak kapsayıcı görüntülerini ACR'ye gönderin:

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

Çıkış aşağıdaki örneğe benzer görünmelidir:

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

Artık uygulamayı ACR'ye ilettiğinize göre AKS'ye uygulamayı çalıştırmasını söyleyebilirsiniz.

Quarkus uygulamasını AKS'ye dağıtma

Bu bölümdeki adımlar, quarkus örnek uygulamasını oluşturduğunuz Azure kaynakları üzerinde nasıl çalıştırabileceğinizi gösterir.

Quarkus uygulamasını AKS'ye dağıtmak için kubectl apply kullanma

Aşağıdaki örnekte gösterildiği gibi komut satırında kullanarak kubectl Kubernetes kaynaklarını dağıtın:

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

Çıktı aşağıdaki örnekteki gibi görünmelidir:

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

Aşağıdaki komutu kullanarak uygulamanın çalıştığını doğrulayın:

kubectl -n $AKS_NS get pods

alanının değeri STATUS dışında Runningbir şey gösteriyorsa devam etmeden önce sorunu giderin ve çözün. Aşağıdaki komutu kullanarak pod günlüklerini incelemeye yardımcı olabilir:

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

EXTERNAL-IP Todo uygulamasına erişmek için aşağıdaki komutu kullanın:

kubectl get svc -n ${AKS_NS}

Çıktı aşağıdaki örnekteki gibi görünmelidir:

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

değerini bir ortam değişkenine EXTERNAL-IP tam URL olarak kaydetmek için aşağıdaki komutu kullanabilirsiniz:

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

değerine ${QUARKUS_URL}yeni bir web tarayıcısı açın. Ardından, metniyle Deployed the Todo app to AKSyeni bir yapılacaklar öğesi ekleyin. Ayrıca, öğeyi Introduction to Quarkus Todo App tamamlandı olarak seçin.

AKS'de çalışan Todo örnek uygulamasının ekran görüntüsü.

Aşağıdaki örnekte gösterildiği gibi Azure PostgreSQL veritabanında depolanan tüm yapılacaklar öğelerini almak için RESTful API'sine (/api) erişin:

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

Çıktı aşağıdaki örnekteki gibi görünmelidir:

* 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
  }
]

Veritabanının Azure Cloud Shell kullanılarak güncelleştirildiğini doğrulama

Aşağıdaki ekran görüntüsünde gösterildiği gibi Cloud Shell simgesini seçerek Azure portalda Azure Cloud Shell'i açın:

Cloud Shell düğmesinin vurgulandığı Azure portalının ekran görüntüsü.

Aşağıdaki komutu yerel olarak çalıştırın ve sonucu Azure Cloud Shell'e yapıştırın:

echo psql --host=${DB_SERVER_NAME}.postgres.database.azure.com --port=5432 --username=${DB_ADMIN} --dbname=${DB_NAME}

Parola istendiğinde, veritabanını oluştururken kullandığınız değeri kullanın.

Tüm yapılacaklar öğelerini almak için aşağıdaki sorguyu kullanın:

select * from todo;

Çıktı aşağıdaki örneğe benzer görünmelidir ve daha önce gösterilen Todo uygulama GUI'sinde aynı öğeleri içermelidir:

ASCII tablosu olarak sorgu çıktısının ekran görüntüsü.

Çıktıda görüyorsanızMORE, çağrıdan çıkmak için q yazın.

Programdan psql çıkmak için \q girin ve Cloud Shell'e dönün.

Kaynakları temizleme

Azure ücretlerinden kaçınmak için gereksiz kaynakları temizlemeniz gerekir. Küme artık gerekli olmadığında az group delete komutunu kullanarak kaynak grubunu, kapsayıcı hizmetini, kapsayıcı kayıt defterini ve tüm ilgili kaynakları kaldırın.

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

Kapsayıcı görüntülerini postgres silmek ve testcontainers Quarkus geliştirme modu tarafından oluşturulanları silmek için de kullanabilirsinizdocker rmi.

Sonraki adımlar