共用方式為


如何為 Azure Spring Apps 中裝載的應用程式設定健康情況探查和正常終止期間

本文適用於: ✔️ Java ✔️ C#

本文適用於: ✔️基本/標準✔️企業

本文說明如何使用健康情況探查和正常終止期間,自定義在 Azure Spring Apps 中執行的應用程式。

探查是 Azure Spring Apps 在應用程式實例上定期執行的診斷活動。 若要執行診斷,Azure Spring Apps 會採取下列其中一個動作:

  • 在應用程式實例內執行您選擇的任意命令。
  • 建立 TCP 套接字連線。
  • 提出 HTTP 要求。

Azure Spring Apps 會為每個應用程式提供預設健康情況探查規則。 本文說明如何使用三種健康情況探查來自定義應用程式:

  • 即時性探查會 決定何時重新啟動應用程式。 例如,即時性探查可以識別死結,例如當應用程式執行但無法進行時。 即使發生錯誤,仍可讓應用程式處於死結狀態重新啟動應用程式。

  • 整備探查會 決定應用程式實例何時準備好開始接受流量。 例如,整備探查可以控制哪些應用程式實例會作為應用程式的後端使用。 當應用程式實例尚未就緒時,它會從 Kubernetes 服務探索中移除。 如需詳細資訊,請參閱 探索和註冊 Spring Boot 應用程式。 如需使用企業方案探索服務的詳細資訊,請參閱 使用 Tanzu 服務登錄

  • 啟動探查會 決定應用程式何時啟動。 啟動探查會停用即時性和整備檢查,直到啟動成功為止,確保即時度和整備探查不會干擾應用程式啟動。 您可以使用啟動探查,對啟動緩慢的應用程式執行即時性檢查,防止應用程式在啟動並執行之前終止。

必要條件

  • 具有 Azure Spring Apps 擴充功能的 Azure CLI 。 使用下列命令來移除舊版並安裝最新的擴充功能。 如果您先前已安裝 spring-cloud 擴充功能,請將其卸載,以避免設定和版本不符。

    az extension remove --name spring
    az extension add --name spring
    az extension remove --name spring-cloud
    

設定應用程式的健康情況探查和正常終止

下列各節說明如何使用 Azure CLI 設定健康情況探查和正常終止。

正常終止

下表描述 terminationGracePeriodSeconds 屬性,您可以使用此屬性來設定正常終止。

屬性名稱 描述
terminationGracePeriodSeconds 在應用程式實例中執行的進程經過數秒後,會先傳送終止訊號,再強制停止。 設定此值的時間超過程式的預期清除時間。 其值必須為非負整數。 將寬限期設定為 0 會立即透過終止訊號停止應用程式實例,而沒有機會關閉。 如果值為 nil,Azure Spring Apps 會使用預設寬限期。 預設值是 90

健康情況探查屬性

下表描述可用來設定健康情況探查的屬性。

屬性名稱 描述
initialDelaySeconds 在啟動探查之前,應用程式實例啟動后的秒數。 默認值為 0,最小值。
periodSeconds 執行探查的頻率,以秒為單位。 預設值為 10。 最小值為 1
timeoutSeconds 探查逾時之前的秒數。默認值為 1,最小值。
failureThreshold 探查在成功之後,要視為失敗的連續失敗次數下限。 預設值是 3。 最小值為 1
successThreshold 探查在失敗后要視為成功的連續成功次數下限。 預設值是 1秒。 值必須是 1 ,才能進行活躍度和啟動。 最小值為 1

探查動作屬性

您可以使用探查來檢查應用程式實例的方式有三種。 每個探查都必須定義下列其中一個探查動作:

  • HTTPGetAction

    對指定路徑上的應用程式實例執行 HTTP GET 要求。 如果回應的狀態代碼大於或等於 200 且小於 400,則診斷會視為成功。

    屬性名稱 描述
    scheme 要用於連線到主機的配置。 預設值為 HTTP
    path 在應用程式實例的 HTTP 伺服器上存取的路徑,例如 /healthz
  • ExecAction

    在應用程式實例內執行指定的命令。 如果命令以狀態代碼 0 結束,則診斷會被視為成功。

    屬性名稱 描述
    command 在應用程式實例內執行的命令。 命令的工作目錄是應用程式實例檔案系統中的根目錄 (/)。 因為命令是使用 而不是在 exec 殼層內執行,殼層指令將無法運作。 若要使用殼層,請明確呼叫殼層。 結束狀態為 0 會被視為即時/健康狀態,且非零狀況不良。
  • TCPSocketAction

    對應用程式實例執行 TCP 檢查。

    動作沒有可用的屬性 TCPSocketAction

自訂應用程式

使用下列步驟,使用 Azure 入口網站 自定義您的應用程式。

  1. 在 [設定] 下,選取 [應用程式],然後從列表中選取應用程式。

    Screenshot of Azure portal showing the Apps page.

  2. 選取 左側瀏覽窗格中的 [組態 ],選取 [健康情況探查],然後指定 [健康情況探查屬性]。

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

  3. 若要設定終止寬限期,請選取 [一般設定],然後在 [ 終止寬限期 ] 方塊中指定值。

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

最佳作法

將健康情況探查新增至 Azure Spring Apps 時,請使用下列最佳做法:

  • 一起使用活躍度和整備程度探查。 Azure Spring Apps 同時提供兩種服務探索方法。 當整備探查失敗時,應用程式實例只會從 Kubernetes 服務探索中移除。 正確設定的活躍度探查可以從 Eureka 服務探索中移除已發出的應用程式實例,以避免發生非預期的情況。 如需服務探索的詳細資訊,請參閱 探索和註冊 Spring Boot 應用程式。 如需使用企業方案探索服務的詳細資訊,請參閱 使用 Tanzu 服務登錄

  • 當應用程式實例啟動時,第一次檢查會在 指定的 initialDelaySeconds延遲之後進行。 後續檢查會根據 所 periodSeconds指定的期間長度,定期進行。 如果應用程式無法回應所 failureThreshold指定的要求數次,則會重新啟動應用程式實例。 請確定您的應用程式可以啟動夠快,或更新這些參數,讓逾時總數 initialDelaySeconds + periodSeconds * failureThreshold 超過應用程式的開始時間。

  • 針對 Spring Boot 應用程式,Spring Boot 隨附於 健康情況群組 支援,可讓開發人員選取健康情況指標的子集,並將其分組為單一相互關聯的健康狀態。 如需詳細資訊,請參閱 Spring 部落格上的 Spring Boot 的 Liveness 和 Readiness Probes。

    下列範例顯示 Spring Boot 的活躍度探查:

    "probe": {
           "initialDelaySeconds": 30,
           "periodSeconds": 10,
           "timeoutSeconds": 1,
           "failureThreshold": 30,
           "successThreshold": 1,
           "probeAction": {
               "type": "HTTPGetAction",
               "scheme": "HTTP",
               "path": "/actuator/health/liveness"
           }
       }
    

    下列範例顯示 Spring Boot 的整備探查:

    "probe": {
           "initialDelaySeconds": 0,
           "periodSeconds": 10,
           "timeoutSeconds": 1,
           "failureThreshold": 3,
           "successThreshold": 1,
           "probeAction": {
               "type": "HTTPGetAction",
               "scheme": "HTTP",
               "path": "/actuator/health/readiness"
           }
       }
    

常見問題集

本節提供搭配 Azure Spring Apps 使用健康情況探查的常見問題解答。

  • 當我使用自定義健康情況探查建立應用程式時,我收到 400 個回應。 這表示什麼意思?

    錯誤訊息指出哪些探查負責布建失敗。 請確定健康情況探查規則正確,且逾時時間足以讓應用程式處於執行中狀態。

  • 現有應用程式的預設探查設定為何?

    下列範例顯示預設設定:

    "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
    }
    

下一步