Share via


設定整備度探查

針對處理流量的容器化應用程式,您可能會想確認容器已準備好處理傳入要求。 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 容器執行個體中的容器群組