Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel wordt beschreven hoe u uw Java-toepassingen kunt containeriseren voor implementatie in Kubernetes. Zie voor hulp bij containergeheugen, JVM heap-geheugen, garbagecollections (GCs) en vCPU-kernen Containerize uw Java-toepassingen.
De juiste VM-SKU voor de Kubernetes-knooppuntgroep bepalen
Bepaal of de Kubernetes-knooppuntgroep of -pools die beschikbaar zijn voor uw cluster, geschikt zijn voor het containergeheugen en de vCPU-kernen die u wilt gebruiken. Als de knooppuntgroep de toepassing kan hosten, gaat u door. Anders richt u een knooppuntgroep in die geschikt is voor de hoeveelheid containergeheugen en het aantal vCPU-kernen dat u wilt instellen.
De kosten van een VM-SKU zijn evenredig met het aantal kernen en de hoeveelheid geheugen. Nadat u uw beginpunt hebt bepaald in termen van vCPU's en geheugen voor één containerinstantie, bepaalt u of u alleen aan de behoeften van uw toepassing kunt voldoen door alleen horizontaal te schalen. Voor betrouwbare, always-on systemen moet minimaal twee replica's beschikbaar zijn. Schaal op en breid uit naar behoefte.
CPU-aanvragen en -limieten instellen
Als u de CPU moet beperken, moet u ervoor zorgen dat u dezelfde waarde toepast voor zowel limits als requests in het implementatiebestand. De JVM past de runtime niet dynamisch aan, zoals de GC en andere threadpools. De JVM leest het aantal processors dat alleen beschikbaar is tijdens het opstarten.
Fooi
Stel dezelfde waarde in voor CPU-aanvragen en CPU-limieten.
containers:
- image: myimage
name: myapp
resources:
limits:
cpu: "2"
requests:
cpu: "2"
Begrijp de beschikbare JVM-processors
Wanneer de HotSpot JVM in OpenJDK identificeert dat deze wordt uitgevoerd in een container, worden waarden zoals cpu_quota en cpu_period gebruikt om te bepalen hoeveel processors er beschikbaar zijn. Over het algemeen wordt elke waarde tot 1000m millicores beschouwd als een computer met een enkele processor. Elke waarde tussen 1001m en 2000m wordt geïdentificeerd als een dubbele processormachine, enzovoort. Deze informatie is beschikbaar via de API Runtime.getRuntime().availableProcessors(). Sommige parallelle GCs kunnen deze waarde ook gebruiken om hun threads te configureren. Andere API's, bibliotheken en frameworks kunnen deze informatie ook gebruiken om threadgroepen te configureren.
Kubernetes CPU-quota zijn gerelateerd aan de hoeveelheid tijd die een proces in de CPU besteedt, en niet het aantal CPU's dat beschikbaar is voor het proces. Runtimes met meerdere threads, zoals de JVM, kunnen nog steeds meerdere processors tegelijk gebruiken, met meerdere threads. Zelfs als een container een limiet van één vCPU heeft, kan de JVM worden geïnstrueerd om twee of meer beschikbare processors te zien.
Als u de JVM wilt informeren over het exacte aantal processors dat moet worden weergegeven in een Kubernetes-omgeving, gebruikt u de volgende JVM-vlag:
-XX:ActiveProcessorCount=N
Geheugenaanvraag en -limieten instellen
Stel de geheugenlimieten in op de hoeveelheid die u eerder hebt bepaald. Zorg ervoor dat het aantal geheugenlimieten het containergeheugen is en NIET de JVM heap-geheugenwaarde.
Fooi
Stel de geheugenaanvragen in die gelijk zijn aan de geheugenlimieten.
containers:
- name: myimage
image: myapp
resources:
limits:
memory: "4Gi"
requests:
memory: "4Gi"
De JVM-argumenten instellen in het implementatiebestand
Vergeet niet om het heapgeheugen van de JVM in te stellen op de hoeveelheid die u eerder hebt bepaald. We raden u aan deze waarde door te geven als een omgevingsvariabele, zodat u deze eenvoudig kunt wijzigen zonder dat u de containerinstallatiekopieën opnieuw hoeft te bouwen.
containers:
- name: myimage
image: myapp
env:
- name: JAVA_OPTS
value: "-XX:+UseParallelGC -XX:MaxRAMPercentage=75"
Vereenvoudig JVM-optimalisatie met de Azure-opdrachtstarter voor Java
In de voorgaande secties worden het aantal processoren, heapgrootte en GC handmatig ingesteld via JVM-vlaggen. Als u deze instellingen niet wilt onderhouden, kan het Azure startprogramma voor opdrachten voor Java (jaz) cloudeigen standaardinstellingen voor u toepassen. Het leest de cgroupgeheugen- en CPU-limieten van de container bij het opstarten en selecteert vervolgens automatisch de best passende heapgrootte en GC-vlaggen.
Als u het hulpprogramma wilt gebruiken, vervangt u de opdracht java door jaz in de opstartopdracht van uw container. Het hulpprogramma is opgenomen in de containerinstallatiekopieën voor de Microsoft Build van OpenJDK, dus er is geen extra installatie nodig:
# Use any Microsoft Build of OpenJDK base image
FROM mcr.microsoft.com/openjdk/jdk:25-ubuntu
# Add your application.jar
COPY application.jar /application.jar
# Use jaz to launch your Java application
CMD ["jaz", "-jar", "application.jar"]
Zie Azure Command Launcher for Java voor installatieopties, ondersteunde omgevingen en configuratiegegevens.
Volgende stappen
- Java-containerisatiestrategieën
- Azure Command Launcher voor Java
- Jakarta EE op Azure-container runtimes
- Oracle WebLogic Server
- IBM WebSphere Liberty, Open Liberty en traditionele WebSphere