Freigeben über


Konfigurieren von Integritätsüberprüfungen und Zeiträume für die ordnungsgemäße Beendigung von Apps, die in Azure Spring Apps gehostet werden

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 Service Registry.

  • 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.

  1. Wählen Sie unter Einstellungen die Option Apps aus, und wählen Sie dann die Anwendung aus der Liste aus.

    Screenshot of Azure portal showing the Apps page.

  2. Wählen Sie im linken Navigationsbereich Konfiguration aus, wählen Sie Integritätstests aus, und geben Sie dann Integritätstesteigenschaften an.

    Screenshot of the Azure portal Configuration page showing the Health probes tab.

  3. 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.

    Screenshot of the Azure portal Configuration page showing the General settings tab.

Bewährte Methoden

Verwenden Sie beim Hinzufügen von Integritätssonden zu Azure Spring Apps die folgenden bewährten Methoden:

  • 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 Service Registry.

  • 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 durch periodSeconds angegebenen Zeitraumlänge durchgeführt. Wenn die App mehrmals nicht auf die Anforderungen reagiert, wie über failureThreshold 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 Gesamttimeout initialDelaySeconds + periodSeconds * failureThreshold länger als die Startzeit Ihrer Anwendung ist.

  • Für Spring Boot-Anwendungen wird Spring Boot mit der Unterstützung für Integritätsgruppen ausgeliefert, sodass Entwickler eine Teilmenge der Integritätsindikatoren auswählen und 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
    }
    

Nächste Schritte