Menyebarkan aplikasi Java secara manual dengan Open Liberty atau WebSphere Liberty pada kluster Azure Kubernetes Service
Artikel ini menjelaskan cara:
- Menjalankan aplikasi Java, Java EE, Jakarta EE, atau MicroProfile Anda pada runtime Open Liberty atau WebSphere Liberty.
- Buat gambar Docker aplikasi menggunakan gambar kontainer Liberty.
- Sebarkan aplikasi dalam kontainer ke kluster Azure Kubernetes Service (AKS) menggunakan Operator Liberty.
Operator Liberty menyederhanakan penyebaran dan manajemen aplikasi yang berjalan pada kluster Kubernetes. Dengan Operator Open Liberty atau Operator WebSphere Liberty, Anda juga dapat melakukan operasi yang lebih canggih, seperti mengumpulkan jejak dan cadangan.
Untuk informasi lebih lanjut tentang Open Liberty, lihat laman proyek Open Liberty. Untuk informasi lebih lanjut tentang IBM WebSphere Liberty, lihat laman produk WebSphere Liberty.
Artikel ini adalah panduan manual langkah demi langkah untuk menjalankan Open/WebSphere Liberty di Azure. Untuk solusi yang lebih otomatis yang mempercepat perjalanan Anda ke AKS, lihat Menyebarkan aplikasi Java dengan Open Liberty/WebSphere Liberty pada kluster Azure Kubernetes Service (AKS).
Artikel ini dimaksudkan untuk membantu Anda dengan cepat sampai ke penyebaran. Sebelum pergi ke produksi, Anda harus menjelajahi Tuning Liberty.
Jika Anda tidak memiliki langganan Azure, buatlah akun gratis sebelum Anda memulai.
Prasyarat
- Siapkan komputer lokal dengan Windows, macOS, atau Linux yang terinstal.
- Instal Azure CLI. Jika Anda menjalankan di Windows atau macOS, pertimbangkan untuk menjalankan Azure CLI dalam kontainer Docker. Untuk informasi lebih lanjut, lihat Cara menjalankan Azure CLI di kontainer Docker.
- Saat Anda diminta, instal ekstensi Azure CLI pada penggunaan pertama. Untuk informasi selengkapnya tentang ekstensi, lihat Menggunakan dan mengelola ekstensi dengan Azure CLI.
- Jalankan versi az untuk menemukan versi dan pustaka dependen yang diinstal. Untuk meningkatkan ke versi terbaru, jalankan peningkatan az. Artikel ini memerlukan setidaknya versi 2.31.0 dari Azure CLI.
- Instal implementasi Java SE, versi 17 atau yang lebih baru (misalnya, Eclipse Open J9).
- Instal Maven versi 3.5.0 atau yang lebih baru.
- Pasang Docker untuk OS Anda.
- Pastikan Git diinstal.
- Pastikan Anda diberi
Owner
peran atauContributor
peran danUser Access Administrator
dalam langganan. Anda dapat memverifikasi penetapan dengan mengikuti langkah-langkah dalam Mencantumkan penetapan peran Azure menggunakan portal Azure.
Catatan
Anda juga dapat menjalankan perintah dalam artikel ini dari Azure Cloud Shell. Pendekatan ini memiliki semua alat prasyarat yang telah diinstal sebelumnya, dengan pengecualian Docker.
Masuk ke Azure
Jika Anda belum melakukannya, masuk ke langganan Azure Anda dengan menggunakan perintah az login dan ikuti petunjuk di layar.
az login
Catatan
Anda dapat menjalankan sebagian besar perintah Azure CLI di PowerShell sama seperti di Bash. Perbedaan hanya ada saat menggunakan variabel. Di bagian berikut, perbedaan akan ditangani di tab yang berbeda saat diperlukan.
Jika Anda memiliki beberapa penyewa Azure yang terkait dengan kredensial Azure, Anda harus menentukan penyewa mana yang ingin Anda masuki. Anda dapat melakukan ini dengan --tenant
opsi . Contohnya,az login --tenant contoso.onmicrosoft.com
.
Buat grup sumber daya
Grup sumber daya Azure adalah grup logis tempat sumber daya Azure disebarkan dan dikelola.
Buat grup sumber daya dengan nama java-liberty-project menggunakan perintah az group create di lokasi eastus. Grup sumber daya ini digunakan nanti untuk membuat instans Azure Container Registry (ACR) dan kluster AKS.
export RESOURCE_GROUP_NAME=java-liberty-project
az group create --name $RESOURCE_GROUP_NAME --location eastus
Membuat instance ACR
Gunakan perintah az acr create untuk membuat instans ACR. Contoh berikut membuat instans ACR bernama namaunikacranda. Pastikan namaunikacranda unik di Azure.
export REGISTRY_NAME=youruniqueacrname
az acr create \
--resource-group $RESOURCE_GROUP_NAME \
--name $REGISTRY_NAME \
--sku Basic \
--admin-enabled
Setelah beberapa saat, Anda akan melihat output JSON yang berisi baris berikut:
"provisioningState": "Succeeded",
"publicNetworkAccess": "Enabled",
"resourceGroup": "java-liberty-project",
Menyambungkan ke instans ACR
Anda perlu masuk ke instans ACR sebelum dapat mendorong gambar ke instans tersebut. Jalankan perintah berikut untuk memverifikasi koneksi:
export LOGIN_SERVER=$(az acr show \
--name $REGISTRY_NAME \
--query 'loginServer' \
--output tsv)
export USER_NAME=$(az acr credential show \
--name $REGISTRY_NAME \
--query 'username' \
--output tsv)
export PASSWORD=$(az acr credential show \
--name $REGISTRY_NAME \
--query 'passwords[0].value' \
--output tsv)
docker login $LOGIN_SERVER -u $USER_NAME -p $PASSWORD
Anda akan melihat Login Succeeded
di akhir output perintah jika Anda berhasil masuk ke instans ACR.
Membuat kluster AKS
Gunakan perintah az aks create untuk membuat kluster AKS. Contoh berikut membuat kluster bernama myAKSCluster dengan satu simpul. Perintah ini memerlukan waktu 2-3 menit untuk diselesaikan.
export CLUSTER_NAME=myAKSCluster
az aks create \
--resource-group $RESOURCE_GROUP_NAME \
--name $CLUSTER_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_java-liberty-project_myAKSCluster_eastus",
"privateFqdn": null,
"provisioningState": "Succeeded",
"resourceGroup": "java-liberty-project",
Menyambungkan ke kluster AKS
Untuk mengelola kluster Kubernetes, Anda menggunakan kubectl, klien baris perintah Kubernetes. Untuk menginstal kubectl
secara lokal, gunakan perintah az aks install-cli , seperti yang ditunjukkan dalam contoh berikut:
az aks install-cli
Untuk mengonfigurasi kubectl
agar tersambung ke kluster Kubernetes, gunakan perintah az aks get-credentials. 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
Catatan
Perintah di atas menggunakan lokasi default untuk file konfigurasi Kube, yaitu ~/.kube/config
. Anda dapat menentukan lokasi yang berbeda untuk file konfigurasi Kubernetes menggunakan --file
.
Untuk memverifikasi sambungan ke kluster Anda, gunakan perintah kubectl get untuk mengembalikan daftar node kluster.
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.23.8
Membuat Azure SQL Database
Di bagian ini, Anda membuat database tunggal Azure SQL Database untuk digunakan dengan aplikasi Anda.
Buat database tunggal di Azure SQL Database dengan mengikuti langkah-langkah Azure CLI atau PowerShell di Mulai Cepat: Membuat database tunggal Azure SQL Database. Gunakan petunjuk berikut saat Anda menelusuri artikel, lalu kembali ke dokumen ini setelah Anda membuat dan mengonfigurasi server database.
Saat Anda mencapai bagian Atur nilai parameter dari mulai cepat, tulis semua variabel dalam contoh kode berlabel
Variable block
, termasuklocation
, ,database
resourceGroup
,server
,login
, danpassword
. Artikel ini merujuk ke databaseresourceGroup
sebagai<db-resource-group>
.Setelah Anda membuat server database, buka server yang baru dibuat di portal Azure. Di panel Jaringan, di bawah tab Koneksi ivity, atur versi TLS Minimum ke TLS 1.0.
Di panel Jaringan , di bawah tab Akses publik, pilih Izinkan layanan dan sumber daya Azure untuk mengakses server ini.
Jika Anda ingin menguji aplikasi secara lokal, pastikan alamat IPv4 klien Anda berada dalam daftar yang diizinkan dari aturan Firewall
Simpan perubahan jaringan Anda.
Gunakan perintah berikut untuk membuat variabel lingkungan untuk nama grup sumber daya untuk database:
export DB_RESOURCE_GROUP_NAME=<db-resource-group>
Sekarang setelah Anda membuat database dan kluster AKS, Anda dapat menyiapkan AKS untuk menghosting Liberty.
Memasang Open Liberty Operator
Setelah membuat dan menyambungkan ke kluster, instal Operator Open Liberty.
Instal Operator Open Liberty dengan menjalankan perintah berikut:
# Install cert-manager Operator
CERT_MANAGER_VERSION=v1.11.2
kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/${CERT_MANAGER_VERSION}/cert-manager.yaml
# Install Open Liberty Operator
export OPERATOR_VERSION=1.2.2
mkdir -p overlays/watch-all-namespaces
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/overlays/watch-all-namespaces/olo-all-namespaces.yaml -q -P ./overlays/watch-all-namespaces
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/overlays/watch-all-namespaces/cluster-roles.yaml -q -P ./overlays/watch-all-namespaces
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/overlays/watch-all-namespaces/kustomization.yaml -q -P ./overlays/watch-all-namespaces
mkdir base
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/base/kustomization.yaml -q -P ./base
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/base/open-liberty-crd.yaml -q -P ./base
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/base/open-liberty-operator.yaml -q -P ./base
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/base/open-liberty-roles.yaml -q -P ./base
kubectl create namespace open-liberty
kubectl apply --server-side -k overlays/watch-all-namespaces
Mengonfigurasi dan membuat gambar aplikasi
Untuk menyebarkan dan menjalankan aplikasi Liberty Anda di kluster AKS, jadikan aplikasi Anda sebagai citra Docker menggunakan citra kontainer Open Liberty atau citra kontainer WebSphere Liberty.
Ikuti langkah-langkah dalam bagian ini untuk menyebarkan aplikasi sampel pada runtime Liberty. Langkah-langkah ini menggunakan Maven.
Lihat aplikasinya
Kloning kode sampel untuk panduan ini. Sampelnya ada di GitHub. Terdapat beberapa sampel di repositori. Artikel ini menggunakan java-app. Berikut struktur file aplikasi tersebut.
git clone https://github.com/Azure-Samples/open-liberty-on-aks.git
cd open-liberty-on-aks
git checkout 20230830
Jika Anda melihat pesan tentang berada dalam status "HEAD yang terlepas", pesan ini aman untuk diabaikan. Ini hanya berarti Anda memeriksa tag.
java-app
├─ src/main/
│ ├─ aks/
│ │ ├─ db-secret.yaml
│ │ ├─ openlibertyapplication.yaml
│ ├─ docker/
│ │ ├─ Dockerfile
│ │ ├─ Dockerfile-wlp
│ ├─ liberty/config/
│ │ ├─ server.xml
│ ├─ java/
│ ├─ resources/
│ ├─ webapp/
├─ pom.xml
Direktori java, resources, dan webapp berisi kode sumber dari contoh aplikasi. Kode mendeklarasikan dan menggunakan sumber data bernama jdbc/JavaEECafeDB
.
Di direktori aks, ada dua file penyebaran. db-secret.xml digunakan untuk membuat Rahasia Kubernetes dengan kredensial koneksi DB. File openlibertyapplication.yaml digunakan untuk menyebarkan gambar aplikasi. Di direktori docker, ada dua file untuk membuat gambar aplikasi dengan Open Liberty atau WebSphere Liberty.
Di direktori liberty/config, server.xml digunakan untuk mengonfigurasi koneksi DB untuk kluster Open Liberty dan WebSphere Liberty.
Membangun proyek
Setelah mengumpulkan properti yang diperlukan, Anda dapat membangun aplikasi. File POM untuk proyek membaca banyak variabel dari lingkungan. Sebagai bagian dari build Maven, variabel ini digunakan untuk mengisi nilai dalam file YAML yang terletak di src/main/aks. Anda dapat melakukan sesuatu yang serupa untuk aplikasi Anda di luar Maven jika mau.
cd <path-to-your-repo>/java-app
# The following variables will be used for deployment file generation into target/
export LOGIN_SERVER=${LOGIN_SERVER}
export REGISTRY_NAME=${REGISTRY_NAME}
export USER_NAME=${USER_NAME}
export PASSWORD=${PASSWORD}
export DB_SERVER_NAME=<Server name>.database.windows.net
export DB_NAME=<Database name>
export DB_USER=<Server admin login>@<Server name>
export DB_PASSWORD=<Server admin password>
mvn clean install
(Opsional) Menguji proyek Anda secara lokal
Anda sekarang dapat menjalankan dan menguji proyek secara lokal sebelum menyebarkan ke Azure. Untuk kenyamanan, gunakan liberty-maven-plugin
. Untuk mempelajari lebih lanjut tentang liberty-maven-plugin
, lihat Membangun aplikasi web dengan Maven. Untuk aplikasi Anda, Anda dapat melakukan sesuatu yang serupa menggunakan mekanisme lain seperti IDE lokal Anda. Anda juga dapat mempertimbangkan untuk menggunakan opsi yang liberty:devc
ditujukan untuk pengembangan dengan kontainer. Anda dapat membaca lebih lanjut tentang liberty:devc
di dokumen Liberty.
Catatan
Jika Anda memilih penyebaran database "tanpa server", verifikasi bahwa database SQL Anda belum memasuki mode jeda. Salah satu cara untuk melakukan ini adalah dengan masuk ke editor kueri database seperti yang dijelaskan dalam Mulai Cepat: Gunakan editor kueri portal Azure (pratinjau) untuk mengkueri Azure SQL Database.
Mulai aplikasi menggunakan
liberty:run
.liberty:run
menggunakan variabel lingkungan yang ditentukan pada langkah sebelumnya.cd <path-to-your-repo>/java-app mvn liberty:run
Verifikasi aplikasi berfungsi seperti yang diharapkan. Anda akan melihat pesan yang serupa dengan
[INFO] [AUDIT] CWWKZ0003I: The application javaee-cafe updated in 1.930 seconds.
di output perintah jika berhasil. Bukahttp://localhost:9080/
di browser Anda untuk memverifikasi aplikasi dapat diakses dan semua fungsi berfungsi.Tekan Ctrl+C untuk menghentikan.
Membangun gambar untuk penyebaran AKS
Sekarang Anda dapat menjalankan docker buildx build
perintah untuk membangun gambar, seperti yang ditunjukkan dalam contoh berikut:
cd <path-to-your-repo>/java-app/target
# If you are running with Open Liberty
docker buildx --platform linux/amd64 build -t javaee-cafe:v1 --pull --file=Dockerfile .
# If you are running with WebSphere Liberty
docker buildx --platform linux/amd64 build -t javaee-cafe:v1 --pull --file=Dockerfile-wlp .
(Opsional) Menguji gambar Docker secara lokal
Sekarang Anda dapat menggunakan langkah-langkah berikut untuk menguji gambar Docker secara lokal sebelum menyebarkan ke Azure.
Jalankan gambar menggunakan perintah berikut. Perintah ini menggunakan variabel lingkungan yang ditentukan sebelumnya.
docker run -it --rm -p 9080:9080 \ -e DB_SERVER_NAME=${DB_SERVER_NAME} \ -e DB_NAME=${DB_NAME} \ -e DB_USER=${DB_USER} \ -e DB_PASSWORD=${DB_PASSWORD} \ javaee-cafe:v1
Setelah kontainer dimulai, buka
http://localhost:9080/
di browser Anda untuk mengakses aplikasi.Tekan Ctrl+C untuk menghentikan.
Mengunggah gambar ke ACR
Selanjutnya, unggah gambar bawaan ke ACR yang Anda buat di langkah-langkah sebelumnya.
Jika Anda belum melakukannya, masuk ke registri kontainer dengan menggunakan perintah berikut:
docker login -u ${USER_NAME} -p ${PASSWORD} ${LOGIN_SERVER}
Gunakan perintah berikut untuk menandai dan mendorong gambar kontainer:
docker tag javaee-cafe:v1 ${LOGIN_SERVER}/javaee-cafe:v1
docker push ${LOGIN_SERVER}/javaee-cafe:v1
Menyebarkan aplikasi ke kluster AKS
Gunakan langkah-langkah berikut untuk menyebarkan aplikasi Liberty pada kluster AKS:
Lampirkan instans ACR ke kluster AKS sehingga kluster AKS diautentikasi untuk menarik gambar dari instans ACR, seperti yang ditunjukkan dalam contoh berikut:
az aks update \ --resource-group $RESOURCE_GROUP_NAME \ --name $CLUSTER_NAME \ --attach-acr $REGISTRY_NAME
Terapkan file rahasia dan penyebaran DB dengan menjalankan perintah berikut:
cd <path-to-your-repo>/java-app/target # Apply DB secret kubectl apply -f db-secret.yaml # Apply deployment file kubectl apply -f openlibertyapplication.yaml
Tentukan
OpenLibertyApplication
apakah instans dibuat dengan menjalankan perintah berikut:kubectl get openlibertyapplication javaee-cafe-cluster
Anda harus melihat output yang mirip dengan berikut ini:
NAME IMAGE EXPOSED RECONCILED AGE javaee-cafe-cluster youruniqueacrname.azurecr.io/javaee-cafe:1.0.25 True 59s
Tentukan apakah penyebaran yang dibuat oleh Operator siap dengan menjalankan perintah berikut:
kubectl get deployment javaee-cafe-cluster --watch
Anda harus melihat output yang mirip dengan berikut ini:
NAME READY UP-TO-DATE AVAILABLE AGE javaee-cafe-cluster 0/3 3 0 20s
Tunggu hingga Anda melihat
3/3
di bawahREADY
kolom dan3
di bawahAVAILABLE
kolom, lalu gunakan Ctrl+C untuk menghentikankubectl
proses pengawasan.
Uji aplikasi
Ketika aplikasi berjalan, layanan penyeimbang Kubernetes memperlihatkan front-end aplikasi ke internet. Proses ini bisa memakan waktu cukup lama.
Untuk memantau kemajuan, gunakan perintah kubectl get service dengan --watch
argumen , seperti yang ditunjukkan dalam contoh berikut:
kubectl get service javaee-cafe-cluster --watch
Anda harus melihat output yang mirip dengan berikut ini:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
javaee-cafe-cluster LoadBalancer 10.0.251.169 52.152.189.57 80:31732/TCP 68s
Setelah alamat EXTERNAL-IP berubah dari tertunda ke alamat IP publik aktual, gunakan Ctrl+C untuk menghentikan kubectl
proses tontonan.
Jika beberapa waktu berlalu antara menjalankan langkah-langkah di bagian ini dan yang sebelumnya, pastikan database aktif, jika perlu. Lihat catatan sebelumnya mengenai jeda database.
Buka browser web ke alamat IP eksternal layanan Anda ( 52.152.189.57
pada contoh di atas) untuk melihat halaman beranda aplikasi. Jika halaman tidak dimuat dengan benar, itu karena aplikasi dimulai. Anda dapat menunggu beberapa saat dan menyegarkan halaman nanti. Anda akan melihat nama Pod dari replika aplikasi Anda yang ditampilkan di kiri atas halaman. Tunggu beberapa menit dan refresh halaman untuk melihat nama Pod yang berbeda yang ditampilkan karena penyeimbang muatan yang disediakan oleh kluster AKS.
Catatan
Saat ini, aplikasi tidak menggunakan HTTPS. Kami menyarankan agar Anda mengaktifkan TLS dengan sertifikat Anda sendiri. Untuk informasi selengkapnya, lihat Menggunakan TLS dengan pengontrol ingress di Azure Kubernetes Service (AKS).
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, registri kontainer, database, dan semua sumber daya terkait.
az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait
az group delete --name $DB_RESOURCE_GROUP_NAME --yes --no-wait
Langkah berikutnya
Anda dapat mempelajari selengkapnya dari referensi yang digunakan dalam panduan ini:
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk