如何為 Azure Spring Apps 中裝載的應用程式設定健康情況探查和正常終止期間
注意
基本、標準和企業方案將從 2025 年 3 月中旬開始淘汰,並停用 3 年。 建議您轉換至 Azure Container Apps。 如需詳細資訊,請參閱 Azure Spring Apps 淘汰公告。
標準 耗用量和專用 方案將從 2024 年 9 月 30 日起淘汰,並在六個月後完成關閉。 建議您轉換至 Azure Container Apps。 如需詳細資訊,請參閱 將 Azure Spring Apps 標準取用和專用方案遷移至 Azure Container Apps。
本文適用於:✅ Java ✅ C#
本文適用於:✅ 基本/標準 ✅ 企業
本文說明如何使用健康情況探查和正常終止期間,自定義在 Azure Spring Apps 中執行的應用程式。
探查是 Azure Spring Apps 在應用程式實例上定期執行的診斷活動。 若要執行診斷,Azure Spring Apps 會採取下列其中一個動作:
- 在應用程式實例內執行您選擇的任意命令。
- 建立 TCP 套接字連線。
- 提出 HTTP 要求。
Azure Spring Apps 會為每個應用程式提供預設健康情況探查規則。 本文說明如何使用三種健康情況探查來自定義應用程式:
即時性探查會 決定何時重新啟動應用程式。 例如,即時性探查可以識別死結,例如當應用程式執行但無法進行時。 即使發生錯誤,仍可讓應用程式處於死結狀態重新啟動應用程式。
整備探查會 決定應用程式實例何時準備好開始接受流量。 例如,整備探查可以控制哪些應用程式實例會作為應用程式的後端使用。 當應用程式實例尚未就緒時,它會從 Kubernetes 服務探索中移除。 如需詳細資訊,請參閱 探索和註冊 Spring Boot 應用程式。 如需使用企業方案探索服務的詳細資訊,請參閱 使用 Tanzu 服務登錄。
啟動探查會 決定應用程式何時啟動。 啟動探查會停用即時性和整備檢查,直到啟動成功為止,確保即時度和整備探查不會干擾應用程式啟動。 您可以使用啟動探查,對啟動緩慢的應用程式執行即時性檢查,防止應用程式在啟動並執行之前終止。
必要條件
使用 Azure Spring 應用程式延伸模組的 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 入口網站 自定義您的應用程式。
最佳作法
將健康情況探查新增至 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 }
下一步
- 在 Azure Spring Apps 中調整應用程式。