Azure 容器應用程式中的健全狀態探查
Azure 容器應用程式健全狀態探查可讓容器應用程式執行階段定期檢查容器應用程式的狀態。
您可以使用 TCP 或 HTTP(S) 以獨佔方式設定探查。
容器應用程式支援下列探查方式:
探查 | 描述 |
---|---|
啟動 | 檢查是否已成功啟動您的應用程式。 此檢查與即時探查不同,並在應用程式的初始啟動階段執行。 |
活躍度: | 檢查您的應用程式是否仍在執行中且為回應式。 |
準備就緒 | 檢查以查看複本是否準備好處理收到的要求。 |
如需 Azure 容器應用程式中所支援探查規格的完整清單,請參閱 Azure REST API 規格。
HTTP 探查
HTTP 探查可讓您實作自訂邏輯,以在報告狀況良好的狀態之前檢查應用程式相依性的狀態。
設定健全狀態探查端點,以 HTTP 狀態碼大於或等於 200
且小於 400
回應表示成功。 此範圍以外的任何其他回應碼都表示失敗。
下列範例示範如何在 JavaScript 中實作活躍度端點。
const express = require('express');
const app = express();
app.get('/liveness', (req, res) => {
let isSystemStable = false;
// check for database availability
// check filesystem structure
// etc.
// set isSystemStable to true if all checks pass
if (isSystemStable) {
res.status(200); // Success
} else {
res.status(503); // Service unavailable
}
})
TCP 探查
TCP 探查會等待與伺服器建立連線,以表示成功。 如果探查無法建立應用程式連線,該探查便會失敗。
限制
- 每個容器只能新增每個探查類型的其中一個。
- 不支援
exec
探查。 - 連接埠值必須是整數;不支援具名連接埠。
- 不支援 gRPC。
範例
下列程式代碼清單示範如何定義容器的健全狀態探查。
...
預留位置表示省略的程式碼。 如需完整的 ARM 範本詳細資料,請參閱容器應用程式 ARM 範本 API 規格。
{
...
"containers":[
{
"image":"nginx",
"name":"web",
"probes": [
{
"type": "liveness",
"httpGet": {
"path": "/health",
"port": 8080,
"httpHeaders": [
{
"name": "Custom-Header",
"value": "liveness probe"
}]
},
"initialDelaySeconds": 7,
"periodSeconds": 3
},
{
"type": "readiness",
"tcpSocket": {
"port": 8081
},
"initialDelaySeconds": 10,
"periodSeconds": 3
},
{
"type": "startup",
"httpGet": {
"path": "/startup",
"port": 8080,
"httpHeaders": [
{
"name": "Custom-Header",
"value": "startup probe"
}]
},
"initialDelaySeconds": 3,
"periodSeconds": 3
}]
}]
...
}
選擇性 failureThreshold
設定會定義執行失敗時,容器應用程式嘗試執行探查的嘗試次數。 超過 failureThreshold
數量的嘗試導致每個探查類型產生不同結果。
預設的組態
如果啟用輸入,則如果未針對每個類型定義任何探查,則會自動將下列預設探查新增至主要應用程式容器。
探查類型 | 預設值 |
---|---|
啟動 | 通訊協定:TCP 連接埠:輸入目標連接埠 逾時:3 秒 期間:1 秒 初始延遲:1 秒 成功閾值 失敗閾值:240 |
準備就緒 | 通訊協定:TCP 連接埠:輸入目標連接埠 逾時:5 秒 期間:5 秒 初始延遲:3 秒 成功閾值 失敗閾值:48 |
活躍度: | 通訊協定:TCP 連接埠:輸入目標連接埠 |
若您的應用程式需要較長的時間才能啟動 (在 JAVA 中相當常見),則通常需要自訂探查使容器不至於當機。
下列範例示範如何設定活躍度和整備程度探查,以延長啟動時間。
"probes": [
{
"type": "liveness",
"failureThreshold": 3,
"periodSeconds": 10,
"successThreshold": 1,
"tcpSocket": {
"port": 80
},
"timeoutSeconds": 1
},
{
"type": "readiness",
"failureThreshold": 48,
"initialDelaySeconds": 3,
"periodSeconds": 5,
"successThreshold": 1,
"tcpSocket": {
"port": 80
},
"timeoutSeconds": 5
}]