Menyebarkan aplikasi Java dengan Open Liberty atau WebSphere Liberty pada kluster Azure Kubernetes Service

Artikel ini menunjukkan cara untuk:

  • Jalankan aplikasi Java, Java EE, Jakarta EE, atau MicroProfile Anda pada runtime Open Liberty atau IBM WebSphere Liberty .
  • Buat gambar Docker aplikasi dengan menggunakan gambar kontainer Open Liberty atau WebSphere Liberty.
  • Sebarkan aplikasi dalam kontainer ke kluster Azure Kubernetes Service (AKS) dengan menggunakan Operator Open Liberty atau Operator WebSphere Liberty.

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

Artikel ini menggunakan penawaran Marketplace Azure untuk Open Liberty atau WebSphere Liberty untuk mempercepat perjalanan Anda ke AKS. Penawaran ini secara otomatis menyediakan beberapa sumber daya Azure, termasuk:

  • Instans Azure Container Registry.
  • Kluster AKS.
  • Instans Application Gateway Ingress Controller (AGIC).
  • Operator Open Liberty dan Operator WebSphere Liberty.
  • Secara opsional, gambar kontainer yang mencakup Liberty dan aplikasi Anda.

Jika Anda lebih suka panduan langkah demi langkah manual untuk menjalankan Liberty di AKS, lihat Menyebarkan aplikasi Java secara manual dengan Open Liberty atau 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 dokumentasi IBM tentang penyetelan Liberty.

Jika Anda tidak memiliki Langganan Azure, buat Akun gratis Azure sebelum memulai.

Prasyarat

  • Instal Azure CLI. Jika Anda menjalankan Windows atau macOS, pertimbangkan untuk menjalankan Azure CLI dalam kontainer Docker. Untuk informasi lebih lanjut, lihat Cara menjalankan Azure CLI di kontainer Docker.
  • Masuk ke Azure CLI dengan perintah az login. Untuk menyelesaikan proses autentikasi, ikuti langkah-langkah yang ditampilkan di terminal Anda. Untuk opsi masuk lainnya, lihat Masuk dengan Azure CLI.
  • Saat Anda diminta, instal ekstensi Azure CLI pada penggunaan pertama. Untuk informasi selengkapnya tentang ekstensi, lihat Menggunakan 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 Azure CLI.
  • 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 Git diinstal.
  • Pastikan Anda diberi Owner peran atau Contributor peran dan User Access Administrator dalam langganan. Anda dapat memverifikasinya dengan mengikuti langkah-langkah dalam Mencantumkan penetapan peran untuk pengguna atau grup.

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.

  • Jika menjalankan perintah dalam panduan ini secara lokal (bukan Azure Cloud Shell):
    • Siapkan komputer lokal dengan sistem operasi seperti Unix yang diinstal (misalnya, Ubuntu, Azure Linux, macOS, Subsistem Windows untuk Linux).
    • 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 diberi Owner peran atau Contributor peran dan User Access Administrator dalam langganan. Anda dapat memverifikasinya dengan mengikuti langkah-langkah dalam Mencantumkan penetapan peran untuk pengguna atau grup.

Membuat Liberty pada penyebaran AKS menggunakan portal

Langkah berikut memandu Anda untuk membuat runtime Liberty di AKS. Setelah menyelesaikan langkah-langkah ini, Anda akan memiliki instans Container Registry dan kluster AKS untuk menyebarkan aplikasi kontainer Anda.

  1. Buka portal Microsoft Azure. Di kotak pencarian di bagian atas halaman, masukkan IBM Liberty di AKS. Saat saran muncul, pilih satu dan hanya cocok di bagian Marketplace .

    Jika mau, Anda dapat langsung membuka penawaran.

  2. Pilih Buat.

  3. Pada panel Dasar :

    1. Membuat grup sumber daya baru. Karena grup sumber daya harus unik dalam langganan, pilih nama unik. Cara mudah untuk memiliki nama unik adalah dengan menggunakan kombinasi inisial Anda, tanggal hari ini, dan beberapa pengidentifikasi (misalnya, ejb0913-java-liberty-project-rg).

    2. Untuk Wilayah, pilih US Timur.

    3. Buat variabel lingkungan di shell Anda untuk nama grup sumber daya untuk kluster dan database:

      export RESOURCE_GROUP_NAME=<your-resource-group-name>
      

  4. Pilih Selanjutnya. Pada panel AKS , Anda dapat secara opsional memilih kluster AKS dan instans Container Registry yang ada, alih-alih menyebabkan penyebaran membuat yang baru. Pilihan ini memungkinkan Anda menggunakan pola sespan, seperti yang ditunjukkan di Azure Architecture Center. Anda juga dapat menyesuaikan pengaturan untuk ukuran dan jumlah mesin virtual di kumpulan node AKS.

    Untuk tujuan artikel ini, simpan saja semua default di panel ini.

  5. Pilih Selanjutnya. Pada panel Load Balancing, di samping Koneksi ke Azure Application Gateway?, pilih Ya. Di bagian ini, Anda dapat mengkustomisasi opsi penyebaran berikut:

    • Untuk Jaringan virtual dan Subnet, Anda dapat secara opsional menyesuaikan jaringan virtual dan subnet tempat penyebaran menempatkan sumber daya. Anda tidak perlu mengubah nilai yang tersisa dari defaultnya.

    • Untuk sertifikat TLS/SSL, Anda dapat memberikan sertifikat TLS/SSL dari Azure Application Gateway. Biarkan nilai di defaultnya menyebabkan penawaran menghasilkan sertifikat yang ditandatangani sendiri.

      Jangan pergi ke produksi dengan sertifikat yang ditandatangani sendiri. Untuk informasi selengkapnya mengenai sertifikat yang ditandatangani sendiri, lihat Membuat sertifikat publik yang ditandatangani sendiri untuk mengautentikasi aplikasi Anda.

    • Anda dapat memilih Aktifkan afinitas berbasis cookie, juga dikenal sebagai sesi lengket. Artikel ini menggunakan sesi lengket, jadi pastikan untuk memilih opsi ini.

  6. Pilih Selanjutnya. Pada panel Operator dan aplikasi , artikel ini menggunakan semua default. Namun, Anda dapat menyesuaikan opsi penyebaran berikut:

    • Anda dapat menyebarkan Operator WebSphere Liberty dengan memilih Ya untuk opsi yang didukung IBM?. Meninggalkan default Tidak menyebarkan Operator Open Liberty.
    • Anda dapat menyebarkan aplikasi untuk operator yang Anda pilih dengan memilih Ya untuk opsi Sebarkan aplikasi?. Meninggalkan default Tidak tidak menyebarkan aplikasi apa pun.
  7. Pilih Tinjau + buat untuk memvalidasi opsi pilihan Anda. Pada panel Tinjau + buat , saat Anda melihat Buat tersedia setelah validasi lolos, pilih.

    Penyebaran dapat memakan waktu hingga 20 menit. Sambil menunggu penyebaran selesai, Anda dapat mengikuti langkah-langkah di bagian Membuat instans Azure SQL Database. Setelah Anda menyelesaikan bagian itu, kembali ke sini dan melanjutkan.

Mengambil informasi yang dipilih dari penyebaran

Jika Anda menjauh dari panel Penyebaran sedang berlangsung , langkah-langkah berikut menunjukkan kepada Anda cara kembali ke panel tersebut. Jika Anda masih berada di panel yang memperlihatkan Penyebaran Anda selesai, buka grup sumber daya yang baru dibuat dan lewati ke langkah ketiga.

  1. Di sudut halaman portal mana pun, pilih tombol menu, lalu pilih Grup sumber daya.

  2. Dalam kotak dengan teks Filter untuk bidang apa pun, masukkan beberapa karakter pertama grup sumber daya yang Anda buat sebelumnya. Jika Anda mengikuti konvensi yang direkomendasikan, masukkan inisial Anda, lalu pilih grup sumber daya yang sesuai.

  3. Dalam daftar sumber daya dalam grup sumber daya, pilih sumber daya dengan nilai Jenis registri Kontainer.

  4. Pada panel navigasi, di bawah Pengaturan, pilih Tombol akses.

  5. Simpan selain nilai untuk Server masuk, Nama registri, Nama Pengguna, dan Kata Sandi. Anda dapat menggunakan ikon salin di samping setiap bidang untuk menyalin nilai ke clipboard sistem.

  6. Kembali ke grup sumber daya tempat Anda menyebarkan sumber daya.

  7. Di bagian Setelan, pilih Penyebaran.

  8. Pilih penyebaran paling bawah dalam daftar. Nilai Nama penyebaran cocok dengan ID penerbit penawaran. Ini berisi string ibm.

  9. Pada panel navigasi, pilih Output.

  10. Dengan menggunakan teknik penyalinan yang sama seperti dengan nilai sebelumnya, simpan selain nilai untuk output berikut:

    • cmdToConnectToCluster
    • appDeploymentTemplateYaml jika penyebaran tidak menyertakan aplikasi. Artinya, Anda memilih Tidak untuk Menyebarkan aplikasi? saat Anda menyebarkan penawaran Marketplace.
    • appDeploymentYaml jika penyebaran menyertakan aplikasi. Artinya, Anda memilih Ya untuk Menyebarkan aplikasi?.

    Tempelkan nilai appDeploymentTemplateYaml atau appDeploymentYaml ke shell Bash, tambahkan | grep secretName, dan jalankan perintah .

    Output dari perintah ini adalah nama rahasia ingress TLS, seperti - secretName: secret785e2c. Simpan selain nilai .secretName

Anda akan menggunakan nilai-nilai ini nanti di artikel ini. Perhatikan bahwa output mencantumkan beberapa perintah berguna lainnya.

Membuat contoh Azure SQL Database

Untuk membuat database tunggal Azure SQL Database untuk digunakan dengan aplikasi Anda, ikuti langkah-langkah di Mulai Cepat: Membuat database tunggal di Azure SQL Database. Perhatikan dengan cermat perbedaan berikut:

  • Pada langkah Dasar, tuliskan nilai untuk Grup sumber daya, Nama database, <server-name.database.windows.net>, Login admin server, dan Kata Sandi. Artikel ini mengacu pada nilai grup Sumber Daya database sebagai <db-resource-group>.

  • Pada langkah Jaringan, atur metode Koneksi ivity ke Titik akhir publik, atur Izinkan layanan dan sumber daya Azure untuk mengakses server ini ke Ya, dan atur Tambahkan alamat IP klien saat ini ke Ya.

    Cuplikan layar portal Azure yang memperlihatkan tab Jaringan dari halaman Buat SQL Database dengan metode Koneksi ivity dan pengaturan Aturan firewall disorot.

Catatan

Tingkat komputasi tanpa server yang Anda pilih untuk database ini menghemat uang dengan membuat database tidur selama periode tidak aktif. Aplikasi sampel akan gagal jika database tertidur saat aplikasi dimulai.

Untuk memaksa database bangun, Anda bisa menjalankan kueri dengan menggunakan editor kueri. Ikuti langkah-langkah dalam Mengkueri database. Berikut adalah contoh kueri: SELECT * FROM COFFEE;.

Buat variabel lingkungan di shell Anda 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 melanjutkan untuk menyiapkan AKS untuk menghosting aplikasi Open Liberty Anda.

Konfigurasikan dan sebarkan aplikasi sampel

Ikuti langkah-langkah dalam bagian ini untuk menyebarkan aplikasi sampel pada runtime Liberty. Langkah-langkah ini menggunakan Maven.

Lihat aplikasinya

Klon kode sampel untuk artikel ini. Sampelnya ada di GitHub.

Terdapat beberapa sampel di repositori. Artikel ini menggunakan java-app/. Jalankan perintah berikut untuk mendapatkan sampel:

git clone https://github.com/Azure-Samples/open-liberty-on-aks.git
cd open-liberty-on-aks
export BASE_DIR=$PWD
git checkout 20240220

Jika Anda melihat pesan tentang berada dalam status "HEAD yang terlepas", Anda dapat mengabaikannya dengan aman. Pesan hanya berarti bahwa Anda memeriksa tag.

Berikut adalah struktur file aplikasi:

java-app
├─ src/main/
│  ├─ aks/
│  │  ├─ db-secret.yaml
│  │  ├─ openlibertyapplication-agic.yaml
│  │  ├─ openlibertyapplication.yaml
│  │  ├─ webspherelibertyapplication-agic.yaml
│  │  ├─ webspherelibertyapplication.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 lima file penyebaran:

  • db-secret.xml: Gunakan file ini untuk membuat Rahasia Kubernetes dengan kredensial koneksi database.
  • openlibertyapplication-agic.yaml: Gunakan file ini untuk menyebarkan aplikasi Open Liberty dengan AGIC. Artikel ini mengasumsikan bahwa Anda menggunakan file ini.
  • openlibertyapplication.yaml: Gunakan file ini jika Anda ingin menyebarkan aplikasi Open Liberty tanpa AGIC.
  • webspherelibertyapplication-agic.yaml: Gunakan file ini untuk menyebarkan aplikasi WebSphere Liberty dengan AGIC jika Anda menyebarkan Operator WebSphere Liberty sebelumnya dalam artikel ini.
  • webspherelibertyapplication.yaml: Gunakan file ini untuk menyebarkan aplikasi WebSphere Liberty tanpa AGIC jika Anda menyebarkan Operator WebSphere Liberty sebelumnya di artikel ini.

Di direktori docker, ada dua file untuk membuat gambar aplikasi:

  • Dockerfile: Gunakan file ini untuk membangun gambar aplikasi dengan Open Liberty di artikel ini.
  • Dockerfile-wlp: Gunakan file ini untuk membangun gambar aplikasi dengan WebSphere Liberty jika Anda menyebarkan Operator WebSphere Liberty sebelumnya di artikel ini.

Dalam direktori liberty/config, Anda menggunakan file server.xml untuk mengonfigurasi koneksi database untuk kluster Open Liberty dan WebSphere Liberty.

Membangun proyek

Sekarang setelah Anda memiliki 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 $BASE_DIR/java-app
# The following variables are used for deployment file generation into the target.
export LOGIN_SERVER=<Azure-Container-Registry-Login-Server-URL>
export REGISTRY_NAME=<Azure-Container-Registry-name>
export USER_NAME=<Azure-Container-Registry-username>
export PASSWORD='<Azure-Container-Registry-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>'
export INGRESS_TLS_SECRET=<ingress-TLS-secret-name>

mvn clean install

(Opsional) Menguji proyek Anda secara lokal

Jalankan dan uji proyek secara lokal sebelum menyebarkan ke Azure. Untuk kenyamanan, artikel ini menggunakan liberty-maven-plugin. Untuk mempelajari selengkapnya tentang liberty-maven-plugin, lihat artikel Open Liberty Membangun aplikasi web dengan Maven.

Untuk aplikasi Anda, Anda dapat melakukan sesuatu yang serupa dengan menggunakan mekanisme lain, seperti lingkungan pengembangan lokal Anda. Anda juga dapat mempertimbangkan untuk menggunakan opsi yang liberty:devc ditujukan untuk pengembangan dengan kontainer. Anda dapat membaca selengkapnya tentang liberty:devc dalam dokumentasi Open Liberty.

  1. Mulai aplikasi dengan menggunakan liberty:run. liberty:run juga menggunakan variabel lingkungan yang Anda tentukan sebelumnya.

    cd $BASE_DIR/java-app
    mvn liberty:run
    
  2. Jika pengujian berhasil, pesan yang mirip [INFO] [AUDIT] CWWKZ0003I: The application javaee-cafe updated in 1.930 seconds dengan muncul di output perintah. http://localhost:9080/ Buka di browser Anda dan verifikasi bahwa aplikasi dapat diakses dan semua fungsi berfungsi.

  3. Pilih Ctrl+C untuk berhenti.

Membangun gambar untuk penyebaran AKS

Anda sekarang dapat menjalankan docker build perintah untuk membangun gambar:

cd $BASE_DIR/java-app/target

docker buildx build --platform linux/amd64 -t javaee-cafe:v1 --pull --file=Dockerfile .

(Opsional) Menguji gambar Docker secara lokal

Gunakan langkah-langkah berikut untuk menguji gambar Docker secara lokal sebelum menyebarkan ke Azure:

  1. Jalankan gambar dengan menggunakan perintah berikut. Perintah ini menggunakan variabel lingkungan yang Anda tentukan 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. Pilih Ctrl+C untuk berhenti.

Mengunggah gambar ke Azure Container Registry

Unggah gambar bawaan ke instans Container Registry yang Anda buat dalam penawaran:

docker tag javaee-cafe:v1 ${LOGIN_SERVER}/javaee-cafe:v1
docker login -u ${USER_NAME} -p ${PASSWORD} ${LOGIN_SERVER}
docker push ${LOGIN_SERVER}/javaee-cafe:v1

Sebarkan dan uji aplikasi

Gunakan langkah-langkah berikut untuk menyebarkan dan menguji aplikasi:

  1. Sambungkan ke kluster AKS.

    Tempelkan nilai cmdToConnectToCluster ke dalam shell dan jalankan perintah .

  2. Terapkan rahasia database:

    cd $BASE_DIR/java-app/target
    kubectl apply -f db-secret.yaml
    

    Outputnya adalah secret/db-secret-sql created.

  3. Terapkan file penyebaran:

    kubectl apply -f openlibertyapplication-agic.yaml
    
  4. Tunggu hingga semua pod berhasil dimulai ulang dengan menggunakan perintah berikut:

    kubectl get pods --watch
    

    Output yang mirip dengan contoh berikut menunjukkan bahwa semua pod sedang berjalan:

    NAME                                       READY   STATUS    RESTARTS   AGE
    javaee-cafe-cluster-agic-67cdc95bc-2j2gr   1/1     Running   0          29s
    javaee-cafe-cluster-agic-67cdc95bc-fgtt8   1/1     Running   0          29s
    javaee-cafe-cluster-agic-67cdc95bc-h47qm   1/1     Running   0          29s
    
  5. Verifikasi hasilnya:

    1. Dapatkan alamat sumber daya ingress yang disebarkan dengan aplikasi:

      kubectl get ingress
      

      Salin nilai dari ADDRESS output. Nilai ini adalah alamat IP publik front-end dari instans Application Gateway yang disebarkan.

    2. Buka https://<ADDRESS> untuk menguji aplikasi. Demi kenyamanan Anda, perintah shell ini membuat variabel lingkungan yang nilainya dapat Anda tempelkan langsung ke browser:

      export APP_URL=https://$(kubectl get ingress | grep javaee-cafe-cluster-agic-ingress | cut -d " " -f14)/
      echo $APP_URL
      

      Jika halaman web tidak dirender dengan benar atau mengembalikan 502 Bad Gateway kesalahan, aplikasi masih dimulai di latar belakang. Tunggu beberapa menit lalu coba operasikan lagi.

Membersihkan sumber daya

Untuk menghindari biaya Azure, Anda harus membersihkan sumber daya yang tidak diperlukan. Ketika Anda tidak lagi memerlukan kluster, 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 berikut: