Kontainerisasi aplikasi Java Anda untuk Kubernetes
Artikel ini menjelaskan cara membuat kontainer aplikasi Java untuk penyebaran di Kubernetes.
Untuk panduan tentang memori kontainer, memori tumpukan JVM, pengumpul sampah (GC), dan inti vCPU, lihat Membuat kontainer aplikasi Java Anda.
Tentukan SKU VM yang sesuai untuk kumpulan simpul Kubernetes
Tentukan apakah kumpulan simpul Kubernetes atau kumpulan yang tersedia untuk kluster Anda dapat sesuai dengan memori kontainer dan inti vCPU yang ingin Anda gunakan. Jika kumpulan simpul dapat menghosting aplikasi, lanjutkan. Jika tidak, provisikan kumpulan simpul yang sesuai untuk jumlah memori kontainer dan jumlah inti vCPU yang Anda targetkan.
Perlu diingat bahwa biaya SKU VM sebanding dengan jumlah inti dan jumlah memori. Setelah Anda menentukan titik awal dalam hal vCPU dan memori untuk satu instans kontainer, tentukan apakah Anda dapat memenuhi kebutuhan aplikasi Hanya dengan penskalaan horizontal. Untuk sistem yang andal dan selalu aktif, minimal dua replika harus tersedia. Tingkatkan dan keluar sesuai kebutuhan.
Mengatur permintaan dan batasan CPU
Jika Anda harus membatasi CPU, pastikan Anda menerapkan nilai yang sama untuk dan limits
requests
dalam file penyebaran. JVM tidak secara dinamis menyesuaikan runtimenya, seperti GC dan kumpulan utas lainnya. JVM membaca jumlah prosesor yang hanya tersedia selama waktu mulai.
Tip
Tetapkan nilai yang sama untuk permintaan CPU dan batas CPU.
containers:
- image: myimage
name: myapp
resources:
limits:
cpu: "2"
requests:
cpu: "2"
Memahami prosesor JVM yang tersedia
Ketika HotSpot JVM di OpenJDK mengidentifikasi bahwa ia berjalan di dalam kontainer, ia menggunakan nilai seperti cpu_quota
dan cpu_period
untuk menentukan berapa banyak prosesor yang tersedia untuk itu. Secara umum, nilai apa pun hingga 1000m
millicore diidentifikasi sebagai satu mesin prosesor. Nilai apa pun antara 1001m
dan 2000m
diidentifikasi sebagai mesin prosesor ganda, dan sebagainya. Informasi ini tersedia melalui API Runtime.getRuntime().availableProcessors(). Nilai ini juga dapat digunakan oleh beberapa GC bersamaan untuk mengonfigurasi utasnya. API, pustaka, dan kerangka kerja lainnya juga dapat menggunakan informasi ini untuk mengonfigurasi kumpulan utas.
Kuota CPU Kubernetes terkait dengan jumlah waktu yang dihabiskan proses dalam CPU, dan bukan jumlah CPU yang tersedia untuk proses. Runtime multi-utas seperti JVM mungkin masih menggunakan beberapa prosesor secara bersamaan, dengan beberapa utas. Bahkan jika kontainer memiliki batas satu vCPU, JVM dapat diinstruksikan untuk melihat dua atau beberapa prosesor yang tersedia.
Untuk menginformasikan JVM tentang jumlah prosesor yang tepat yang harus dilihatnya di lingkungan Kubernetes, gunakan bendera JVM berikut:
-XX:ActiveProcessorCount=N
Mengatur permintaan dan batas memori
Atur batas memori ke jumlah yang sebelumnya Anda tentukan. Pastikan nomor batas memori adalah memori kontainer dan BUKAN nilai memori heap JVM.
Tip
Atur permintaan memori sama dengan batas memori.
containers:
- name: myimage
image: myapp
resources:
limits:
memory: "4Gi"
requests:
memory: "4Gi"
Mengatur argumen JVM dalam file penyebaran
Ingatlah untuk mengatur memori tumpukan JVM ke jumlah yang telah Anda tentukan sebelumnya. Kami menyarankan agar Anda meneruskan nilai ini sebagai variabel lingkungan sehingga Anda dapat dengan mudah mengubahnya tanpa perlu membangun kembali gambar kontainer.
containers:
- name: myimage
image: myapp
env:
- name: JAVA_OPTS
value: "-XX:+UseParallelGC -XX:MaxRAMPercentage=75"
Langkah berikutnya
- Strategi kontainerisasi Java
- Jakarta EE pada runtime kontainer Azure
- Oracle WebLogic Server
- IBM WebSphere Liberty, Open Liberty, dan WebSphere tradisional