Bagikan melalui


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.
  • 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 atau Contributor 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.

  1. 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.

  2. 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.

  1. Verifikasi bahwa direktori kerja saat ini adalah java-app-jcache di klon lokal Anda.

  2. Jalankan mvn clean package untuk mengemas aplikasi.

  3. Jalankan mvn -Predisson validate untuk menyalin file konfigurasi Redisson ke lokasi yang ditentukan. Langkah ini menyisipkan nilai variabel lingkungan dan REDISCACHEKEY ke dalam file redisson-config.yaml, yang dirujuk oleh file server.xml.REDISCACHEHOSTNAME

  4. Jalankan mvn liberty:dev untuk menguji aplikasi. Jika pengujian berhasil, Anda akan melihat The 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
    
  5. Anda dapat mengunjungi http://localhost:9080/ untuk melihat aplikasi berjalan, tetapi bukti redis bekerja adalah output yang tercantum dalam langkah sebelumnya.

  6. Gunakan Ctrl+C untuk menghentikan aplikasi.

  7. 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)
    
  8. Jalankan cd target untuk mengubah direktori ke build sampel.

  9. 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.

  1. Verifikasi bahwa direktori kerja saat ini adalah java-app-jcache/target di klon lokal Anda.

  2. 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
    
  3. 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
    
  4. Tunggu hingga Anda melihat 3/3 di bawah READY kolom dan 3 di bawah AVAILABLE kolom, lalu gunakan Ctrl+C untuk menghentikan kubectl 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).

Cuplikan layar aplikasi Kebebasan Java berhasil disebarkan pada A K S.

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.

Cuplikan layar aplikasi sampel memperlihatkan kopi baru yang dibuat dan bertahan dalam sesi aplikasi.

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.

  1. Temukan instans Azure Cache for Redis Anda dari portal Azure.

  2. Pilih Konsol untuk membuka konsol Redis.

  3. Jalankan perintah berikut untuk melihat data sesi:

    scan 0 count 1000 match '*'
    
    hgetall "com.ibm.ws.session.attr.default_host%2F"
    
  4. 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:

Untuk menjelajahi opsi untuk menjalankan produk WebSphere di Azure, lihat Apa solusi untuk menjalankan keluarga produk WebSphere di Azure?