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ě.
Určení příslušné skladové položky 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. Podle potřeby vertikálně navyšte a navyšte kapacitu.
Nastavení požadavků a omezení procesoru
Pokud musíte omezit využití procesoru, ujistěte se, že použijete stejnou hodnotu pro oba limits
i requests
v souboru nasazení. Prostředí JVM dynamicky neupravuje svůj modul runtime, například GC a další fondy vláken. Prostředí JVM čte počet procesorů, které jsou k dispozici pouze během spouštění.
Tip
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 cpu_quota
je a cpu_period
k určení, kolik procesorů je k dispozici. Obecně platí, že jakákoli hodnota až 1000m
milicores se identifikuje jako jeden procesorový počítač. Jakákoli hodnota mezi 1001m
počítačem s duálním procesorem a 2000m
tak dále je identifikována jako počítač s duálním procesorem. Tyto informace jsou k dispozici prostřednictvím rozhraní API Runtime.getRuntime().availableProcessors(). Tuto hodnotu mohou také použít některé souběžné řadiče zásad skupiny ke konfiguraci jejich vláken. Další rozhraní API, knihovny a architektury můžou tyto informace použít také 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. Moduly runtime s více vlákny, jako je JVM, můžou současně používat více procesorů s více vlákny. 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 informovat JVM o přesném počtu procesorů, které by se měl zobrazit v prostředí Kubernetes, použijte následující příznak JVM:
-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.
Tip
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 velikost, 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