Hinweis
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.
Azure Container Apps kann jede containerisierte Java-Anwendung in der Cloud ausführen und bietet dabei flexible Optionen für die Bereitstellung Ihrer Anwendungen.
Wenn Sie Container Apps für Ihre containerisierten Java-Anwendungen verwenden, erhalten Sie Folgendes:
Kostengünstige Skalierung: Wenn Sie den Verbrauchsplan verwenden, können Ihre Java-Apps auf Null skaliert werden. Die Skalierung bei geringem Bedarf für Ihre App führt automatisch zu geringeren Kosten für Ihre Projekte.
Bereitstellungsoptionen: Azure Container-Apps sind in Buildpacks integriert, mit denen Sie direkt aus einem Maven-Build, mithilfe von Artefaktdateien oder mit Ihrer eigenen Dockerfile-Datei bereitstellen können.
Automatische Arbeitsspeicheranpassung (Vorschau): Container Apps optimiert, wie Java Virtual Machine (JVM) Arbeitsspeicher verwaltet, wodurch der größtmögliche Arbeitsspeicher für Ihre Java-Anwendungen zur Verfügung steht.
Umgebungsvariablen erstellen (Vorschau): Sie können benutzerdefinierte Schlüssel-Wert-Paare konfigurieren, um den Build des Java-Images aus dem Quellcode zu steuern.
In diesem Artikel werden die Informationen beschrieben, die Sie beim Erstellen von Java-Anwendungen in Azure-Container-Apps benötigen.
Bereitstellungstypen
Das Ausführen containerisierter Anwendungen bedeutet in der Regel, dass Sie eine Dockerfile für Ihre Anwendung erstellen müssen. Das Ausführen von Java-Anwendungen in Container Apps bietet allerdings einige Optionen.
| Typ | Beschreibung | Verwendet Buildpacks | Verwendet ein Dockerfile |
|---|---|---|---|
| Quellcodebuild | Ermöglicht die direkte Bereitstellung in Container Apps aus Ihrem Quellcode. | Ja | Nein |
| Artefakt-Erstellung | Sie können für die Bereitstellung in Container Apps einen Maven-Build erstellen. | Ja | Nein |
| Dockerfile | Sie können Ihre Dockerfile manuell erstellen und die vollständige Kontrolle über Ihre Bereitstellung übernehmen. | Nein | Ja |
Hinweis
Die Buildpacks-Bereitstellungen unterstützen die Java Development Kit (JDK)-Versionen 8, 11, 17 und 21.
Anwendungstypen
Verschiedene Anwendungstypen werden entweder als einzelne Container-App oder als Container-Apps-Auftrag implementiert. Verwenden Sie die folgende Tabelle, um zu entscheiden, welcher Anwendungstyp für Ihr Szenario am besten geeignet ist.
Die Beispielliste in dieser Tabelle ist nicht vollständig, soll Ihnen aber dabei helfen, den Zweck verschiedener Anwendungstypen besser zu verstehen.
| Typ | Beispiele | Implementieren als... |
|---|---|---|
| Webanwendungen und API-Endpunkte | Spring Boot, Quarkus, Apache Tomcat und Jetty | Einzelne Container-App |
| Konsolenanwendungen, geplante Aufgaben, Aufgabenausführung, Batchaufträge | SparkJobs, ETL-Aufgaben, Spring Batch-Auftrag, Jenkins-Pipelineauftrag | Container Apps-Auftrag |
Fehlersuche
Überprüfen Sie beim Debuggen Ihrer Java-Anwendung in Container Apps unbedingt den Java In-Process Agent auf Protokolldatenstrom- und Konsolendebuggingmeldungen.
Problembehandlung
Beachten Sie beim Entwickeln Ihrer Java-Anwendungen die folgenden Punkte:
Standardressourcen: Standardmäßig sind für eine App eine halbe CPU und 1 GB verfügbar.
Zustandslose Prozesse: Wenn Ihre Container-App ein- und ausskaliert, werden neue Prozesse erstellt und heruntergefahren. Planen Sie voraus, damit Sie Daten in freigegebenen Speicher wie Datenbanken und Dateisystemfreigaben schreiben. Erwarten Sie nicht, dass Dateien, die direkt in das Containerdateisystem geschrieben wurden, für einen anderen Container verfügbar sind.
Skalierung auf Null ist die Standardeinstellung: Wenn Sie sicherstellen müssen, dass eine oder mehrere Instanzen Ihrer Anwendung kontinuierlich ausgeführt werden, müssen Sie eine Skalierungsregel definieren, die ihren Anforderungen am besten entspricht.
Unerwartetes Verhalten: Wenn Ihre Container-App nicht erstellt, gestartet oder ausgeführt werden kann, überprüfen Sie, ob der Artefaktpfad in Ihrem Container ordnungsgemäß festgelegt ist.
Buildpack-Supportprobleme: Wenn Ihr Buildpack Abhängigkeiten oder die erforderliche Java-Version nicht unterstützt, erstellen Sie Ihre eigene Dockerfile-Datei, um Ihre App bereitzustellen. Sie können eine Dockerfile-Beispieldatei als Referenz anzeigen.
SIGTERM- und SIGINT-Signale: Standardmäßig verarbeitet die JVM
SIGTERM- undSIGINT-Signale und übergibt sie nicht an die Anwendung, es sei denn, Sie fangen diese Signale ab und verarbeiten sie in Ihrer Anwendung entsprechend. Container Apps verwendet sowohlSIGTERMals auchSIGINTfür die Prozesssteuerung. Wenn Sie diese Signale nicht erfassen und Ihre Anwendung unerwartet beendet wird, gehen diese Signale möglicherweise verloren, es sei denn, Sie behalten sie dauerhaft im Speicher bei.Zugriff auf Containerimages: Wenn Sie eine Artefakt- oder Quellcodebereitstellung in Kombination mit der Standardregistrierung verwenden, haben Sie keinen direkten Zugriff auf Ihre Containerimages.
Überwachung
Alle Standard-Observability-Tools können mit Ihrer Java-Anwendung verwendet werden. Beachten Sie beim Erstellen Ihrer Java-Anwendungen, die in Container Apps ausgeführt werden sollen, die folgenden Punkte:
Metriken: JVM-Metriken (Java Virtual Machine) sind entscheidend für die Überwachung der Integrität und Leistung Ihrer Java-Anwendungen. Die gesammelten Daten umfassen Einblicke in die Speichernutzung, Garbage Collection und Threadanzahl Ihrer JVM. Sie können Metriken überprüfen, um die Integrität und Stabilität Ihrer Anwendungen sicherzustellen.
Protokollierung: Senden Sie Anwendungs- und Fehlermeldungen an
stdoutoderstderror, damit sie im Protokolldatenstrom angezeigt werden können. Vermeiden Sie die direkte Protokollierung im Dateisystem des Containers, wie es üblich ist, wenn Sie beliebte Protokollierungsdienste verwenden.Konfiguration der Leistungsüberwachung: Stellen Sie Leistungsüberwachungsdienste als separate Container in Ihrer Container Apps-Umgebung bereit, damit direkt auf Ihre Anwendung zugegriffen werden kann.
Diagnostik
Azure Container Apps bietet integrierte Diagnosetools ausschließlich für Java-Entwickler. Diese Unterstützung vereinfacht das Debuggen und die Fehlerbehebung von Java-Anwendungen, die auf Azure Container Apps ausgeführt werden, und sorgt so für mehr Effizienz und Benutzerfreundlichkeit.
- Dynamische Loggerebene: Ermöglicht es Ihnen, ohne Codeänderungen auf verschiedene Ebenen von Protokolldetails zuzugreifen und sie zu überprüfen, ohne einen Neustart Ihrer App zu erzwingen. Weitere Informationen finden Sie unter dynamische Protokollierungsebene festlegen.
Skalierung
Wenn Sie sicherstellen müssen, dass Anforderungen von Ihren Front-End-Anwendungen denselben Server erreichen, oder Ihre Front-End-App zwischen mehreren Containern aufgeteilt ist, müssen Sie persistente Sitzungen aktivieren.
Sicherheit
Die Container-Apps-Laufzeit beendet TLS für Sie in Ihrer Container-Apps-Umgebung.
Speicherverwaltung
Um die Speicherverwaltung in Ihrer Java-Anwendung zu optimieren, stellen Sie sicher, dass die JVM-Speicheranpassung in Ihrer App aktiviert ist.
Der Arbeitsspeicher wird in Gibibytes (GiB) und CPU-Kernpaaren gemessen. Die folgende Tabelle zeigt den Bereich der Ressourcen, die für Ihre Container-App verfügbar sind.
| Schwellenwert | CPU-Kerne | Arbeitsspeicher in Gibibytes (GiB) |
|---|---|---|
| Minimum | 0,25 | 0.5 |
| Maximum | 4 | 8 |
Kerne stehen in 0,25-Kernschritten zur Verfügung, wobei Arbeitsspeicher in einem Verhältnis von 2:1 verfügbar ist. Wenn Sie beispielsweise 1.25 Kerne benötigen, stehen Ihrer Container-App 2,5 GiB Arbeitsspeicher zur Verfügung.
Hinweis
Für Apps, die JDK-Version 9 oder niedriger verwenden, müssen Sie benutzerdefinierte JVM-Speichereinstellungen definieren, die der Speicherzuweisung in Azure Container Apps entsprechen.
Unterstützung für Java-Komponenten
Azure Container Apps bieten Unterstützung für die folgenden Java-Komponenten als verwaltete Dienste:
Eureka Server for Spring: Dienstregistrierung und -ermittlung sind wichtige Anforderungen für die Verwaltung einer Liste der Live-Anwendungsinstanzen. Ihre Anwendung verwendet diese Liste zum Routing und Lastenausgleich eingehender Anforderungen. Das manuelle Konfigurieren der einzelnen Clients ist zeitaufwendig und kann menschliche Fehler verursachen. Eureka Server vereinfacht die Verwaltung der Dienstermittlung, indem es als Dienstregistrierung fungiert, in der sich Microservices selbst registrieren und andere Dienste im System entdecken können.
Config Server for Spring: Config Server stellt eine zentralisierte externe Konfigurationsverwaltung für verteilte Systeme bereit. Diese Komponente wurde entwickelt, um die Herausforderungen beim Verwalten von Konfigurationseinstellungen in mehreren Microservices in einer cloudeigenen Umgebung zu beheben.
Gateway für Spring: Gateway für Spring bietet eine effiziente und leistungsstarke Möglichkeit zum Weiterleiten, Verwalten und Verarbeiten von API-Anforderungen als Teil einer Microservices-Architektur. Es dient als API-Gateway , das externe Anforderungen an verschiedene Dienste weiter leitet und Funktionen wie Filterung und Lastenausgleich hinzufügt.
Administrator für Spring: Die verwaltete Komponente "Admin für Spring" stellt eine administrative Schnittstelle bereit, die für Spring Boot-Webanwendungen mit Aktuatorendpunkten entwickelt wurde. Eine verwaltete Komponente bietet Integration und Verwaltung für Ihre Container-App, indem Sie Ihre Container-App an die Komponente „Administrator für Spring“ binden können.