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

Artikel ini menunjukkan cara untuk:

  • Menjalankan aplikasi Java, Java EE, Jakarta EE, atau MicroProfile Anda pada runtime Open Liberty atau WebSphere Liberty.
  • Bangun image Docker aplikasi menggunakan kontainer citra Open Liberty atau WebSphere Liberty.
  • Menyebarkan aplikasi terkontainer ke kluster AKS menggunakan Open Liberty Operator.

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 menggunakan penawaran Marketplace Azure untuk Open/WebSphere Liberty untuk mempercepat perjalanan Anda ke AKS. Penawaran ini secara otomatis memprovisikan sejumlah sumber daya Azure termasuk instans Azure Container Registry (ACR), kluster AKS, instans Azure App Gateway Ingress Controller (AGIC), Liberty Operator, dan citra kontainer sebagai opsi, yang meliputi Liberty dan aplikasi Anda. Untuk melihat penawaran, kunjungi portal Azure. Apabila Anda lebih menyukai panduan langkah demi langkah manual untuk menjalankan Liberty di AKS yang tidak menggunakan otomatisasi yang diaktifkan oleh penawaran, lihat Menyebarkan aplikasi Java secara manual dengan Open Liberty atau WebSphere Liberty pada kluster Azure Kubernetes Service (AKS).

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

Prasyarat

  • Artikel ini memerlukan setidaknya versi 2.31.0 Azure CLI. Jika menggunakan Azure Cloud Shell, versi terbaru sudah terpasang.
  • Jika menjalankan perintah dalam panduan ini secara lokal (bukan Azure Cloud Shell):
    • Siapkan komputer lokal dengan sistem operasi seperti Unix yang terpasang (misalnya, Ubuntu, Mariner, macOS, Subsistem Windows untuk Linux).
    • Instal implementasi Java SE (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 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 kluster Azure Container Registry dan Azure Kubernetes Service untuk aplikasi sampel.

  1. Kunjungi portal Azure. Di kotak telusur di bagian atas laman, ketik IBM WebSphere Liberty dan Open Liberty di Azure Kubernetes Service. Saat saran mulai muncul, pilih satu-satunya kecocokan yang muncul di bagian Marketplace. Jika mau, Anda dapat langsung membuka penawaran dengan link pintasan ini: https://aka.ms/liberty-aks.
  2. Pilih Buat.
  3. Di panel Dasar, buat grup sumber daya baru. Karena grup sumber daya harus unik di dalam langganan, pilih nama unik. Cara mudah untuk memiliki nama unik adalah dengan menggunakan kombinasi inisial Anda, tanggal hari ini, dan beberapa pengidentifikasi. Contohnya:ejb0913-java-liberty-project-rg
  4. Pilih AS Timur sebagai Wilayah.
  5. Pilih Berikutnya: Mengonfigurasi kluster.
  6. Bagian ini memungkinkan Anda memilih kluster AKS dan Azure Container Registry (ACR) yang ada alih-alih menyebabkan penyebaran membuat yang baru, jika diinginkan. Kemampuan ini memungkinkan Anda menggunakan pola sespan, seperti yang ditunjukkan di pusat arsitektur Azure. Anda juga dapat menyesuaikan pengaturan untuk ukuran dan jumlah mesin virtual di kumpulan node AKS. Biarkan semua nilai lainnya tetap default dan pilih Berikutnya: Jaringan.
  7. Di samping Sambungkan ke Azure Application Gateway?, pilih Ya. Panel ini memungkinkan Anda mengkustomisasi opsi penyebaran berikut.
    1. Anda dapat mengkustomisasi jaringan virtual dan subnet tempat penyebaran akan menempatkan sumber daya. Biarkan nilai-nilai ini tetap default.
    2. Anda dapat memberikan sertifikat TLS/SSL yang disajikan oleh Azure Application Gateway. Biarkan nilai-nilai tersebut tetap default untuk menyebabkan penawaran menghasilkan sertifikat yang ditandatangani sendiri. Jangan pergi ke produksi menggunakan sertifikat yang ditandatangani sendiri. Untuk informasi selengkapnya mengenai sertifikat yang ditandatangani sendiri, lihat Membuat sertifikat publik yang ditandatangani sendiri untuk mengautentikasi aplikasi Anda.
    3. Anda dapat mengaktifkan afinitas berbasis cookie, yang juga dikenal sebagai sesi lengket. Kami ingin sesi lengket diaktifkan untuk artikel ini, jadi pastikan opsi ini dipilih. Cuplikan layar kotak centang aktifkan afinitas berbasis cookie.
  8. Pilih Tinjau + buat untuk memvalidasi opsi pilihan Anda.
  9. Ketika Anda melihat pesan Validasi Berhasil, pilih Buat. Penyebaran dapat memakan waktu hingga 20 menit.

Mengambil informasi yang dipilih dari penyebaran

Apabila Anda meninggalkan halaman Penyebaran sedang berlangsung, langkah-langkah berikut akan menunjukkan kepada Anda cara kembali ke halaman tersebut. Apabila Anda masih berada di halaman yang menampilkan Penyebaran Anda selesai, Anda dapat melompat ke langkah ketiga.

  1. Di bagian kiri atas halaman portal mana pun, pilih menu hamburger dan 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. Apabila Anda mengikuti konvensi yang direkomendasikan, masukkan inisial Anda, kemudian pilih grup sumber daya yang sesuai.

  3. Dalam daftar sumber daya di grup sumber daya, pilih sumber daya dengan JenisRegistri Kontainer.

  4. Di panel navigasi, pada Pengaturan, pilih Kunci akses.

  5. Sisihkan nilai untuk Server masuk, Nama registri, Nama pengguna, dan kata sandi. Anda dapat menggunakan ikon salin di sebelah kanan setiap bidang untuk menyalin nilai bidang itu ke papan klip sistem.

  6. Navigasikan lagi ke grup sumber daya tempat Anda menyebarkan sumber daya.

  7. Di bagian Setelan, pilih Penyebaran.

  8. Pilih penyebaran paling bawah dalam daftar. Nama penyebaran akan cocok dengan ID penayang dari penawaran. Ini akan berisi string ibm.

  9. Di panel kiri, pilih Output.

  10. Menggunakan teknik penyalinan yang sama dengan nilai sebelumnya, simpan nilai untuk output berikut:

    • cmdToConnectToCluster
    • appDeploymentTemplateYaml
  11. Tempelkan nilai appDeploymentTemplateYaml ke dalam shell Bash, tambahkan | grep secretName, dan jalankan. Perintah ini akan menghasilkan nama rahasia TLS Ingress, seperti - secretName: secret785e2c. Simpan selain nilai untuk secretName dari output.

Nilai-nilai ini akan digunakan nanti dalam artikel ini. Perhatikan bahwa beberapa perintah berguna lainnya tercantum dalam output.

Membuat Azure SQL Database

Langkah-langkah berikut memandu Anda membuat database tunggal Azure SQL Database untuk digunakan dengan aplikasi Anda.

  1. Buat database tunggal di Azure SQL Database dengan mengikuti langkah-langkah dalam Mulai Cepat: Membuat database tunggal Azure SQL Database, mencatat perbedaan dalam kotak di bawah ini dengan teliti. Kembali ke artikel ini setelah membuat dan mengonfigurasi server database.

    Catatan

    Pada langkah Dasar, tuliskan Grup sumber daya, Nama database, <server-name>.database.windows.net, Login admin server, dan Kata Sandi. Grup Sumber Daya database akan disebut sebagai <db-resource-group> selanjutnya dalam di artikel ini.

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

    Cuplikan layar pengonfigurasian jaringan database SQL.

    Juga pada langkah Jaringan, pada Koneksi terenkripsi, atur versi TLS Minimum ke TLS 1.0.

    Cuplikan layar pengonfigurasian jaringan database SQL TLS 1.0.

Sekarang setelah database dan kluster AKS dibuat, kita dapat melanjutkan penyiapan 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

Kloning kode sampel untuk panduan ini. Sampelnya ada di GitHub.

Terdapat beberapa sampel di repositori. Kita akan menggunakan java-app/. Berikut struktur file aplikasi tersebut.

java-app
├─ src/main/
│  ├─ aks/
│  │  ├─ db-secret.yaml
│  │  ├─ openlibertyapplication-agic.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 , kami menempatkan tiga file penyebaran. db-secret.xml digunakan untuk membuat Rahasia Kubernetes dengan kredensial koneksi DB. File openlibertyapplication-agic.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, FILE 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 Anda mau.

cd <path-to-your-repo>/java-app

# The following variables will be used for deployment file generation into target.
export LOGIN_SERVER=<Azure_Container_Registery_Login_Server_URL>
export REGISTRY_NAME=<Azure_Container_Registery_Name>
export USER_NAME=<Azure_Container_Registery_Username>
export PASSWORD=<Azure_Container_Registery_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

Sekarang Anda dapat menjalankan dan menguji proyek secara lokal sebelum menyebarkan ke Azure. Untuk kenyamanan, kami menggunakan 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 selengkapnya tentang liberty:devc di dokumen Liberty.

  1. Mulai aplikasi menggunakan liberty:run. liberty:run juga akan 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 mirip 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 dan pastikan aplikasi dapat diakses dan semua fungsi berfungsi.

  3. Tekan Ctrl+C untuk berhenti.

Bangun gambar untuk penyebaran AKS

Anda sekarang dapat menjalankan docker build perintah untuk membangun gambar.

cd <path-to-your-repo>/java-app/target

# If you're running with Open Liberty
docker build -t javaee-cafe:v1 --pull --file=Dockerfile .

# If you're 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. Perhatikan bahwa kita 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 berhenti.

Unggah gambar ke ACR

Sekarang, kami mengunggah gambar yang dibuat ke ACR yang dibuat 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

Langkah-langkah berikut menyebarkan dan menguji aplikasi.

  1. Sambungkan ke kluster AKS.

    Tempelkan nilai cmdToConnectToCluster ke dalam shell Bash dan jalankan.

  2. Terapkan rahasia DB.

    cd <path-to-your-repo>/java-app/target
    kubectl apply -f db-secret.yaml
    

    Anda akan melihat output secret/db-secret-postgres created.

  3. Terapkan file penyebaran.

    kubectl apply -f openlibertyapplication-agic.yaml
    
  4. Tunggu hingga pod dimulai ulang.

    Tunggu hingga semua pod berhasil dimulai ulang menggunakan perintah berikut.

    kubectl get pods --watch
    

    Anda akan melihat output yang mirip dengan berikut ini untuk 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 hasil.

    1. Dapatkan ALAMAT sumber daya Ingress yang disebarkan dengan aplikasi

      kubectl get ingress
      

      Salin nilai ADDRESS dari output, ini adalah alamat IP publik frontend dari Azure Application Gateway yang disebarkan.

    2. Buka https://<ADDRESS> untuk menguji aplikasi.

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