Sdílet prostřednictvím


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