Kontejnerizace aplikací v Javě pro Kubernetes
Tento článek popisuje, jak kontejnerizovat aplikace Java pro nasazení v Kubernetes. Pokyny k paměti kontejneru, paměti haldy JVM, paměti uvolňování paměti (GC) a jader vCPU najdete v tématu Kontejnerizace aplikací v Javě.
Stanovení vhodného typu virtuálního počítače pro fond uzlů Kubernetes
Určete, jestli fond uzlů Kubernetes nebo fondy, které jsou pro váš cluster dostupné, odpovídají paměti kontejneru a jádrům virtuálních procesorů, které chcete použít. Pokud fond uzlů může hostovat aplikaci, pokračujte dál. Jinak zřiďte fond uzlů, který je vhodný pro velikost paměti kontejneru a počet jader vCPU, na která cílíte.
Mějte na paměti, že náklady na skladovou položku virtuálního počítače jsou úměrné počtu jader a množství paměti. Jakmile určíte výchozí bod z hlediska virtuálních procesorů a paměti pro jednu instanci kontejneru, určete, jestli můžete vyhovět potřebám vaší aplikace pouze horizontálním škálováním. V případě spolehlivých systémů always-on musí být k dispozici minimálně dvě repliky. Rozšiřte kapacitu a množství podle potřeby.
Nastavení požadavků a omezení procesoru
Pokud je nutné omezit využití procesoru, ujistěte se, že v souboru nasazení použijete stejnou hodnotu pro limits
i requests
. Prostředí JVM dynamicky neupravuje své nastavení za běhu, například GC a další vlákna. Prostředí JVM čte počet procesorů, které jsou k dispozici pouze během spouštění.
Spropitné
Nastavte stejnou hodnotu pro požadavky procesoru a omezení procesoru.
containers:
- image: myimage
name: myapp
resources:
limits:
cpu: "2"
requests:
cpu: "2"
Vysvětlení dostupných procesorů JVM
Když hotSpot JVM v OpenJDK identifikuje, že běží uvnitř kontejneru, používá hodnoty, jako je cpu_quota
a cpu_period
k určení, kolik procesorů je k dispozici. Obecně platí, že jakákoli hodnota až 1000m
milicores se identifikuje jako stroj s jedním procesorem. Jakákoli hodnota mezi 1001m
a 2000m
je identifikována jako počítač se dvěma procesory atd. Tyto informace jsou k dispozici prostřednictvím rozhraní API Runtime.getRuntime().availableProcessors(). Některé souběžné GCS můžou také tuto hodnotu použít ke konfiguraci jejich vláken. Další rozhraní API, knihovny a architektury můžou také tyto informace použít ke konfiguraci fondů vláken.
Kvóty procesoru Kubernetes se vztahují k množství času stráveného procesem v procesoru, a ne počtu procesorů dostupných pro tento proces. Běhová prostředí s podporou více vláken, jako je JVM, mohou paralelně využívat více procesorů. I když má kontejner limit jednoho virtuálního procesoru, může být JVM instruován, aby viděl dva nebo více dostupných procesorů.
Pokud chcete JVM informovat o přesném počtu procesorů, které by měl rozpoznat v prostředí Kubernetes, použijte následující příznak:
-XX:ActiveProcessorCount=N
Nastavení požadavků na paměť a omezení
Nastavte limity paměti na množství, které jste určili dříve. Ujistěte se, že číslo omezení paměti je paměť kontejneru a NE hodnota paměti haldy JVM.
Spropitné
Nastavte požadavky na paměť, které se rovnají limitům paměti.
containers:
- name: myimage
image: myapp
resources:
limits:
memory: "4Gi"
requests:
memory: "4Gi"
Nastavení argumentů JVM v souboru nasazení
Nezapomeňte nastavit paměť haldy JVM na částku, kterou jste určili dříve. Tuto hodnotu doporučujeme předat jako proměnnou prostředí, abyste ji mohli snadno změnit, aniž byste museli znovu sestavit image kontejneru.
containers:
- name: myimage
image: myapp
env:
- name: JAVA_OPTS
value: "-XX:+UseParallelGC -XX:MaxRAMPercentage=75"
Další kroky
- strategie kontejnerizace Java
- Jakarta EE v modulech runtime kontejnerů Azure
- Oracle WebLogic Server
- IBM WebSphere Liberty, Open Liberty a tradiční WebSphere