Anmerkung
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel wird beschrieben, wie Sie Ihre Java-Anwendungen für die Bereitstellung auf Kubernetes containern. Anleitungen zu Containerspeicher, JVM-Heap-Speicher, Garbage Collector (GCs) und vCPU-Kernen finden Sie unter Containerisieren Ihrer Java-Anwendungen.
Ermitteln der entsprechenden VM-SKU für den Kubernetes-Knotenpool
Ermitteln Sie, ob der Kubernetes-Knotenpool oder -Pools, die für Ihren Cluster verfügbar sind, in den Containerspeicher und die vCPU-Kerne passen, die Sie verwenden möchten. Wenn der Knotenpool die Anwendung hosten kann, fahren Sie mit dem Vorgang fort. Stellen Sie andernfalls einen Knotenpool bereit, der für die Menge des Containerspeichers und die Anzahl der vCPU-Kerne geeignet ist, die Sie verwenden.
Denken Sie daran, dass die Kosten einer VM-SKU proportional zur Anzahl der Kerne und der Menge des Arbeitsspeichers sind. Nachdem Sie den Ausgangspunkt in Bezug auf vCPUs und Speicher für eine Containerinstanz ermittelt haben, bestimmen Sie, ob Sie die Anforderungen Ihrer Anwendung nur durch horizontale Skalierung erfüllen können. Für zuverlässige, always-on-Systeme müssen mindestens zwei Replikate verfügbar sein. Skalieren Sie nach Bedarf nach oben und unten.
Festlegen von CPU-Anforderungen und -Grenzwerten
Wenn Sie die CPU einschränken müssen, stellen Sie sicher, dass Sie denselben Wert sowohl für limits als auch für requests in der Bereitstellungsdatei anwenden. Das JVM passt seine Laufzeit nicht dynamisch an, z. B. die GC- und andere Threadpools. Die JVM liest die Anzahl der Prozessoren, die nur während der Startzeit verfügbar sind.
Tipp
Legen Sie denselben Wert für CPU-Anforderungen und CPU-Grenzwerte fest.
containers:
- image: myimage
name: myapp
resources:
limits:
cpu: "2"
requests:
cpu: "2"
Grundlegendes zu verfügbaren JVM-Prozessoren
Wenn die HotSpot-JVM in OpenJDK identifiziert wird, dass sie in einem Container ausgeführt wird, verwendet sie Werte wie cpu_quota und cpu_period, um zu bestimmen, wie viele Prozessoren verfügbar sind. Allgemein wird jeder Wert bis 1000m Millicore als eine Maschine mit einem Prozessor identifiziert. Jeder Wert zwischen 1001m und 2000m wird als dualer Prozessorcomputer und so weiter identifiziert. Diese Informationen sind über die API Runtime.getRuntime().availableProcessors()verfügbar. Einige der parallelen GCs könnten diesen Wert auch zur Konfiguration ihrer Threads verwenden. Andere APIs, Bibliotheken und Frameworks können diese Informationen auch zum Konfigurieren von Threadpools verwenden.
Kubernetes CPU-Kontingente beziehen sich auf die Zeit, die ein Prozess in der CPU aufwendet, und nicht die Anzahl der cpUs, die für den Prozess verfügbar sind. Multithread-Laufzeiten, z. B. der JVM, können weiterhin mehrere Prozessoren gleichzeitig mit mehreren Threads verwenden. Selbst wenn ein Container einen Grenzwert für eine vCPU hat, wird der JVM möglicherweise angewiesen, zwei oder mehr verfügbare Prozessoren anzuzeigen.
Um den JVM über die genaue Anzahl der Prozessoren zu informieren, die es in einer Kubernetes-Umgebung sehen sollte, verwenden Sie das folgende JVM-Flag:
-XX:ActiveProcessorCount=N
Festlegen von Speicheranforderungen und -grenzwerten
Legen Sie die Speichergrenzwerte auf die Menge fest, die Sie zuvor festgelegt haben. Vergewissern Sie sich, dass das Speicherlimit der Containerspeicher ist und NICHT der JVM-Heap-Speicherwert.
Tipp
Setzen Sie die Speicheranforderungen gleich den Speicherbeschränkungen.
containers:
- name: myimage
image: myapp
resources:
limits:
memory: "4Gi"
requests:
memory: "4Gi"
Festlegen der JVM-Argumente in der Bereitstellungsdatei
Denken Sie daran, den JVM-Heap-Speicher auf die Menge festzulegen, die Sie zuvor festgelegt haben. Es wird empfohlen, diesen Wert als Umgebungsvariable zu übergeben, damit Sie ihn ganz einfach ändern können, ohne das Containerimage neu erstellen zu müssen.
containers:
- name: myimage
image: myapp
env:
- name: JAVA_OPTS
value: "-XX:+UseParallelGC -XX:MaxRAMPercentage=75"
Nächste Schritte
- Strategien für die Java-Containerisierung
- Jakarta EE für Azure-Container-Runtime-Umgebungen
- Oracle WebLogic Server
- IBM WebSphere Liberty, Open Liberty und traditionelle WebSphere