設定整備度探查
針對處理流量的容器化應用程式,您可能會想確認容器已準備好處理傳入要求。 Azure 容器執行個體支援整備度探查以包含設定,讓您的容器無法在特定情況下存取。 整備度探查的行為就像 Kubernetes 整備度探查。 例如,容器應用程式可能需要在啟動期間載入大型資料集,而且您不想在這段時間內接收要求。
本文說明如何部署包含整備度探查的容器群組,讓容器僅在探查成功時才可接收流量。
Azure 容器執行個體也支援活躍度探查,設定後就能讓狀況不良的容器自動重新啟動。
YAML 設定
舉例來說,請使用包含整備度探查的下列片段建立 readiness-probe.yaml
檔案。 此檔案會定義容器群組,其中包含執行小型 Web 應用程式的容器。 應用程式會透過公用 mcr.microsoft.com/azuredocs/aci-helloworld
映像部署。 使用 Azure CLI 在 Azure 中部署容器執行個體及其他快速入門也有示範此容器化應用程式。
apiVersion: 2019-12-01
location: eastus
name: readinesstest
properties:
containers:
- name: mycontainer
properties:
image: mcr.microsoft.com/azuredocs/aci-helloworld
command:
- "/bin/sh"
- "-c"
- "node /usr/src/app/index.js & (sleep 240; touch /tmp/ready); wait"
ports:
- port: 80
resources:
requests:
cpu: 1.0
memoryInGB: 1.5
readinessProbe:
exec:
command:
- "cat"
- "/tmp/ready"
periodSeconds: 5
osType: Linux
restartPolicy: Always
ipAddress:
type: Public
ports:
- protocol: tcp
port: '80'
tags: null
type: Microsoft.ContainerInstance/containerGroups
Start 命令
部署包含定義啟動命令的 command
屬性,該命令會在容器第一次開始執行時執行。 此屬性接受字串陣列。 此命令模擬已執行 Web 應用程式但容器尚未就緒的狀況。
首先,系統會啟動殼層工作階段,並執行 node
命令以啟動 Web 應用程式。 它也會啟動睡眠 240 秒的命令,然後在 /tmp
目錄中建立名為 ready
的檔案:
node /usr/src/app/index.js & (sleep 240; touch /tmp/ready); wait
整備度命令
此 YAML 檔案會定義 readinessProbe
,其會支援作為整備度檢查的 exec
整備度命令。 此範例整備度命令會測試 /tmp
目錄中是否存在 ready
檔案。
若 ready
檔案不存在,整備度命令會以非零值結束;容器則會繼續執行,但無法存取。 當命令順利結束且結束代碼為 0 時,代表容器已準備就緒可供存取。
periodSeconds
屬性會指定整備度命令應該每隔 5 秒執行一次。 整備度探查會在容器群組的存留期內執行。
範例部署
執行下列命令,即可使用上述 YAML 設定來部署容器群組:
az container create --resource-group myResourceGroup --file readiness-probe.yaml
檢視整備度檢查
在此範例中的前 240 秒內,整備度命令會在檢查 ready
檔案是否存在時失敗。 狀態碼傳回的訊號說明容器尚未就緒。
這些事件可從 Azure 入口網站或 Azure CLI 來檢視。 舉例來說,入口網站顯示整備度命令失敗時會觸發類型 Unhealthy
事件。
確認容器整備度
啟動容器之後,您就能確認該容器一開始無法存取。 佈建之後即可取得容器群組的 IP 位址:
az container show --resource-group myResourceGroup --name readinesstest --query "ipAddress.ip" --out tsv
試著在整備度探查失敗時存取網站:
wget <ipAddress>
輸出會顯示網站一開始無法存取:
wget 192.0.2.1
--2019-10-15 16:46:02-- http://192.0.2.1/
Connecting to 192.0.2.1... connected.
HTTP request sent, awaiting response...
240 秒之後,整備度命令成功就代表容器已就緒。 現在,當您執行 wget
命令時,就會成功:
wget 192.0.2.1
--2019-10-15 16:46:02-- http://192.0.2.1/
Connecting to 192.0.2.1... connected.
HTTP request sent, awaiting response...200 OK
Length: 1663 (1.6K) [text/html]
Saving to: ‘index.html.1’
index.html.1 100%[===============================================================>] 1.62K --.-KB/s in 0s
2019-10-15 16:49:38 (113 MB/s) - ‘index.html.1’ saved [1663/1663]
容器就緒後,您也可以使用網頁瀏覽器瀏覽至 IP 位址以存取 Web 應用程式。
注意
整備度探查會持續在容器群組的存留期內執行。 如果整備度命令後來失敗了,容器就會再次變成無法存取。
下一步
若案例涉及由相依容器組成的多容器群組,整備度探查可能就相當實用。 如需多容器案例的詳細資訊,請參閱 Azure 容器執行個體中的容器群組。