Konfigurieren von Integritätsüberprüfungen und Zeiträume für die ordnungsgemäße Beendigung von Apps, die in Azure Spring Apps gehostet werden
Hinweis
Die Pläne Basic, Standard und Enterprise gelten ab Mitte März 2025 als veraltet und werden über einen Zeitraum von drei Jahren eingestellt. Es wird empfohlen, auf Azure Container Apps umzustellen. Weitere Informationen finden Sie in der Ankündigung zur Einstellung von Azure Spring Apps.
Der Plan Standardverbrauch und dediziert gilt ab dem 30. September 2024 als veraltet und wird nach sechs Monaten vollständig eingestellt. Es wird empfohlen, auf Azure Container Apps umzustellen. Weitere Informationen finden Sie unter Migrieren des Plans „Standardverbrauch und dediziert“ von Azure Spring Apps zu Azure Container Apps.
Dieser Artikel gilt für:✅️ Java ✅ C#
Dieser Artikel gilt für:✅ Basic/Standard ✅ Enterprise
Hier erfahren Sie, wie Sie Apps anpassen, die in Azure Spring Apps ausgeführt werden, mit Integritätsüberprüfungen und Zeiträumen für eine ordnungsgemäße Beendigung.
Ein Integritätstest ist eine Diagnoseaktivität, die in regelmäßigen Abständen von Azure Spring Apps für eine App-Instanz ausgeführt wird. Um eine Diagnose durchzuführen, führt Azure Spring Apps eine der folgenden Aktionen aus:
- Ausführen eines beliebigen Befehls Ihrer Wahl innerhalb der App-Instanz.
- Herstellen einer TCP-Socketverbindung.
- Ausführen einer HTTP-Anforderung.
Azure Spring Apps bietet standardmäßige Integritätstestregeln für jede Anwendung. In diesem Artikel wird gezeigt, wie Sie Ihre Anwendung mit drei Arten von Integritätstests anpassen können:
Livetests bestimmen, wann eine Anwendung neu gestartet werden soll. Beispielsweise könnten Livetests einen Deadlock identifizieren, z. B. wenn eine Anwendung ausgeführt wird, aber keinen Fortschritt erzielen kann. Das Neustarten der Anwendung in einem Deadlockzustand kann die Anwendung trotz Fehlern verfügbar machen.
Bereitschaftstests bestimmen, wann eine App-Instanz bereit ist, Datenverkehr zu akzeptieren. Beispielsweise können Bereitschaftstests steuern, welche App-Instanzen als Back-Ends für die Anwendung verwendet werden. Wenn eine App-Instanz nicht bereit ist, wird sie aus der Kubernetes-Dienstermittlung entfernt. Weitere Informationen finden Sie unter Entdecken und Registrieren Ihrer Spring Boot-Anwendungen. Weitere Informationen zur Dienstermittlung mit dem Enterprise-Plan finden Sie unter Verwenden der Tanzu-Dienstregistrierung.
Starttests bestimmen, wann eine Anwendung gestartet wurde. Ein Starttest deaktiviert Live- und Bereitschaftstests, bis der Start erfolgreich war, wodurch sichergestellt wird, dass Live- und Bereitschaftstests den Anwendungsstart nicht stören. Sie können Starttests verwenden, um Livetests für langsam startende Anwendungen durchzuführen und zu verhindern, dass die App beendet wird, bevor sie aktiv und verfügbar wird.
Voraussetzungen
Azure CLI mit der Azure Spring Apps-Erweiterung. Verwenden Sie den folgenden Befehl, um frühere Versionen zu entfernen und die neueste Erweiterung zu installieren. Wenn Sie zuvor die spring-cloud-Erweiterung installiert hatten, deinstallieren Sie diese Erweiterung, um Konfigurations- und Versionskonflikte zu vermeiden.
az extension remove --name spring az extension add --name spring az extension remove --name spring-cloud
Konfigurieren von Integritätstests und ordnungsgemäße Beendigung für Anwendungen
In den folgenden Abschnitten wird beschrieben, wie Sie Integritätstests und eine ordnungsgemäße Beendigung mithilfe der Azure CLI konfigurieren.
Ordnungsgemäße Beendigung
In der folgenden Tabelle wird die terminationGracePeriodSeconds
-Eigenschaft beschrieben, die Sie zum Konfigurieren einer ordnungsgemäßen Beendigung verwenden können.
Eigenschaftenname | Beschreibung |
---|---|
terminationGracePeriodSeconds |
Der Zeitraum in Sekunden, nach dem ein Beendigungssignal an die in der App-Instanz ausgeführten Prozesse gesendet wird, bevor sie zwangsweise angehalten werden. Legen Sie für diesen Wert eine längere Zeit als die erwartete Bereinigungszeit für Ihren Prozess fest. Der Wert muss eine nicht negative ganze Zahl sein. Wenn Sie die Karenzzeit für die Beendigung auf 0 festlegen, wird die App-Instanz sofort mit dem Kill-Signal beendet, ohne dass sie die Möglichkeit zum Herunterfahren erhält. Wenn der Wert Null ist, verwendet Azure Spring Apps die Standardkarenzzeit. Der Standardwert ist 90. |
Integritätstesteigenschaften
In der folgenden Tabelle werden die Eigenschaften beschrieben, die Sie zum Konfigurieren von Integritätstests verwenden können.
Eigenschaftenname | Beschreibung |
---|---|
initialDelaySeconds |
Die Anzahl der Sekunden, die nach dem Start der App-Instanz vergehen, bevor Tests initiiert werden. Der Standardwert ist 0, der Mindestwert. |
periodSeconds |
Die Häufigkeit in Sekunden, mit der der Test durchgeführt werden soll. Der Standardwert lautet 10. Der Mindestwert ist 1. |
timeoutSeconds |
Die Anzahl der Sekunden, bis es zum Timeout des Tests kommt. Der Standardwert ist 1, der Mindestwert. |
failureThreshold |
Die Mindestanzahl der aufeinander folgenden Fehler für den Test, der als fehlgeschlagen betrachtet werden soll, nachdem er erfolgreich war. Der Standardwert ist 3. Der Mindestwert ist 1. |
successThreshold |
Die Anzahl der Erfolge, die mindestens aufeinander folgen müssen, damit ein Test nach einem Fehler wieder als erfolgreich betrachtet wird. Der Standardwert ist 1. Für Live- und Starttests muss der Wert 1 sein. Der Mindestwert ist 1. |
Aktionseigenschaften
Es gibt drei verschiedene Möglichkeiten, um eine App-Instanz mithilfe eines Tests zu überprüfen. Jeder Test muss eine der folgenden Testaktionen definieren:
HTTPGetAction
Führt eine HTTP GET-Anforderung für die App-Instanz auf einem angegebenen Pfad aus. Die Diagnose wird als erfolgreich betrachtet, wenn die Antwort über einen Statuscode größer oder gleich 200 und weniger als 400 verfügt.
Eigenschaftenname Beschreibung scheme
Das Schema zum Herstellen einer Verbindung mit dem Host. Die Standardeinstellung ist HTTP. path
Der Pfad für den Zugriff auf den HTTP-Server der App-Instanz, z. B. /healthz. ExecAction
Führt einen angegebenen Befehl innerhalb der App-Instanz aus. Die Diagnose wird als erfolgreich betrachtet, wenn der Befehl mit einem Statuscode von 0 beendet wird.
Eigenschaftenname Beschreibung command
Der Befehl, der in der App-Instanz ausgeführt werden soll. Das Arbeitsverzeichnis für den Befehl ist das Stammverzeichnis (/) im Dateisystem der App-Instanz. Da der Befehl mit exec
ausgeführt wird, anstatt in einer Shell, funktionieren Shellanweisungen nicht. Um eine Shell zu verwenden, rufen Sie die Shell explizit auf. Ein Beendigungsstatus von 0 wird als live/fehlerfrei behandelt, ein Beendigungsstatus ungleich Null als fehlerhaft.TCPSocketAction
Führt eine TCP-Überprüfung für die App-Instanz aus.
Es sind keine Eigenschaften für die
TCPSocketAction
-Aktion verfügbar.
Anpassen Ihrer Anwendung
Verwenden Sie die folgenden Schritte, um Ihre Anwendung im Azure-Portal anzupassen.
Wählen Sie unter Einstellungen die Option Apps aus, und wählen Sie dann die Anwendung aus der Liste aus.
Wählen Sie im linken Navigationsbereich Konfiguration aus, wählen Sie Integritätstests aus, und geben Sie dann Integritätstesteigenschaften an.
Wählen Sie zum Festlegen der Karenzzeit für die Beendigung Allgemeine Einstellungen aus, und geben Sie einen Wert im Feld Karenzzeit für Beendigung an.
Bewährte Methoden
Verwenden Sie die folgenden bewährten Methoden, wenn Sie Integritätstests zu Azure Spring Apps hinzufügen:
Verwenden Sie Live- und Bereitschaftstests zusammen. Azure Spring Apps stellt gleichzeitig zwei Ansätze für die Dienstermittlung bereit. Wenn der Bereitschaftstest fehlschlägt, wird die App-Instanz nur aus der Kubernetes-Dienstermittlung entfernt. Ein ordnungsgemäß konfigurierter Livetest kann die ausgegebene App-Instanz aus der Eureka-Dienstermittlung entfernen, um unerwartete Fälle zu vermeiden. Weitere Informationen zur Dienstermittlung finden Sie unter Ermitteln und Registrieren Ihrer Spring Boot-Anwendungen. Weitere Informationen zur Dienstermittlung mit dem Enterprise-Plan finden Sie unter Verwenden der Tanzu-Dienstregistrierung.
Wenn eine App-Instanz gestartet wird, erfolgt der erste Test nach der durch
initialDelaySeconds
angegebenen Verzögerung. Nachfolgende Tests werden in regelmäßigen Abständen gemäß der durchperiodSeconds
angegebenen Zeitraumlänge durchgeführt. Wenn die App mehrmals nicht auf die Anforderungen reagiert, wie überfailureThreshold
angegeben, wird die App-Instanz neu gestartet. Stellen Sie sicher, dass Ihre Anwendung schnell genug starten kann, oder aktualisieren Sie diese Parameter so, dass das GesamttimeoutinitialDelaySeconds + periodSeconds * failureThreshold
länger als die Startzeit Ihrer Anwendung ist.Für Spring Boot-Anwendungen wird Spring Boot mit Unterstützung von Integritätsgruppen ausgeliefert, sodass Entwickler eine Teilmenge von Integritätsindikatoren auswählen und sie unter einem einzelnen korrelierten Integritätsstatus gruppieren können. Weitere Informationen finden Sie unter Live- und Bereitschaftstests mit Spring Boot im Spring-Blog.
Das folgende Beispiel zeigt einen Livetest mit Spring Boot:
"probe": { "initialDelaySeconds": 30, "periodSeconds": 10, "timeoutSeconds": 1, "failureThreshold": 30, "successThreshold": 1, "probeAction": { "type": "HTTPGetAction", "scheme": "HTTP", "path": "/actuator/health/liveness" } }
Das folgende Beispiel zeigt einen Bereitschaftstest mit Spring Boot:
"probe": { "initialDelaySeconds": 0, "periodSeconds": 10, "timeoutSeconds": 1, "failureThreshold": 3, "successThreshold": 1, "probeAction": { "type": "HTTPGetAction", "scheme": "HTTP", "path": "/actuator/health/readiness" } }
Häufig gestellte Fragen
Dieser Abschnitt bietet Antworten auf häufig gestellte Fragen zur Verwendung von Integritätstests mit Azure Spring Apps.
Ich habe eine Antwort vom Typ „400“ erhalten, als ich Anwendungen mit angepassten Integritätstests erstellt habe. Was bedeutet das?
Die Fehlermeldung weist darauf hin, welcher Test für den Bereitstellungsfehler verantwortlich ist. Stellen Sie sicher, dass die Integritätstestregeln korrekt sind und das Timeout lang genug ist, damit die Anwendung den Zustand der Ausführung erreichen kann.
Was sind die Standardtesteinstellungen für eine vorhandene Anwendung?
Das folgende Beispiel zeigt die Standardeinstellungen:
"startupProbe": null, "livenessProbe": { "disableProbe": false, "failureThreshold": 3, "initialDelaySeconds": 300, "periodSeconds": 10, "probeAction": { "type": "TCPSocketAction" }, "successThreshold": 1, "timeoutSeconds": 3 }, "readinessProbe": { "disableProbe": false, "failureThreshold": 3, "initialDelaySeconds": 0, "periodSeconds": 5, "probeAction": { "type": "TCPSocketAction" }, "successThreshold": 1, "timeoutSeconds": 3 }