Menyebarkan aplikasi Java dengan Quarkus pada kluster Azure Kubernetes Service
Artikel ini menunjukkan cara menyebarkan Red Hat Quarkus dengan cepat di Azure Kubernetes Service (AKS) dengan aplikasi CRUD sederhana. Aplikasi ini adalah "daftar tugas" dengan front end JavaScript dan titik akhir REST. Server Fleksibel Azure Database for PostgreSQL menyediakan lapisan persistensi untuk aplikasi. Artikel ini menunjukkan kepada Anda cara menguji aplikasi secara lokal dan menyebarkannya ke AKS.
Prasyarat
- Jika Anda tidak memiliki Langganan Azure, buat Akun gratis Azure sebelum memulai.
- Siapkan komputer lokal dengan sistem operasi seperti Unix yang terinstal - misalnya, Ubuntu, macOS, atau Subsistem Windows untuk Linux.
- Instal implementasi Java SE versi 17 atau yang lebih baru - misalnya, Microsoft build OpenJDK.
- Instal Maven, versi 3.9.8 atau yang lebih tinggi.
- Pasang Docker untuk OS Anda.
- Pasang jq.
- Instal cURL.
- Instal Quarkus CLI, versi 3.12.1 atau yang lebih tinggi.
- Azure CLI untuk lingkungan seperti Unix. Artikel ini hanya memerlukan varian Bash dari Azure CLI.
Pengembang harus menginstal Azure CLI dan masuk secara interaktif dengan perintah az login untuk masuk ke Azure sebelum menggunakan DefaultAzureCredential dalam kode. az login
- Artikel ini memerlukan setidaknya Azure CLI versi 2.61.0.
Membuat proyek aplikasi
Gunakan perintah berikut untuk mengkloning sampel proyek Java untuk artikel ini. Sampelnya ada di GitHub.
git clone https://github.com/Azure-Samples/quarkus-azure
cd quarkus-azure
git checkout 2024-12-16
cd aks-quarkus
Jika Anda melihat pesan tentang berada dalam status HEAD yang terlepas, pesan ini aman untuk diabaikan. Karena artikel ini tidak memerlukan penerapan apa pun, status HEAD yang dilepas sesuai.
Uji aplikasi Quarkus Anda secara lokal
Langkah-langkah di bagian ini menunjukkan kepada Anda cara menjalankan aplikasi secara lokal.
Quarkus mendukung provisi otomatis layanan yang tidak dikonfigurasi dalam mode pengembangan dan pengujian. Quarkus menyebut kemampuan ini sebagai layanan dev. Katakanlah Anda menyertakan fitur Quarkus, seperti menyambungkan ke layanan database. Anda ingin menguji aplikasi, tetapi belum sepenuhnya mengonfigurasi koneksi ke database nyata. Quarkus secara otomatis memulai versi stub kontainer dari layanan yang relevan dan menghubungkan aplikasi Anda ke dalamnya. Untuk informasi selengkapnya, lihat Gambaran Umum Dev Services dalam dokumentasi Quarkus.
Pastikan lingkungan kontainer Anda berjalan dan gunakan perintah berikut untuk memasuki mode dev Quarkus:
quarkus dev
Alih-alih quarkus dev
, Anda dapat mencapai hal yang sama dengan Maven dengan menggunakan mvn quarkus:dev
.
Anda mungkin ditanya apakah Anda ingin mengirim telemetri penggunaan mode dev Quarkus Anda. Jika demikian, jawab sesuai keinginan Anda.
Mode dev Quarkus memungkinkan pemuatan ulang langsung dengan kompilasi latar belakang. Jika Anda memodifikasi aspek kode sumber aplikasi dan merefresh browser, Anda dapat melihat perubahannya. Jika ada masalah dengan kompilasi atau penyebaran, halaman kesalahan memberi tahu Anda. Mode dev Quarkus mendengarkan debugger pada port 5005. Jika Anda ingin menunggu debugger dilampirkan sebelum berjalan, teruskan -Dsuspend
pada baris perintah. Jika Anda tidak ingin debugger sama sekali, Anda dapat menggunakan -Ddebug=false
.
Output akan terlihat seperti contoh berikut:
__ ____ __ _____ ___ __ ____ ______
--/ __ \/ / / / _ | / _ \/ //_/ / / / __/
-/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/
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>
Tekan w pada terminal tempat mode dev Quarkus berjalan. Kunci w membuka browser web default Anda untuk menampilkan Todo
aplikasi. Anda juga dapat mengakses GUI http://localhost:8080
aplikasi secara langsung.
Coba pilih beberapa item todo di daftar todo. UI menunjukkan pilihan dengan gaya teks coretan. Anda juga dapat menambahkan item todo baru ke daftar todo dengan mengetik Verifikasi aplikasi Todo dan menekan Enter, seperti yang ditunjukkan pada cuplikan layar berikut:
Akses RESTful API (/api
) untuk mendapatkan semua item todo yang disimpan di database PostgreSQL lokal:
curl --verbose http://localhost:8080/api | jq .
Output akan terlihat seperti contoh berikut:
* 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
}
]
Tekan q untuk keluar dari mode dev Quarkus.
Membuat sumber daya Azure untuk menjalankan aplikasi Quarkus
Langkah-langkah di bagian ini memperlihatkan kepada Anda cara membuat sumber daya Azure berikut untuk menjalankan aplikasi sampel Quarkus:
- Server Fleksibel Azure Database for PostgreSQL
- Azure Container Registry
- Azure Kubernetes Service (AKS)
Catatan
Artikel ini menonaktifkan autentikasi PostgreSQL untuk mengilustrasikan praktik terbaik keamanan. ID Microsoft Entra digunakan untuk mengautentikasi koneksi ke server. Jika Anda perlu mengaktifkan autentikasi PostgreSQL, lihat Mulai Cepat: Menggunakan Java dan JDBC dengan Azure Database for PostgreSQL - Server Fleksibel dan pilih tab Kata Sandi .
Beberapa sumber daya ini harus memiliki nama unik dalam cakupan langganan Azure. Untuk memastikan keunikan ini, Anda dapat menggunakan inisial, urutan, tanggal, pola akhiran . Untuk menerapkan pola ini, beri nama sumber daya Anda dengan mencantumkan inisial Anda, beberapa nomor urutan, tanggal hari ini, dan beberapa jenis akhiran spesifik sumber daya - misalnya, rg
untuk "grup sumber daya". Variabel lingkungan berikut menggunakan pola ini. Ganti nilai UNIQUE_VALUE
tempat penampung dan LOCATION
dengan nilai Anda sendiri lalu jalankan perintah berikut di terminal Anda:
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 CLUSTER_NAME=${UNIQUE_VALUE}aks
export AKS_NS=${UNIQUE_VALUE}ns
Membuat Server Fleksibel Azure Database for PostgreSQL
Server Fleksibel (Pratinjau) Azure Database for PostgreSQL adalah layanan database terkelola sepenuhnya yang dirancang untuk memberikan kontrol dan fleksibilitas yang lebih terperinci atas fungsi manajemen database dan pengaturan konfigurasi. Bagian ini memperlihatkan kepada Anda cara membuat instans Azure Database for PostgreSQL Flexible Server menggunakan Azure CLI.
Pertama, buat grup sumber daya untuk berisi server database dan sumber daya lainnya dengan menggunakan perintah berikut:
az group create \
--name $RESOURCE_GROUP_NAME \
--location $LOCATION
Selanjutnya, buat instans server fleksibel Azure Database for PostgreSQL dengan menggunakan perintah berikut:
az postgres flexible-server create \
--name $DB_SERVER_NAME \
--database-name $DB_NAME \
--resource-group $RESOURCE_GROUP_NAME \
--location $LOCATION \
--public-access 0.0.0.0 \
--sku-name Standard_B1ms \
--tier Burstable \
--active-directory-auth Enabled \
--yes
Dibutuhkan beberapa menit untuk membuat server, database, pengguna admin, dan aturan firewall. Jika perintah berhasil, output terlihat mirip dengan contoh berikut:
{
"connectionString": "postgresql://REDACTED@ejb011212qdb.postgres.database.azure.com/demodb?sslmode=require",
"databaseName": "demodb",
"firewallName": "AllowAllAzureServicesAndResourcesWithinAzureIps_2024-12-12_14-30-22",
"host": "ejb011212qdb.postgres.database.azure.com",
"id": "/subscriptions/c7844e91-b11d-4a7f-ac6f-996308fbcdb9/resourceGroups/ejb011211sfi/providers/Microsoft.DBforPostgreSQL/flexibleServers/ejb011212qdb",
"location": "East US 2",
"password": "REDACTED",
"resourceGroup": "ejb011211sfi",
"skuname": "Standard_B1ms",
"username": "sorrycamel2",
"version": "16"
}
Menguji aplikasi secara lokal dengan Server Fleksibel Azure Database for PostgreSQL
Di bagian sebelumnya, Anda menguji aplikasi Quarkus secara lokal dalam mode pengembangan dengan database PostgreSQL yang disediakan sebagai kontainer Docker. Sekarang, uji koneksi ke instans Azure Database for PostgreSQL Flexible Server secara lokal.
Pertama, tambahkan pengguna yang masuk saat ini sebagai Admin Microsoft Entra ke instans Server Fleksibel Azure Database for PostgreSQL dengan menggunakan perintah berikut:
ENTRA_ADMIN_NAME=$(az account show --query user.name --output tsv)
az postgres flexible-server ad-admin create \
--resource-group $RESOURCE_GROUP_NAME \
--server-name $DB_SERVER_NAME \
--display-name $ENTRA_ADMIN_NAME \
--object-id $(az ad signed-in-user show --query id --output tsv)
Output yang berhasil adalah objek JSON termasuk properti "type": "Microsoft.DBforPostgreSQL/flexibleServers/administrators"
.
Selanjutnya, tambahkan alamat IP lokal ke aturan firewall instans Azure Database for PostgreSQL Flexible Server dengan mengikuti langkah-langkah berikut:
Dapatkan alamat IP lokal komputer tempat Anda menjalankan aplikasi Quarkus secara lokal. Misalnya, kunjungi https://whatismyipaddress.com untuk mendapatkan alamat IP v4 publik Anda.
Tentukan variabel lingkungan dengan alamat IP lokal yang Anda dapatkan di langkah sebelumnya.
export AZ_LOCAL_IP_ADDRESS=<your local IP address>
Jalankan perintah berikut untuk menambahkan alamat IP lokal ke aturan firewall instans Server Fleksibel Azure Database for PostgreSQL:
az postgres flexible-server firewall-rule create \ --resource-group $RESOURCE_GROUP_NAME \ --name $DB_SERVER_NAME \ --rule-name $DB_SERVER_NAME-database-allow-local-ip \ --start-ip-address $AZ_LOCAL_IP_ADDRESS \ --end-ip-address $AZ_LOCAL_IP_ADDRESS
Kemudian, atur variabel lingkungan berikut di terminal Anda sebelumnya. Variabel lingkungan ini digunakan untuk menyambungkan ke instans Server Fleksibel Azure Database for PostgreSQL dari aplikasi Quarkus yang berjalan secara lokal:
export AZURE_POSTGRESQL_HOST=${DB_SERVER_NAME}.postgres.database.azure.com
export AZURE_POSTGRESQL_PORT=5432
export AZURE_POSTGRESQL_DATABASE=${DB_NAME}
export AZURE_POSTGRESQL_USERNAME=${ENTRA_ADMIN_NAME}
Catatan
Nilai variabel AZURE_POSTGRESQL_HOST
lingkungan , , AZURE_POSTGRESQL_PORT
, AZURE_POSTGRESQL_DATABASE
dan AZURE_POSTGRESQL_USERNAME
dibaca oleh Properti konfigurasi database yang ditentukan dalam file src/main/resources/application.properties yang diperkenalkan di bagian sebelumnya. Nilai-nilai ini secara otomatis disuntikkan ke dalam aplikasi saat runtime menggunakan ekstensi tanpa kata sandi Konektor Layanan saat Anda menyebarkan aplikasi Quarkus ke kluster AKS nanti di artikel ini.
Sekarang, jalankan aplikasi Quarkus secara lokal untuk menguji koneksi ke instans Server Fleksibel Azure Database for PostgreSQL. Gunakan perintah berikut untuk memulai aplikasi dalam mode produksi:
quarkus build
java -jar target/quarkus-app/quarkus-run.jar
Catatan
Jika aplikasi gagal memulai dengan pesan kesalahan yang mirip ERROR [org.hib.eng.jdb.spi.SqlExceptionHelper] (JPA Startup Thread) Acquisition timeout while waiting for new connection
dengan , kemungkinan besar karena pengaturan jaringan komputer lokal Anda. Coba pilih Tambahkan alamat IP klien saat ini dari portal Azure lagi. Untuk informasi selengkapnya, lihat bagian Membuat aturan firewall setelah server dibuat di Membuat dan mengelola aturan firewall untuk Azure Database for PostgreSQL - Server Fleksibel menggunakan portal Azure. Sekarang, jalankan aplikasi lagi.
Buka browser web baru untuk http://localhost:8080
mengakses aplikasi Todo. Anda akan melihat aplikasi Todo, terlihat mirip dengan apa yang Anda lihat saat menjalankan aplikasi secara lokal dalam mode pengembangan.
Buat instans Azure Container Registry
Karena Quarkus adalah teknologi asli cloud, Quarkus memiliki dukungan bawaan untuk membuat kontainer yang berjalan di Kubernetes. Kubernetes sepenuhnya bergantung pada memiliki registri kontainer tempat kubernetes menemukan gambar kontainer untuk dijalankan. AKS memiliki dukungan bawaan untuk Azure Container Registry.
Gunakan perintah az acr create untuk membuat instans registri kontainer. Contoh berikut membuat instans registri kontainer bernama dengan nilai variabel ${REGISTRY_NAME}
lingkungan Anda :
az acr create \
--resource-group $RESOURCE_GROUP_NAME \
--location ${LOCATION} \
--name $REGISTRY_NAME \
--sku Basic
Setelah beberapa saat, Anda akan melihat output JSON yang berisi baris berikut:
"provisioningState": "Succeeded",
"publicNetworkAccess": "Enabled",
"resourceGroup": "<YOUR_RESOURCE_GROUP>",
Dapatkan server masuk untuk instans Container Registry dengan menggunakan perintah berikut:
export LOGIN_SERVER=$(az acr show \
--name $REGISTRY_NAME \
--query 'loginServer' \
--output tsv)
echo $LOGIN_SERVER
Menyambungkan docker Anda ke instans registri kontainer
Masuk ke instans registri kontainer. Masuk memungkinkan Anda mendorong gambar. Gunakan perintah berikut untuk masuk ke registri:
az acr login --name $REGISTRY_NAME
Jika Anda berhasil masuk ke instans registri kontainer, Anda akan melihat Login Succeeded
di akhir output perintah.
Membuat kluster AKS
Gunakan perintah az aks create untuk membuat kluster AKS. Contoh berikut membuat kluster bernama dengan nilai variabel ${CLUSTER_NAME}
lingkungan Anda dengan satu simpul. Kluster terhubung ke instans registri kontainer yang Anda buat di langkah sebelumnya. Perintah ini memerlukan waktu 2-3 menit untuk diselesaikan. Kluster dimulai dengan identitas terkelola diaktifkan. Langkah ini diperlukan untuk koneksi database tanpa kata sandi.
az aks create \
--resource-group $RESOURCE_GROUP_NAME \
--name $CLUSTER_NAME \
--attach-acr $REGISTRY_NAME \
--node-count 1 \
--generate-ssh-keys \
--enable-managed-identity
Setelah beberapa menit, perintah menyelesaikan dan mengembalikan informasi berformat JSON tentang kluster, termasuk output berikut:
"nodeResourceGroup": "MC_<your resource_group_name>_<your cluster name>_<your region>",
"privateFqdn": null,
"provisioningState": "Succeeded",
"resourceGroup": "<your resource group name>",
Menyambungkan ke kluster AKS
Untuk mengelola kluster Kube, gunakan kubectl
, klien baris perintah Kube. Untuk menginstal kubectl
secara lokal, gunakan perintah az aks install-cli , seperti yang ditunjukkan dalam contoh berikut:
az aks install-cli
Untuk informasi selengkapnya tentang kubectl
, lihat Alat baris perintah (kubectl) dalam dokumentasi Kubernetes.
Untuk mengonfigurasi kubectl
untuk terhubung ke kluster Kubernetes, gunakan perintah az aks get-credentials , seperti yang ditunjukkan pada contoh berikut. Perintah ini mengunduh informasi masuk dan mengonfigurasi CLI Kube untuk menggunakannya.
az aks get-credentials \
--resource-group $RESOURCE_GROUP_NAME \
--name $CLUSTER_NAME \
--overwrite-existing \
--admin
Output yang berhasil mencakup teks yang mirip dengan contoh berikut:
Merged "ejb010718aks-admin" as current context in /Users/edburns/.kube/config
Anda mungkin merasa berguna untuk alias k
ke kubectl
. Jika demikian, gunakan perintah berikut:
alias k=kubectl
Untuk memverifikasi koneksi ke kluster Anda, gunakan kubectl get
perintah untuk mengembalikan daftar node kluster, seperti yang ditunjukkan dalam contoh berikut:
kubectl get nodes
Contoh output berikut menunjukkan satu simpul yang dibuat pada langkah sebelumnya. Pastikan bahwa status simpul Siap:
NAME STATUS ROLES AGE VERSION
aks-nodepool1-xxxxxxxx-yyyyyyyyyy Ready agent 76s v1.28.9
Membuat namespace baru di AKS
Gunakan perintah berikut untuk membuat namespace baru di layanan Kubernetes untuk aplikasi Quarkus Anda:
kubectl create namespace ${AKS_NS}
Output akan terlihat seperti contoh berikut:
namespace/<your namespace> created
Membuat koneksi layanan di AKS dengan Konektor Layanan
Di bagian ini, Anda membuat koneksi layanan antara kluster AKS dan Server Fleksibel Azure Database for PostgreSQL menggunakan ID Beban Kerja Microsoft Entra dengan Konektor Layanan. Koneksi ini memungkinkan kluster AKS mengakses Server Fleksibel Azure Database for PostgreSQL tanpa menggunakan autentikasi SQL.
Jalankan perintah berikut untuk membuat koneksi antara kluster AKS dan database PostgreSQL menggunakan ID Beban Kerja Microsoft Entra dengan Konektor Layanan:
# Register the Service Connector and Kubernetes Configuration resource providers
az provider register --namespace Microsoft.ServiceLinker --wait
az provider register --namespace Microsoft.KubernetesConfiguration --wait
# Install the Service Connector passwordless extension
az extension add --name serviceconnector-passwordless --upgrade --allow-preview true
# Retrieve the AKS cluster and Azure SQL Server resource IDs
export AKS_CLUSTER_RESOURCE_ID=$(az aks show \
--resource-group $RESOURCE_GROUP_NAME \
--name $CLUSTER_NAME \
--query id \
--output tsv)
export AZURE_POSTGRESQL_RESOURCE_ID=$(az postgres flexible-server show \
--resource-group $RESOURCE_GROUP_NAME \
--name $DB_SERVER_NAME \
--query id \
--output tsv)
# Create a user-assigned managed identity used for workload identity
export USER_ASSIGNED_IDENTITY_NAME=workload-identity-uami
az identity create \
--resource-group ${RESOURCE_GROUP_NAME} \
--name ${USER_ASSIGNED_IDENTITY_NAME}
# Retrieve the user-assigned managed identity resource ID
export UAMI_RESOURCE_ID=$(az identity show \
--resource-group ${RESOURCE_GROUP_NAME} \
--name ${USER_ASSIGNED_IDENTITY_NAME} \
--query id \
--output tsv)
# Create a service connection between your AKS cluster and your PostgreSQL database using Microsoft Entra Workload ID
az aks connection create postgres-flexible \
--connection akspostgresconn \
--kube-namespace $AKS_NS \
--source-id $AKS_CLUSTER_RESOURCE_ID \
--target-id $AZURE_POSTGRESQL_RESOURCE_ID/databases/$DB_NAME \
--workload-identity $UAMI_RESOURCE_ID
Kehadiran JSON berikut dalam output dari perintah akhir dalam langkah-langkah sebelumnya menunjukkan keberhasilan penginstalan konektor layanan:
"name": "akspostgresconn",
"provisioningState": "Succeeded",
Catatan
Sebaiknya gunakan ID Beban Kerja Microsoft Entra untuk akses aman ke Server Fleksibel Azure Database for PostgreSQL Anda tanpa menggunakan autentikasi nama pengguna/kata sandi. Jika Anda perlu menggunakan autentikasi nama pengguna/kata sandi, abaikan langkah-langkah sebelumnya di bagian ini dan gunakan nama pengguna dan kata sandi untuk menyambungkan ke database.
Mendapatkan akun layanan dan rahasia yang dibuat oleh Konektor Layanan
Untuk mengautentikasi ke Server Fleksibel Azure Database for PostgreSQL, Anda perlu mendapatkan akun layanan dan rahasia Kubernetes yang dibuat oleh Konektor Layanan. Ikuti instruksi di bagian Perbarui kontainer Anda di Tutorial: Menyambungkan aplikasi AKS ke Azure SQL Database. Ambil opsi Buat penyebaran secara langsung menggunakan cuplikan kode sampel YAML yang disediakan dan gunakan langkah-langkah berikut:
Dari bagian yang disorot dalam sampel YAML penyebaran Kubernetes, salin nilai
serviceAccountName
dansecretRef.name
, yang diwakili sebagai<service-account-name>
dan<secret-name>
dalam contoh berikut:serviceAccountName: <service-account-name> containers: - name: raw-linux envFrom: - secretRef: name: <secret-name>
Nilai-nilai ini digunakan di bagian berikutnya untuk menyebarkan aplikasi Quarkus ke kluster AKS.
Mengkustomisasi konfigurasi cloud native
Sebagai teknologi asli cloud, Quarkus menawarkan kemampuan untuk mengonfigurasi sumber daya secara otomatis untuk Kubernetes standar, Red Hat OpenShift, dan Knative. Untuk informasi selengkapnya, lihat panduan Kubernetes Quarkus, panduan Quarkus OpenShift, dan panduan Knative Quarkus. Pengembang dapat menyebarkan aplikasi ke kluster Kubernetes target dengan menerapkan manifes yang dihasilkan.
Untuk menghasilkan sumber daya Kubernetes yang sesuai, gunakan perintah berikut untuk menambahkan quarkus-kubernetes
ekstensi dan container-image-jib
di terminal lokal Anda:
quarkus ext add kubernetes container-image-jib
Quarkus memodifikasi POM untuk memastikan ekstensi ini terdaftar sebagai <dependencies>
. Jika diminta untuk menginstal sesuatu yang disebut JBang
, jawab ya dan izinkan untuk diinstal.
Output akan terlihat seperti contoh berikut:
[SUCCESS] ✅ Extension io.quarkus:quarkus-kubernetes has been installed
[SUCCESS] ✅ Extension io.quarkus:quarkus-container-image-jib has been installed
Untuk memverifikasi ekstensi ditambahkan, Anda dapat menjalankan git diff
dan memeriksa output.
Sebagai teknologi asli cloud, Quarkus mendukung gagasan profil konfigurasi. Quarkus memiliki tiga profil bawaan berikut:
dev
- Diaktifkan saat dalam mode pengembangantest
- Diaktifkan saat menjalankan pengujianprod
- Profil default saat tidak berjalan dalam mode pengembangan atau pengujian
Quarkus mendukung sejumlah profil bernama, sesuai kebutuhan.
Langkah-langkah yang tersisa di bagian ini mengarahkan Anda untuk menyesuaikan nilai dalam file src/main/resources/application.properties .
prod.
Awalan menunjukkan bahwa properti ini aktif saat berjalan di prod
profil. Untuk informasi selengkapnya tentang profil konfigurasi, lihat dokumentasi Quarkus.
Konfigurasi database
Periksa variabel konfigurasi database berikut. Properti %prod.quarkus.datasource.jdbc.url
terkait koneksi database dan %prod.quarkus.datasource.username
nilai baca dari variabel AZURE_POSTGRESQL_HOST
lingkungan , , AZURE_POSTGRESQL_PORT
AZURE_POSTGRESQL_DATABASE
, dan AZURE_POSTGRESQL_USERNAME
, masing-masing. Variabel lingkungan ini memetakan ke nilai rahasia yang menyimpan informasi koneksi database. Untuk alasan keamanan, ekstensi ini dibuat secara otomatis menggunakan ekstensi tanpa kata sandi Konektor Layanan seperti yang ditunjukkan di tempat lain dalam artikel ini.
# Database configurations
%prod.quarkus.datasource.jdbc.url=jdbc:postgresql://${AZURE_POSTGRESQL_HOST}:${AZURE_POSTGRESQL_PORT}/${AZURE_POSTGRESQL_DATABASE}?\
authenticationPluginClassName=com.azure.identity.extensions.jdbc.postgresql.AzurePostgresqlAuthenticationPlugin\
&sslmode=require
%prod.quarkus.datasource.username=${AZURE_POSTGRESQL_USERNAME}
%prod.quarkus.datasource.jdbc.acquisition-timeout=10
%prod.quarkus.hibernate-orm.database.generation=drop-and-create
%prod.quarkus.hibernate-orm.sql-load-script=import.sql
Konfigurasi Kubernetes
Periksa variabel konfigurasi Kubernetes berikut. service-type
diatur ke load-balancer
untuk mengakses aplikasi secara eksternal. Ganti nilai <service-account-name>
dan <secret-name>
dengan nilai nilai aktual yang Anda salin di bagian sebelumnya.
# Kubernetes configurations
%prod.quarkus.kubernetes.deployment-target=kubernetes
%prod.quarkus.kubernetes.service-type=load-balancer
%prod.quarkus.kubernetes.labels."azure.workload.identity/use"=true
%prod.quarkus.kubernetes.service-account=<service-account-name>
%prod.quarkus.kubernetes.env.mapping.AZURE_CLIENT_ID.from-secret=<secret-name>
%prod.quarkus.kubernetes.env.mapping.AZURE_CLIENT_ID.with-key=AZURE_POSTGRESQL_CLIENTID
%prod.quarkus.kubernetes.env.mapping.AZURE_POSTGRESQL_HOST.from-secret=<secret-name>
%prod.quarkus.kubernetes.env.mapping.AZURE_POSTGRESQL_HOST.with-key=AZURE_POSTGRESQL_HOST
%prod.quarkus.kubernetes.env.mapping.AZURE_POSTGRESQL_PORT.from-secret=<secret-name>
%prod.quarkus.kubernetes.env.mapping.AZURE_POSTGRESQL_PORT.with-key=AZURE_POSTGRESQL_PORT
%prod.quarkus.kubernetes.env.mapping.AZURE_POSTGRESQL_DATABASE.from-secret=<secret-name>
%prod.quarkus.kubernetes.env.mapping.AZURE_POSTGRESQL_DATABASE.with-key=AZURE_POSTGRESQL_DATABASE
%prod.quarkus.kubernetes.env.mapping.AZURE_POSTGRESQL_USERNAME.from-secret=<secret-name>
%prod.quarkus.kubernetes.env.mapping.AZURE_POSTGRESQL_USERNAME.with-key=AZURE_POSTGRESQL_USERNAME
Konfigurasi Kubernetes lainnya menentukan pemetaan nilai rahasia ke variabel lingkungan dalam aplikasi Quarkus. <secret-name>
Rahasia berisi informasi koneksi database. Tombol AZURE_POSTGRESQL_CLIENTID
, , AZURE_POSTGRESQL_PORT
AZURE_POSTGRESQL_HOST
, AZURE_POSTGRESQL_DATABASE
, dan AZURE_POSTGRESQL_USERNAME
dalam peta rahasia ke AZURE_CLIENT_ID
variabel lingkungan , , AZURE_POSTGRESQL_HOST
AZURE_POSTGRESQL_PORT
, AZURE_POSTGRESQL_DATABASE
, dan AZURE_POSTGRESQL_USERNAME
masing-masing.
Untuk memeriksa rahasia secara langsung dengan kubectl, gunakan perintah yang mirip dengan contoh berikut:
kubectl -n ${AKS_NS} get secret <secret-name> -o jsonpath="{.data.AZURE_POSTGRESQL_USERNAME}" | base64 --decode
Konfigurasi gambar kontainer
Sebagai teknologi asli cloud, Quarkus mendukung pembuatan gambar kontainer OCI yang kompatibel dengan Docker. Ganti nilai <LOGIN_SERVER_VALUE>
dengan nilai ${LOGIN_SERVER}
aktual variabel lingkungan.
# Container Image Build
%prod.quarkus.container-image.build=true
%prod.quarkus.container-image.image=<LOGIN_SERVER_VALUE>/todo-quarkus-aks:1.0
Sebagai pemeriksaan akhir, ketika Anda menyelesaikan semua substitusi yang diperlukan dalam application.properties, tidak boleh ada kemunculan <
karakter. Jika ada, periksa kembali apakah Anda menyelesaikan semua substitusi yang diperlukan.
Buat gambar kontainer dan dorong ke registri kontainer
Sekarang, gunakan perintah berikut untuk membangun aplikasi itu sendiri. Perintah ini menggunakan ekstensi Kubernetes dan Jib untuk membangun gambar kontainer.
quarkus build --no-tests
Output harus diakhir dengan BUILD SUCCESS
. File manifes Kubernetes dihasilkan dalam target/kubernetes, seperti yang ditunjukkan pada contoh berikut:
tree target/kubernetes
target/kubernetes
├── kubernetes.json
└── kubernetes.yml
0 directories, 2 files
Anda dapat memverifikasi apakah gambar kontainer dihasilkan juga menggunakan docker
baris perintah (CLI). Output terlihat mirip dengan contoh berikut:
docker images | grep todo-quarkus-aks
<LOGIN_SERVER_VALUE>/todo-quarkus-aks 1.0 b13c389896b7 18 minutes ago 422MB
Dorong gambar kontainer ke registri kontainer dengan menggunakan perintah berikut:
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
Output akan terlihat mirip dengan contoh berikut:
The push refers to repository [<LOGIN_SERVER_VALUE>/todo-quarkus-aks]
dfd615499b3a: Pushed
56f5cf1aa271: Pushed
4218d39b228e: Pushed
b0538737ed64: Pushed
d13845d85ee5: Pushed
60609ec85f86: Pushed
1.0: digest: sha256:0ffd70d6d5bb3a4621c030df0d22cf1aa13990ca1880664d08967bd5bab1f2b6 size: 1995
Sekarang setelah Anda mendorong aplikasi ke registri kontainer, Anda dapat memberi tahu AKS untuk menjalankan aplikasi.
Menyebarkan aplikasi Quarkus ke AKS
Langkah-langkah di bagian ini memperlihatkan kepada Anda cara menjalankan aplikasi sampel Quarkus pada sumber daya Azure yang Anda buat.
Gunakan kubectl apply untuk menyebarkan aplikasi Quarkus ke AKS
Sebarkan sumber daya Kubernetes menggunakan kubectl
pada baris perintah, seperti yang ditunjukkan dalam contoh berikut:
kubectl apply -f target/kubernetes/kubernetes.yml -n ${AKS_NS}
Output akan terlihat seperti contoh berikut:
service/quarkus-todo-demo-app-aks created
deployment.apps/quarkus-todo-demo-app-aks created
Verifikasi bahwa aplikasi berjalan dengan menggunakan perintah berikut:
kubectl -n $AKS_NS get pods
Jika nilai STATUS
bidang menunjukkan apa pun selain Running
, pecahkan masalah dan atasi masalah sebelum melanjutkan. Ini mungkin membantu memeriksa log pod dengan menggunakan perintah berikut:
kubectl -n $AKS_NS logs $(kubectl -n $AKS_NS get pods | grep quarkus-todo-demo-app-aks | cut -d " " -f1)
EXTERNAL-IP
Dapatkan untuk mengakses aplikasi Todo dengan menggunakan perintah berikut:
kubectl get svc -n ${AKS_NS}
Output akan terlihat seperti contoh berikut:
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
Anda dapat menggunakan perintah berikut untuk menyimpan nilai EXTERNAL-IP
ke variabel lingkungan sebagai URL yang sepenuhnya memenuhi syarat:
export QUARKUS_URL=http://$(kubectl get svc -n ${AKS_NS} | grep quarkus-todo-demo-app-aks | cut -d " " -f10)
echo $QUARKUS_URL
Buka browser web baru ke nilai ${QUARKUS_URL}
. Kemudian, tambahkan item todo baru dengan teks Deployed the Todo app to AKS
. Selain itu Introduction to Quarkus Todo App
, pilih item sebagai selesai.
Akses RESTful API (/api
) untuk mendapatkan semua item todo yang disimpan dalam database Azure PostgreSQL, seperti yang ditunjukkan dalam contoh berikut:
curl --verbose ${QUARKUS_URL}/api | jq .
Output akan terlihat seperti contoh berikut:
* 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
}
]
Verifikasi bahwa database diperbarui
Jalankan perintah berikut untuk memverifikasi bahwa database sekarang diperbarui dengan benar:
ACCESS_TOKEN=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken)
az postgres flexible-server execute \
--admin-user $ENTRA_ADMIN_NAME \
--admin-password $ACCESS_TOKEN \
--name $DB_SERVER_NAME \
--database-name $DB_NAME \
--querytext "select * from todo;"
Jika Anda diminta untuk menginstal ekstensi, jawab Y.
Output akan terlihat mirip dengan contoh berikut, dan harus menyertakan item yang sama dalam GUI aplikasi Todo dan output curl
perintah sebelumnya:
Successfully connected to <DB_SERVER_NAME>.
Ran Database Query: 'select * from todo;'
Retrieving first 30 rows of query output, if applicable.
Closed the connection to <DB_SERVER_NAME>
[
{
"completed": false,
"id": 2,
"ordering": 1,
"title": "Quarkus on Azure App Service",
"url": "https://learn.microsoft.com/en-us/azure/developer/java/eclipse-microprofile/deploy-microprofile-quarkus-java-app-with-maven-plugin"
},
{
"completed": false,
"id": 3,
"ordering": 2,
"title": "Quarkus on Azure Container Apps",
"url": "https://learn.microsoft.com/en-us/training/modules/deploy-java-quarkus-azure-container-app-postgres/"
},
{
"completed": false,
"id": 4,
"ordering": 3,
"title": "Quarkus on Azure Functions",
"url": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-create-first-quarkus"
},
{
"completed": false,
"id": 5,
"ordering": 5,
"title": "Deployed the Todo app to AKS",
"url": null
},
{
"completed": true,
"id": 1,
"ordering": 0,
"title": "Introduction to Quarkus Todo App",
"url": null
}
]
Setelah selesai, hapus aturan firewall yang memungkinkan alamat IP lokal Anda mengakses instans Server Fleksibel Azure Database for PostgreSQL dengan menggunakan perintah berikut:
az postgres flexible-server firewall-rule delete \
--resource-group $RESOURCE_GROUP_NAME \
--name $DB_SERVER_NAME \
--rule-name $DB_SERVER_NAME-database-allow-local-ip \
--yes
Membersihkan sumber daya
Untuk menghindari biaya Azure, Anda harus membersihkan sumber daya yang tidak diperlukan. Ketika kluster tidak lagi diperlukan, gunakan perintah az group delete untuk menghapus grup sumber daya, layanan kontainer, kontainer registri dan semua sumber daya terkait.
git reset --hard
docker rmi ${TODO_QUARKUS_TAG}:1.0
docker rmi postgres
az identity delete --ids ${UAMI_RESOURCE_ID}
az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait
Anda mungkin juga ingin menggunakan docker rmi
untuk menghapus gambar postgres
kontainer dan testcontainers
dihasilkan oleh mode pengembangan Quarkus.
Langkah berikutnya
Azure Kubernetes Service