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 Open Liberty.

Open Liberty Operator menyederhanakan penyebaran dan pengelolaan aplikasi yang berjalan pada kluster Kube. Dengan Open Liberty Operator, Anda juga dapat melakukan operasi yang lebih canggih, seperti mengumpulkan jejak dan crash dump.

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

  • Jika menjalankan perintah dalam panduan ini secara lokal (bukan Azure Cloud Shell):
    • Siapkan komputer lokal dengan Windows atau Linux yang terinstal.
    • Instal implementasi Java SE, versi 17 atau yang lebih baru (misalnya, Eclipse Open J9).
    • Instal Maven 3.5.0 atau yang lebih tinggi.
    • Pasang Docker untuk OS Anda.
  • Pastikan Anda telah diberi Owner peran atau Contributor peran dan User Access Administrator dalam langganan. Anda dapat memverifikasi penetapan dengan mengikuti langkah-langkah dalam Mencantumkan penetapan peran Azure menggunakan portal Azure.

Persiapkan lingkungan Anda untuk Azure CLI

  • Artikel ini memerlukan setidaknya versi 2.31.0 Azure CLI. Jika menggunakan Azure Cloud Shell, versi terbaru sudah terpasang. Anda dapat meluncurkan perintah Azure CLI di Bash atau Azure PowerShell, baik secara lokal atau di Azure Cloud Shell.

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. Jika Anda memilih untuk menjalankan perintah secara lokal, pastikan daemon docker berjalan, dan 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. Jika Anda menggunakan Azure Cloud Shell, kubectl sudah terpasang. 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 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.

  1. Saat Anda mencapai bagian Atur nilai parameter dari mulai cepat, tulis semua variabel dalam contoh kode berlabel Variable block, termasuk location, ,databaseresourceGroup , server, login, dan password. Artikel ini merujuk ke database resourceGroup sebagai <db-resource-group>.

  2. Setelah Anda membuat server database, di panel Jaringan, di bawah tab Koneksi ivity, atur versi TLS Minimum ke TLS 1.0.

    Screenshot of configuring SQL database networking TLS 1.0.

  3. Di panel Jaringan , di bawah tab Akses publik, pilih Izinkan layanan dan sumber daya Azure untuk mengakses server ini.

    Screenshot of firewall rules - allow Azure resources access.

  4. Jika Anda ingin menguji aplikasi secara lokal, pastikan alamat IPv4 klien Anda berada dalam daftar yang diizinkan dari aturan Firewall

    Screenshot of firewall rules - allow client access.

Setelah membuat database dan kluster AKS, Anda dapat menyiapkan AKS untuk menghosting Open 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

Output harus berupa serangkaian baris setelah format <object type> created. Jika Anda melihat baris yang tidak sesuai dengan format tersebut, pecahkan masalah dan selesaikan alasannya sebelum melanjutkan.

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 telah 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

Sekarang setelah Anda 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.

  1. 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
    
  2. 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. Buka http://localhost:9080/ di browser Anda untuk memverifikasi aplikasi dapat diakses dan semua fungsi berfungsi.

  3. Tekan Ctrl+C untuk menghentikan.

Membangun gambar untuk penyebaran AKS

Catatan

Jika Anda memilih untuk menggunakan lingkungan Bash di Azure Cloud Shell, gunakan az acr build perintah untuk membangun dan mendorong gambar dari file Docker, lihat Mulai Cepat: Membangun dan menjalankan gambar kontainer menggunakan Tugas Azure Container Registry. Setelah itu, langsung buka bagian Sebarkan aplikasi ke kluster AKS. Jika Anda memilih untuk menjalankan perintah secara lokal, Anda dapat menggunakan panduan berikut.

Sekarang Anda dapat menjalankan docker 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 build -t javaee-cafe:v1 --pull --file=Dockerfile .

# If you are running with WebSphere Liberty
docker 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.

  1. 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
    
  2. Setelah kontainer dimulai, buka http://localhost:9080/ di browser Anda untuk mengakses aplikasi.

  3. 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:

  1. 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
    
  2. 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
    
  3. Tentukan OpenLibertyApplication apakah instans telah 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
    
  4. 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
    
  5. 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 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 telah 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.

Java liberty application successfully deployed on 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, kontainer registri dan semua sumber daya terkait.

az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait
az group delete --name <db-resource-group> --yes --no-wait

Langkah berikutnya

Anda dapat mempelajari selengkapnya dari referensi yang digunakan dalam panduan ini: