Azure Container Apps 中的健康情況探查
Azure Container Apps 健康情況探查可讓 Container Apps 運行時間定期檢查容器應用程式的狀態。
您可以單獨使用 TCP 或 HTTP(S) 來設定探查。
Container Apps 支援下列探查:
探查 | 描述 |
---|---|
啟動 | 檢查您的應用程式是否已順利啟動。 這項檢查與即時探查不同,會在應用程式的初始啟動階段執行。 |
活躍度 | 檢查您的應用程式是否仍在執行中並回應。 |
整備程度 | 檢查複本是否準備好處理傳入要求。 |
如需 Azure Container Apps 中支援之探查規格的完整清單,請參閱 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
設定會定義如果執行失敗,Container Apps 嘗試執行探查的嘗試次數。 超過 failureThreshold
數量的嘗試會針對每個探查類型造成不同的結果。
預設的組態
如果啟用輸入,如果每個類型都未定義任何探查,則會自動將下列預設探查新增至主要應用程式容器。
注意
使用取用方案時,預設探查目前不會套用至工作負載配置文件環境。 此行為未來可能會變更。
探查類型 | 預設值 |
---|---|
啟動 | 通訊協定: TCP 埠:輸入目標埠 逾時:3 秒 期間:1 秒 初始延遲:1 秒 成功閾值:1 失敗閾值:240 |
整備程度 | 通訊協定: TCP 埠:輸入目標埠 逾時:5 秒 期間:5 秒 初始延遲:3 秒 成功閾值:1 失敗閾值: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
}]