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

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.

  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, buka server yang baru dibuat di portal Azure. Di panel Jaringan, di bawah tab Koneksi ivity, atur versi TLS Minimum ke TLS 1.0.

    Cuplikan layar pengonfigurasian jaringan database SQL TLS 1.0.

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

    Cuplikan layar aturan firewall - izinkan akses sumber daya Azure.

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

    Cuplikan layar aturan firewall - izinkan akses klien.

  5. Simpan perubahan jaringan Anda.

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

  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

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.

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

Aplikasi Java liberty berhasil disebarkan di 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: