Menggunakan Java EE JCache dengan Open Liberty atau WebSphere Liberty pada kluster Azure Kubernetes Service (AKS)
Artikel ini menjelaskan cara menggunakan Java EE JCache dalam aplikasi kontainer yang disebarkan ke AKS.
Dalam panduan ini Anda akan:
- Buat infrastruktur untuk menjalankan aplikasi Java, Java EE, Jakarta EE, atau MicroProfile Anda pada runtime Open Liberty atau WebSphere Liberty.
- Gunakan Java EE JCache yang didukung oleh Azure Cache for Redis sebagai cache sesi.
- Bangun image Docker aplikasi menggunakan kontainer citra Open Liberty atau WebSphere Liberty.
- Menyebarkan aplikasi terkontainer ke kluster AKS menggunakan Open Liberty Operator.
Artikel ini dimaksudkan untuk membantu Anda dengan cepat sampai ke penyebaran. Sebelum pergi ke produksi, Anda harus menjelajahi Tuning Liberty.
Jika Anda tertarik untuk memberikan umpan balik atau bekerja erat pada skenario migrasi Anda dengan tim teknik yang mengembangkan WebSphere di solusi Azure, isi survei singkat ini tentang migrasi WebSphere dan sertakan informasi kontak Anda. Tim manajer program, arsitek, dan insinyur akan segera menghubungi Anda untuk memulai kolaborasi yang erat.
Prasyarat
- Langganan Azure. Jika Anda tidak memiliki langganan Azure, buatlah akun gratis sebelum Anda memulai.
- Siapkan komputer lokal dengan sistem operasi seperti Unix yang terinstal - misalnya, Ubuntu, macOS, atau Subsistem Windows untuk Linux.
- Instal Azure CLI untuk menjalankan perintah Azure CLI.
- Masuk dengan Azure CLI dengan menggunakan perintah az login . Untuk menyelesaikan proses autentikasi, ikuti langkah-langkah yang ditampilkan di terminal Anda. Lihat Masuk ke Azure dengan Azure CLI untuk opsi masuk lainnya.
- 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.
- Instal implementasi Java SE versi 17 atau yang lebih baru - misalnya, Microsoft build OpenJDK.
- Instal Maven 3.5.0 atau yang lebih tinggi.
- Pasang Docker untuk OS Anda.
- Pastikan Git diinstal.
- Pastikan Anda telah diberi
Owner
peran atauContributor
User Access Administrator
peran untuk langganan. Anda dapat memverifikasi tugas Anda dengan mengikuti langkah-langkah dalam Mencantumkan penetapan peran untuk pengguna atau grup.
Membuat infrastruktur
Langkah-langkah di bagian ini memandu Anda untuk membuat infrastruktur aplikasi di Azure. Setelah menyelesaikan langkah-langkah ini, Anda akan memiliki Azure Container Registry, kluster Azure Kubernetes Service, dan instans Azure Cache for Redis untuk menjalankan aplikasi sampel.
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
Setelah beberapa saat, Anda akan melihat output JSON yang berisi:
"provisioningState": "Succeeded",
"publicNetworkAccess": "Enabled",
"resourceGroup": "java-liberty-project",
Atau, Anda dapat membuat instans registri kontainer Azure dengan mengikuti langkah-langkah di Mulai Cepat: Membuat registri kontainer Azure menggunakan portal Azure.
Menyambungkan ke instans ACR
Anda harus 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 \
--resource-group $RESOURCE_GROUP_NAME \
--query 'loginServer' \
--output tsv)
az acr login \
--name $REGISTRY_NAME \
--resource-group $RESOURCE_GROUP_NAME
Catatan
Penggunaan kredensial nama pengguna dan kata sandi untuk memberikan akses ke registri kontainer tidak disarankan. Jika persyaratan penggunaan khusus Anda menyarankan akses berbasis kredensial adalah pendekatan terbaik, Anda dapat memperoleh nama pengguna dan kata sandi menggunakan az acr credential show
dan menggunakan nilai-nilai ini dengan docker login
.
Anda akan melihat Login Succeeded
di akhir output perintah jika Anda berhasil masuk ke instans ACR.
Jika Anda melihat masalah masuk ke registri kontainer Azure, lihat Memecahkan masalah masuk registri.
Membuat kluster AKS
Gunakan perintah az aks create untuk membuat kluster AKS dan memberinya izin penarikan gambar dari instans ACR. 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 \
--attach-acr $REGISTRY_NAME
Setelah beberapa menit, perintah menyelesaikan dan mengembalikan informasi berformat JSON tentang kluster, termasuk baris 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 memasang kubectl
secara lokal, gunakan perintah az aks install-cli:
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
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 Sudah Siap.
NAME STATUS ROLES AGE VERSION
aks-nodepool1-xxxxxxxx-yyyyyyyyyy Ready agent 76s v1.18.10
Memasang Open Liberty Operator
Setelah membuat dan menyambungkan ke kluster, pasang Open Liberty Operator 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.3.3
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
Membuat instans Azure Cache for Redis
Azure Cache for Redis mendukung persistensi HttpSession
untuk aplikasi Java yang berjalan dalam server Open Liberty atau WebSphere Liberty. Ikuti langkah-langkah di bagian ini untuk membuat instans Azure Cache for Redis dan catat informasi koneksinya. Kami akan menggunakan informasi ini nanti.
Ikuti langkah-langkah dalam Mulai Cepat: Gunakan Azure Cache for Redis di Java hingga, tetapi tidak termasuk Memahami sampel Java.
Catatan
Di langkah 6 bagian Buat Azure Cache for Redis, pilih Autentikasi Kunci Akses untuk opsi Autentikasi . Opsi ini diperlukan agar aplikasi sampel tersambung ke instans Azure Cache for Redis menggunakan pustaka klien Redisson . Lihat Konfigurasi Redisson untuk informasi selengkapnya.
Salin Nama host dan Kunci akses utama untuk instans Azure Cache for Redis Anda, lalu jalankan perintah berikut untuk menambahkan variabel lingkungan:
export REDISCACHEHOSTNAME=<YOUR_HOST_NAME> export REDISCACHEKEY=<YOUR_PRIMARY_ACCESS_KEY>
Membangun aplikasi
Ikuti langkah-langkah di bagian ini untuk membangun dan membuat kontainer aplikasi sampel. Langkah-langkah ini menggunakan Maven, liberty-maven-plugin
, dan az acr build. Untuk mempelajari lebih lanjut tentang liberty-maven-plugin
, lihat Membangun aplikasi web dengan Maven.
Lihat aplikasinya
Gunakan perintah berikut untuk mengkloning kode sampel untuk panduan ini. Sampel berada di repositori open-liberty-on-aks di GitHub. Terdapat beberapa sampel di repositori. Artikel ini menggunakan java-app-jcache.
git clone https://github.com/Azure-Samples/open-liberty-on-aks.git
cd open-liberty-on-aks
git checkout 20240909
cd java-app-jcache
Jika Anda melihat pesan tentang berada dalam status "HEAD yang terlepas", pesan ini aman untuk diabaikan. Ini hanya berarti Anda telah memeriksa tag.
Aplikasi ini memiliki struktur file berikut:
java-app-jcache/
├── pom.xml
└── src
└── main
├── aks
│ └── openlibertyapplication.yaml
├── docker
│ ├── Dockerfile
│ └── Dockerfile-wlp
├── java
├── liberty
│ └── config
│ └── server.xml
├── redisson
│ └── redisson-config.yaml
├── resources
└── webapp
Direktori java, sumber daya, dan webapp berisi kode sumber aplikasi sampel.
Dalam direktori aks, file penyebaran openlibertyapplication.yaml digunakan untuk menyebarkan gambar aplikasi.
Di direktori docker, kami menempatkan dua Dockerfiles. Dockerfile digunakan untuk membangun gambar dengan Open Liberty dan Dockerfile-wlp digunakan untuk membangun gambar dengan WebSphere Liberty.
Dalam direktori liberty/config, file server.xml digunakan untuk mengonfigurasi cache sesi untuk kluster Open Liberty dan WebSphere Liberty.
Di direktori redisson, file redisson-config.yaml digunakan untuk mengonfigurasi koneksi instans Azure Cache for Redis.
Meng-kontainer aplikasi
Untuk menyebarkan dan menjalankan aplikasi Liberty Anda pada kluster AKS, gunakan langkah-langkah berikut untuk membuat kontainer aplikasi Anda sebagai gambar Docker. Anda dapat menggunakan gambar kontainer Open Liberty atau gambar kontainer WebSphere Liberty.
Verifikasi bahwa direktori kerja saat ini adalah java-app-jcache di klon lokal Anda.
Jalankan
mvn clean package
untuk mengemas aplikasi.Jalankan
mvn -Predisson validate
untuk menyalin file konfigurasi Redisson ke lokasi yang ditentukan. Langkah ini menyisipkan nilai variabel lingkungan danREDISCACHEKEY
ke dalam file redisson-config.yaml, yang dirujuk oleh file server.xml.REDISCACHEHOSTNAME
Jalankan
mvn liberty:dev
untuk menguji aplikasi. Jika pengujian berhasil, Anda akan melihatThe defaultServer server is ready to run a smarter planet.
dalam output perintah. Anda akan melihat output yang mirip dengan yang berikut ini jika koneksi Redis berhasil.[INFO] [err] [Default Executor-thread-5] INFO org.redisson.Version - Redisson 3.23.4 [INFO] [err] [redisson-netty-2-7] INFO org.redisson.connection.pool.MasterPubSubConnectionPool - 1 connections initialized for redacted.redis.cache.windows.net/20.25.90.239:6380 [INFO] [err] [redisson-netty-2-20] INFO org.redisson.connection.pool.MasterConnectionPool - 24 connections initialized for redacted.redis.cache.windows.net/20.25.90.239:6380
Anda dapat mengunjungi
http://localhost:9080/
untuk melihat aplikasi berjalan, tetapi bukti redis bekerja adalah output yang tercantum dalam langkah sebelumnya.Gunakan Ctrl+C untuk menghentikan aplikasi.
Gunakan perintah berikut untuk mengambil nilai properti
artifactId
dan ditentukan dalam file pom.xmlversion
.export artifactId=$(mvn -q -Dexec.executable=echo -Dexec.args='${project.artifactId}' --non-recursive exec:exec) export version=$(mvn -q -Dexec.executable=echo -Dexec.args='${project.version}' --non-recursive exec:exec)
Jalankan
cd target
untuk mengubah direktori ke build sampel.Jalankan salah satu perintah berikut untuk membangun citra aplikasi dan dorong ke instans ACR.
Gunakan perintah berikut untuk membangun dengan gambar dasar Open Liberty jika Anda lebih suka menggunakan Open Liberty sebagai runtime Sumber terbuka Java™ yang ringan:
# Build and tag application image. This causes the ACR instance to pull the necessary Open Liberty base images. az acr build -t ${artifactId}:${version} -r $REGISTRY_NAME --resource-group $RESOURCE_GROUP_NAME .
Gunakan perintah berikut untuk membangun dengan gambar dasar WebSphere Liberty jika Anda lebih suka menggunakan versi komersial Open Liberty:
# Build and tag application image. This causes the ACR instance to pull the necessary WebSphere Liberty base images. az acr build -t ${artifactId}:${version} -r $REGISTRY_NAME --resource-group $RESOURCE_GROUP_NAME --file=Dockerfile-wlp .
Menyebarkan aplikasi
Ikuti langkah-langkah di bagian ini untuk menyebarkan aplikasi sampel dalam kontainer pada kluster AKS.
Verifikasi bahwa direktori kerja saat ini adalah java-app-jcache/target di klon lokal Anda.
Gunakan perintah berikut untuk membuat rahasia dengan informasi konfigurasi Redisson. Dengan rahasia ini, aplikasi dapat terhubung ke instans Azure Cache for Redis yang dibuat.
export REDISSON_CONFIG_SECRET_NAME=redisson-config-secret kubectl create secret generic ${REDISSON_CONFIG_SECRET_NAME} --from-file=$(pwd)/liberty/wlp/usr/servers/defaultServer/redisson-config.yaml
Gunakan perintah berikut untuk menyebarkan aplikasi Liberty Anda dengan tiga replika ke kluster AKS. Output perintah juga ditampilkan sebaris.
# Set number of application replicas export REPLICAS=3 # Create OpenLibertyApplication "javaee-cafe-jcache-cluster" envsubst < openlibertyapplication.yaml | kubectl create -f - openlibertyapplication.openliberty.io/javaee-cafe-jcache-cluster created # Check if OpenLibertyApplication instance is created kubectl get openlibertyapplication ${artifactId}-cluster NAME IMAGE EXPOSED RECONCILED AGE javaee-cafe-jcache-cluster youruniqueacrname.azurecr.io/javaee-cafe-jcache:1.0.0 True 59s # Check if deployment created by Operator is ready kubectl get deployment ${artifactId}-cluster --watch NAME READY UP-TO-DATE AVAILABLE AGE javaee-cafe-jcache-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 lkubectl get service dengan argumen --watch
.
kubectl get service ${artifactId}-cluster --watch
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
javaee-cafe-jcache-cluster LoadBalancer 10.0.50.29 20.84.16.169 80:31732/TCP 68s
Setelah alamat EXTERNAL-IP berubah dari tertunda ke alamat IP publik aktual, gunakan Ctrl+C untuk menghentikan kubectl
proses tontonan.
Buka browser web ke alamat IP eksternal layanan Anda ( 20.84.16.169
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 replika aplikasi Anda ditampilkan di kiri atas halaman (javaee-cafe-jcache-cluster-77d54bccd4-5xnzx
untuk kasus ini).
Dalam formulir Kopi baru dalam sesi, atur nilai untuk bidang Nama dan Harga, lalu pilih Kirim. Setelah beberapa detik, Anda akan melihat Kirim jumlah: 1 ditampilkan di bagian kiri bawah halaman.
Untuk menunjukkan bahwa cache sesi dipertahankan di semua replika aplikasi, jalankan perintah berikut untuk menghapus replika saat ini dengan nama javaee-cafe-jcache-cluster-<pod id from your running app>
pod :
kubectl delete pod javaee-cafe-jcache-cluster-77d54bccd4-5xnzx
pod "javaee-cafe-jcache-cluster-77d54bccd4-5xnzx" deleted
Kemudian, refresh beranda aplikasi. Anda akan melihat data yang sama ditampilkan di bagian Kopi baru dalam sesi tetapi nama pod yang berbeda ditampilkan di kiri atas halaman.
Terakhir, gunakan langkah-langkah berikut untuk menunjukkan bahwa data sesi dipertahankan dalam instans Azure Cache for Redis. Anda dapat mengeluarkan perintah ke instans Azure Cache for Redis menggunakan Konsol Redis.
Temukan instans Azure Cache for Redis Anda dari portal Azure.
Pilih Konsol untuk membuka konsol Redis.
Jalankan perintah berikut untuk melihat data sesi:
scan 0 count 1000 match '*' hgetall "com.ibm.ws.session.attr.default_host%2F"
Cari café.model.entity.Coffee[id=1, name=Coffee 3, price=30.0] dari halaman web, yang merupakan kopi yang Anda buat dan bertahan di instans Azure Cache for Redis.
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.
az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait
Untuk menghapus instans Azure Cache for Redis, temukan nama grup sumber dayanya dan jalankan perintah berikut:
az group delete --name <AZURE_CACHE_FOR_REDIS_RESOURCE_GROUP_NAME> --yes --no-wait
Langkah berikutnya
Anda dapat mempelajari selengkapnya dari referensi yang digunakan dalam panduan ini:
- Mengonfigurasi persistensi sesi Liberty dengan JCache
- Dukungan JCache dari Redisson
- Konfigurasi Server Open Liberty
Untuk menjelajahi opsi untuk menjalankan produk WebSphere di Azure, lihat Apa solusi untuk menjalankan keluarga produk WebSphere di Azure?