為執行個體設定容器健康狀態檢查

Cloud Run 健康狀態檢查可確保容器執行個體正常運作,並能處理流量。透過 Cloud Run 健康狀態檢查,您可以自訂容器何時準備好接收要求,以及容器何時應視為健康狀態不佳而需要重新啟動。

用途

您可以設定下列類型的健康狀態檢查探針:

  • 啟動探測作業會判斷容器是否已啟動,並準備好接受流量。
  • 有效性探測作業會判斷是否要重新啟動容器。
    • 在這種情況下,重新啟動容器有助於在發生錯誤時提高執行個體可用性。
    • Liveness 探測作業的目的是重新啟動無法以其他方式復原的個別執行個體。主要用於無法復原的執行個體故障,例如偵測到執行個體正在執行,但無法繼續運作的死結。您可以使用自訂組織政策,為每個容器設定存活探測。
    • 如果執行個體發生探查失敗的情況,Cloud Run 會限制執行個體重新啟動次數,避免發生不受控的當機迴圈。
  • 完備性探測 (預覽版)

    Readiness 探測會判斷 Cloud Run 執行個體中的執行個體何時應處理流量。容器的啟動探測作業成功通過後,系統就會開始進行準備狀態檢查。如果執行個體通過就緒探測的次數超過您設定的失敗閾值,Cloud Run 就會停止將新流量傳送至該執行個體。當執行個體再次通過就緒探測時,Cloud Run 不會終止執行個體,而是將流量傳回執行個體。

您的容器必須持續實作啟動、有效性和完備性探測。啟動檢查通過後,Cloud Run 會將容器視為已準備好處理流量。

建議您封裝邏輯,讓啟動探測帳戶準備就緒。由於 Cloud Run 可以在第一個就緒探查完成前,將流量路由至新例項,請確保通過啟動探查也能確保立即安全地處理流量。啟動探測作業成功後,系統會將容器視為已準備好接收流量。

設定啟動探測

您可以使用 Google Cloud CLI 或 YAML 設定 HTTP、TCP 和 gRPC 探針:

gcloud

TCP 啟動

執行下列指令:

  gcloud beta run instances create INSTANCE \
      --image=IMAGE_URL \
      --startup-probe tcpSocket.port=CONTAINER_PORT,initialDelaySeconds=DELAY,failureThreshold=THRESHOLD,timeoutSeconds=TIMEOUT,periodSeconds=PERIOD

更改下列內容:

  • INSTANCE:Cloud Run 執行個體的名稱。
  • IMAGE_URL:容器映像檔的參照,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址的形狀為 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
  • CONTAINER_PORT (選用):執行個體使用的容器通訊埠
  • DELAY:從容器啟動後到執行第一項探測作業之前,這段時間間隔的秒數。請指定介於 0 秒到 240 秒之間的值。 預設值為 0 秒。
  • TIMEOUT (選用):探測作業逾時前的等待秒數。這個值不得超過為 periodSeconds 指定的值。 請指定介於 1 到 240 之間的值。預設值為 1。
  • THRESHOLD:在關閉容器前,重新嘗試探測的次數。預設值為 3。
  • PERIOD:執行探查的週期 (以秒為單位)。例如 2,每 2 秒執行一次探查。指定介於 1 秒到 240 秒之間的值。預設值為 10 秒。

HTTP 啟動

在執行個體程式碼中新增 HTTP/1 端點 (Cloud Run 預設端點,而非 HTTP/2),以回應探測。端點名稱 (例如 /startup/health/are_you_ready) 必須與探測設定中的 path 相符。HTTP 健康狀態檢查端點可從外部存取,並遵循與任何其他外部公開 HTTP 執行個體端點相同的原則。

執行下列指令:

  gcloud beta run instances create INSTANCE \
      --image=IMAGE_URL \
      --startup-probe httpGet.path=PATH,httpGet.port=CONTAINER_PORT,initialDelaySeconds=DELAY,failureThreshold=THRESHOLD,timeoutSeconds=TIMEOUT,periodSeconds=PERIOD

更改下列內容:

  • INSTANCE:Cloud Run 執行個體的名稱。
  • IMAGE_URL:容器映像檔的參照,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址的形狀為 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
  • PATH:HTTP 端點的相對路徑,例如 /health
  • CONTAINER_PORT (選用):設為執行個體使用的容器通訊埠
  • DELAY (選用):容器啟動後,要等待幾秒才執行第一次探測。指定介於 0 秒到 240 秒之間的值。預設值為 0 秒。
  • THRESHOLD (選用):關閉容器前重新嘗試探測的次數。預設值為 3。
  • TIMEOUT (選用):探測作業逾時前的等待秒數。這個值不得超過為 periodSeconds 指定的值。請指定介於 1 到 240 之間的值。預設值為 1。
  • PERIOD (選用):執行探測的週期 (以秒為單位)。例如 2,每 2 秒執行一次探查。指定 1 秒到 240 秒之間的值。預設值為 10 秒。

gRPC 啟動

確認容器映像檔實作 gRPC 健康狀態檢查通訊協定

執行下列指令:

  gcloud beta run instances create INSTANCE \
      --image=IMAGE_URL \
      --startup-probe grpc.port=CONTAINER_PORT,grpc.instance=GRPC_INSTANCE,initialDelaySeconds=DELAY,failureThreshold=THRESHOLD,timeoutSeconds=TIMEOUT,periodSeconds=PERIOD

更改下列內容:

  • INSTANCE:Cloud Run 執行個體的名稱。
  • IMAGE_URL:容器映像檔的參照,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址的形狀為 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
  • GRPC_INSTANCE (選用):如果已設定,當呼叫 grpc.health.v1.Health.Check RPC 時,這會用於 grpc.health.v1.HealthCheckRequest 的例項欄位。
  • CONTAINER_PORT (選用):執行個體使用的容器通訊埠
  • DELAY (選用):容器啟動後,要等待幾秒才執行第一次探測。指定介於 0 秒到 240 秒之間的值。預設值為 0 秒。
  • THRESHOLD (選用):關閉容器前重新嘗試探測的次數。預設值為 3。
  • TIMEOUT (選用):探測作業逾時前的等待秒數。這個值不得超過為 periodSeconds 指定的值。請指定介於 1 到 240 之間的值。預設值為 1。
  • PERIOD (選用):執行探測的週期 (以秒為單位)。例如 2,每 2 秒執行一次探查。指定 1 秒到 240 秒之間的值。預設值為 10 秒。

YAML

TCP 啟動

  1. 如要建立新執行個體,請略過這個步驟。如要更新現有執行個體,請下載其 YAML 設定

    gcloud beta run instances describe INSTANCE --format export > instance.yaml
  2. 如圖所示設定 startupProbe 屬性:

    apiVersion: serving.knative.dev/v1
    kind: Instance
    metadata:
     name: INSTANCE
     annotations:
        run.googleapis.com/launch-stage: BETA
    spec:
      containers:
      - image: IMAGE_URL
        startupProbe:
          tcpSocket:
            port: CONTAINER_PORT
          initialDelaySeconds: DELAY
          timeoutSeconds: TIMEOUT
          failureThreshold: THRESHOLD
          periodSeconds: PERIOD

    更改下列內容:

    • INSTANCE:Cloud Run 執行個體的名稱。
    • IMAGE_URL:容器映像檔的參照,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址的形狀為 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • CONTAINER_PORT (選用):執行個體使用的容器通訊埠
    • DELAY:從容器啟動後到執行第一項探測作業之前,這段時間間隔的秒數。請指定介於 0 秒到 240 秒之間的值。 預設值為 0 秒。
    • TIMEOUT (選用):探測作業逾時前的等待秒數。這個值不得超過為 periodSeconds 指定的值。 請指定介於 1 到 240 之間的值。預設值為 1。
    • THRESHOLD:在關閉容器前,重新嘗試探測的次數。預設值為 3。
    • PERIOD:執行探查的週期 (以秒為單位)。例如 2,每 2 秒執行一次探查。指定介於 1 秒到 240 秒之間的值。預設值為 10 秒。
  3. 使用下列指令建立或更新執行個體:
    gcloud beta run instances replace instance.yaml

HTTP 啟動

在執行個體程式碼中新增 HTTP/1 端點 (Cloud Run 預設端點,而非 HTTP/2),以回應探測。端點名稱 (例如 /startup/health/are_you_ready) 必須與探測設定中的 path 相符。HTTP 健康狀態檢查端點可從外部存取,並遵循與任何其他外部公開 HTTP 執行個體端點相同的原則。

  1. 如要建立新執行個體,請略過這個步驟。如要更新現有執行個體,請下載其 YAML 設定

    gcloud beta run instances describe INSTANCE --format export > instance.yaml
  2. 如圖所示設定 startupProbe 屬性:

    apiVersion: serving.knative.dev/v1
    kind: Instance
    metadata:
      name: INSTANCE
      annotations:
        run.googleapis.com/launch-stage: BETA
    spec:
      containers:
      - image: IMAGE_URL
        startupProbe:
          httpGet:
            path: PATH
            port: CONTAINER_PORT
            httpHeaders:
              - name: HEADER_NAME
                value: HEADER_VALUE
          initialDelaySeconds: DELAY
          timeoutSeconds: TIMEOUT
          failureThreshold: THRESHOLD
          periodSeconds: PERIOD

    更改下列內容:

    • INSTANCE:Cloud Run 執行個體的名稱。
    • IMAGE_URL:容器映像檔的參照,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址的形狀為 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • PATH:HTTP 端點的相對路徑,例如 /health
    • CONTAINER_PORT (選用):設為執行個體使用的容器通訊埠
    • DELAY (選用):容器啟動後,要等待幾秒才執行第一次探測。指定介於 0 秒到 240 秒之間的值。預設值為 0 秒。
    • THRESHOLD (選用):關閉容器前重新嘗試探測的次數。預設值為 3。
    • 選用:httpHeaders 可用於使用 HEADER_NAMEHEADER_VALUE 欄位提供多個或重複的自訂標頭,如圖所示。
    • TIMEOUT (選用):探測作業逾時前的等待秒數。這個值不得超過為 periodSeconds 指定的值。請指定介於 1 到 240 之間的值。預設值為 1。
    • PERIOD (選用):執行探測的週期 (以秒為單位)。例如 2,每 2 秒執行一次探查。指定 1 秒到 240 秒之間的值。預設值為 10 秒。
    1. 如要建立新執行個體,請略過這個步驟。如要更新現有執行個體,請下載其 YAML 設定

      gcloud beta run instances describe INSTANCE --format export > instance.yaml

gRPC 啟動

確認容器映像檔實作 gRPC 健康狀態檢查通訊協定

  1. 如要建立新執行個體,請略過這個步驟。如要更新現有執行個體,請下載其 YAML 設定

    gcloud beta run instances describe INSTANCE --format export > instance.yaml
  2. 如圖所示設定 startupProbe 屬性:

    apiVersion: serving.knative.dev/v1
    kind: Instance
    metadata:
      name: INSTANCE
      annotations:
        run.googleapis.com/launch-stage: BETA
    spec:
      containers:
      - image: IMAGE_URL
        startupProbe:
          grpc:
            instance: GRPC_INSTANCE
            port: CONTAINER_PORT
          initialDelaySeconds: DELAY
          timeoutSeconds: TIMEOUT
          failureThreshold: THRESHOLD
          periodSeconds: PERIOD

    更改下列內容:

    • INSTANCE:Cloud Run 執行個體的名稱。
    • IMAGE_URL:容器映像檔的參照,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址的形狀為 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • GRPC_INSTANCE (選用):如果已設定,當呼叫 grpc.health.v1.Health.Check RPC 時,這會用於 grpc.health.v1.HealthCheckRequest 的例項欄位。
    • CONTAINER_PORT (選用):執行個體使用的容器通訊埠
    • DELAY (選用):容器啟動後,要等待幾秒才執行第一次探測。指定介於 0 秒到 240 秒之間的值。預設值為 0 秒。
    • THRESHOLD (選用):關閉容器前重新嘗試探測的次數。預設值為 3。
    • TIMEOUT (選用):探測作業逾時前的等待秒數。這個值不得超過為 periodSeconds 指定的值。請指定介於 1 到 240 之間的值。預設值為 1。
    • PERIOD (選用):執行探測的週期 (以秒為單位)。例如 2,每 2 秒執行一次探查。指定 1 秒到 240 秒之間的值。預設值為 10 秒。
  3. 如要建立新執行個體,請略過這個步驟。如要更新現有執行個體,請下載其 YAML 設定

    gcloud beta run instances describe INSTANCE --format export > instance.yaml

預設 TCP 啟動探測

如果您未明確為新的 Cloud Run 執行個體設定 TCP 啟動探測,Cloud Run 會自動設定 TCP 啟動探測,並採用下列預設值:

startupProbe:
          timeoutSeconds: 240
          periodSeconds: 240
          failureThreshold: 1

如要變更這些預設值,請按照本頁「探測設定」一節的說明操作。

啟動探測需求和行為

探針類型 需求條件 行為
TCP 啟動 根據預設,Cloud Run 會建立 TCP 連線,在指定通訊埠開啟 TCP Socket。如果 Cloud Run 無法建立連線,表示啟動探查失敗。

如果啟動探查在指定時間 (failureThreshold * periodSeconds) 內未成功,且時間超過 240 秒,系統就會關閉容器。另請參閱「TCP 預設值」。
HTTP 啟動 建立 HTTP 健康狀態檢查端點
使用 HTTP/1
設定探針後,Cloud Run 會對健康狀態檢查端點發出 HTTP GET 要求 (例如 /health)。任何 2XX3XX 回應都表示成功,其他則表示失敗。

如果啟動探針在指定時間 (failureThreshold * periodSeconds) 內未成功 (不得超過 240 秒),容器就會關閉。
gRPC 啟動 在 Cloud Run 執行個體中實作 gRPC 健康狀態檢查通訊協定 如果啟動探測在指定時間 (failureThreshold * periodSeconds) 內未成功 (不得超過 240 秒),系統會關閉容器。

設定 liveness 探測

您可以使用 Google Cloud SDK 或 YAML 設定 HTTP 和 gRPC 探查:

gcloud

HTTP 存活度

在執行個體程式碼中新增 HTTP/1 端點 (Cloud Run 預設端點,而非 HTTP/2),以回應探測。端點名稱 (例如 /startup/health/are_you_ready) 必須與探測設定中的 path 相符。HTTP 健康狀態檢查端點可從外部存取,並遵循與任何其他外部公開 HTTP 執行個體端點相同的原則。

執行下列指令:

  gcloud beta run instances deploy INSTANCE \
      --image=IMAGE_URL \
      --liveness-probe httpGet.path=PATH,httpGet.port=CONTAINER_PORT,initialDelaySeconds=DELAY,failureThreshold=THRESHOLD,timeoutSeconds=TIMEOUT,periodSeconds=PERIOD

更改下列內容:

  • INSTANCE:Cloud Run 執行個體的名稱。
  • IMAGE_URL:容器映像檔的參照,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址的形狀為 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
  • PATH:HTTP 端點的相對路徑,例如 /health
  • CONTAINER_PORT (選用):設為執行個體使用的容器通訊埠
  • DELAY (選用):容器啟動後,要等待幾秒才執行第一次探測。指定介於 0 秒到 240 秒之間的值。預設值為 0 秒。
  • THRESHOLD (選用):關閉容器前重新嘗試探測的次數。預設值為 3。
  • 選用。TIMEOUT:探測作業逾時前的等待秒數。這個值不得超過為 periodSeconds 指定的值。請指定介於 1 到 3600 之間的值。預設值為 1。
  • 選用。PERIOD:執行探查的週期 (以秒為單位)。例如 2,每 2 秒執行一次探測。請指定介於 1 秒到 3600 秒之間的值。預設值為 10 秒。

gRPC 存活度

確認容器映像檔實作 gRPC 健康狀態檢查通訊協定

執行下列指令:

  gcloud beta run instances deploy INSTANCE \
      --image=IMAGE_URL \
      --liveness-probe grpc.port=CONTAINER_PORT,grpc.service=GRPC_SERVICE,initialDelaySeconds=DELAY,failureThreshold=THRESHOLD,timeoutSeconds=TIMEOUT,periodSeconds=PERIOD

更改下列內容:

  • INSTANCE:Cloud Run 執行個體的名稱。
  • IMAGE_URL:容器映像檔的參照,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址的形狀為 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
  • GRPC_INSTANCE (選用):如果已設定,當呼叫 grpc.health.v1.Health.Check RPC 時,這會用於 grpc.health.v1.HealthCheckRequest 的例項欄位。
  • CONTAINER_PORT (選用):執行個體使用的容器通訊埠
  • DELAY (選用):容器啟動後,要等待幾秒才執行第一次探測。指定介於 0 秒到 240 秒之間的值。預設值為 0 秒。
  • THRESHOLD (選用):關閉容器前重新嘗試探測的次數。預設值為 3。
  • 選用。TIMEOUT:探測作業逾時前的等待秒數。這個值不得超過為 periodSeconds 指定的值。請指定介於 1 到 3600 之間的值。預設值為 1。
  • 選用。PERIOD:執行探查的週期 (以秒為單位)。例如 2,每 2 秒執行一次探測。請指定介於 1 秒到 3600 秒之間的值。預設值為 10 秒。

YAML

HTTP 存活度

在執行個體程式碼中新增 HTTP/1 端點 (Cloud Run 預設端點,而非 HTTP/2),以回應探測。端點名稱 (例如 /startup/health/are_you_ready) 必須與探測設定中的 path 相符。HTTP 健康狀態檢查端點可從外部存取,並遵循與任何其他外部公開 HTTP 執行個體端點相同的原則。

  1. 如要建立新執行個體,請略過這個步驟。如要更新現有執行個體,請下載其 YAML 設定
    gcloud beta run instances describe INSTANCE --format export > instance.yaml
  2. 如圖所示設定 livenessProbe 屬性:

    apiVersion: serving.knative.dev/v1
    apiVersion: serving.knative.dev/v1
    kind: Instance
    metadata:
      name: INSTANCE
      annotations:
        run.googleapis.com/launch-stage: BETA
    spec:
      containers:
      - image: IMAGE_URL
        livenessProbe:
          httpGet:
            path: PATH
            port: CONTAINER_PORT
            httpHeaders:
              - name: HEADER_NAME
                value: HEADER_VALUE
          initialDelaySeconds: DELAY
          timeoutSeconds: TIMEOUT
          failureThreshold: THRESHOLD
          periodSeconds: PERIOD

    更改下列內容:

    • INSTANCE:Cloud Run 執行個體的名稱。
    • IMAGE_URL:容器映像檔的參照,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址的形狀為 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • PATH:HTTP 端點的相對路徑,例如 /health
    • CONTAINER_PORT (選用):設為執行個體使用的容器通訊埠
    • DELAY (選用):容器啟動後,要等待幾秒才執行第一次探測。指定介於 0 秒到 240 秒之間的值。預設值為 0 秒。
    • THRESHOLD (選用):關閉容器前重新嘗試探測的次數。預設值為 3。
    • 選用:httpHeaders 可用於使用 HEADER_NAMEHEADER_VALUE 欄位提供多個或重複的自訂標頭,如圖所示。
    • 選用。TIMEOUT:探測作業逾時前的等待秒數。這個值不得超過為 periodSeconds 指定的值。請指定介於 1 到 3600 之間的值。預設值為 1。
    • 選用。PERIOD:執行探查的週期 (以秒為單位)。例如 2,每 2 秒執行一次探測。請指定介於 1 秒到 3600 秒之間的值。預設值為 10 秒。
  3. 使用下列指令建立或更新執行個體:
    gcloud beta run instances replace instance.yaml

gRPC 存活度

確認容器映像檔實作 gRPC 健康狀態檢查通訊協定

  1. 如要建立新執行個體,請略過這個步驟。如要更新現有執行個體,請下載其 YAML 設定
    gcloud beta run instances describe INSTANCE --format export > instance.yaml
  2. 如圖所示設定 livenessProbe 屬性:

    apiVersion: serving.knative.dev/v1
    apiVersion: serving.knative.dev/v1
    kind: Instance
    metadata:
      name: INSTANCE
      annotations:
        run.googleapis.com/launch-stage: BETA
    spec:
      containers:
      - image: IMAGE_URL
        livenessProbe:
          grpc:
            port: CONTAINER_PORT
            service: GRPC_SERVICE
            initialDelaySeconds: DELAY
            timeoutSeconds: TIMEOUT
            failureThreshold: THRESHOLD
            periodSeconds: PERIOD

    請替換下列項目:

    • INSTANCE:Cloud Run 執行個體的名稱。
    • IMAGE_URL:容器映像檔的參照,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址的形狀為 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • GRPC_INSTANCE (選用):如果已設定,當呼叫 grpc.health.v1.Health.Check RPC 時,這會用於 grpc.health.v1.HealthCheckRequest 的例項欄位。
    • CONTAINER_PORT (選用):執行個體使用的容器通訊埠
    • DELAY (選用):容器啟動後,要等待幾秒才執行第一次探測。指定介於 0 秒到 240 秒之間的值。預設值為 0 秒。
    • THRESHOLD (選用):關閉容器前重新嘗試探測的次數。預設值為 3。
    • 選用。TIMEOUT:探測作業逾時前的等待秒數。這個值不得超過為 periodSeconds 指定的值。請指定介於 1 到 3600 之間的值。預設值為 1。
    • 選用。PERIOD:執行探查的週期 (以秒為單位)。例如 2,每 2 秒執行一次探測。請指定介於 1 秒到 3600 秒之間的值。預設值為 10 秒。

  3. 使用下列指令建立或更新執行個體:
    gcloud beta run instances replace instance.yaml

有效性探測需求和行為

探針類型 需求條件 行為
HTTP 存活度 建立 HTTP 健康狀態檢查端點
使用 HTTP/1
只有在啟動探測成功後,才會開始進行即時性探測。完成探測設定並成功執行啟動探測後,Cloud Run 會對健康狀態檢查端點發出 HTTP GET 要求 (例如 /health)。任何 2XX3XX 回應都表示成功,其他則表示失敗。

如果存活探測在指定時間 (failureThreshold * periodSeconds) 內未成功,系統會使用 SIGKILL 信號關閉容器。容器仍在處理的任何其餘要求都會終止,並傳回 HTTP 狀態碼 503。容器關閉後,Cloud Run 自動調度功能會啟動新的容器執行個體。
gRPC 存活度 在 Cloud Run 執行個體中實作 gRPC 健康狀態檢查通訊協定 如果設定 gRPC 啟動探測,系統只會在啟動探測成功後啟動 liveness 探測。

設定 liveness 探測,且任何啟動探測成功後,Cloud Run 會向執行個體發出健康狀態檢查要求。

如果 liveness 探測在指定時間 (failureThreshold * periodSeconds) 內未成功,系統會使用 SIGKILL 信號關閉容器。容器關閉後,Cloud Run 自動調度功能會啟動新的容器執行個體。

設定 readiness 探測

就緒探查有以下限制:

  • 啟用工作階段相依性後,即使就緒檢查失敗,Cloud Run 仍會繼續將要求傳送至相同執行個體。

您可以使用 Google Cloud CLI 或 YAML 設定就緒探針:

gcloud

HTTP 完備性

在執行個體程式碼中新增 HTTP/1 端點 (Cloud Run 預設端點,而非 HTTP/2),以回應探測。端點名稱 (例如 /startup/health/are_you_ready) 必須與探測設定中的 path 相符。HTTP 健康狀態檢查端點可從外部存取,並遵循與任何其他外部公開 HTTP 執行個體端點相同的原則。

執行下列指令:

gcloud beta run instances deploy INSTANCE \
    --image=IMAGE_URL \
    --readiness-probe httpGet.path=PATH,httpGet.port=CONTAINER_PORT,successThreshold=SUCCESS_THRESHOLD,failureThreshold=FAILURE_THRESHOLD,timeoutSeconds=TIMEOUT,periodSeconds=PERIOD

更改下列內容:

  • INSTANCE:Cloud Run 執行個體的名稱。
  • IMAGE_URL:容器映像檔的參照,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址的形狀為 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
  • PATH (選用):HTTP 端點的相對路徑,例如 /are_you_ready。預設路徑為 /
  • CONTAINER_PORT (選用):執行個體使用的容器通訊埠。預設通訊埠是主要連入通訊埠。
  • SUCCESS_THRESHOLD (選用):探測失敗後,至少要連續成功幾次,才算成功。預設值為 2。
  • FAILURE_THRESHOLD (選用):在回報失敗前重新嘗試探測的次數,這會導致執行個體停止接收流量。預設為 3。
  • TIMEOUT (選用):探測作業逾時前的等待秒數。這個值不得超過為 periodSeconds 指定的值。請指定介於 1 到 300 之間的值。預設值為 1。
  • PERIOD (選用):執行探測的間隔時間 (以秒為單位)。例如 2,每 2 秒執行一次探查。請指定介於 1 到 300 之間的值。預設值為 10 秒。

gRPC 適用狀態

確認容器映像檔實作 gRPC 健康狀態檢查通訊協定

執行下列指令:

gcloud beta run instances deploy INSTANCE \
    --image=IMAGE_URL \
    --readiness-probe grpc.port=CONTAINER_PORT,grpc.instance=GRPC_INSTANCE,successThreshold=SUCCESS_THRESHOLD,failureThreshold=FAILURE_THRESHOLD,timeoutSeconds=TIMEOUT,periodSeconds=PERIOD

更改下列內容:

  • INSTANCE:Cloud Run 執行個體的名稱。
  • IMAGE_URL:容器映像檔的參照,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址的形狀為 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
  • CONTAINER_PORT (選用):執行個體使用的容器通訊埠。預設通訊埠是主要連入通訊埠。
  • GRPC_INSTANCE (選用):如果已設定,當呼叫 grpc.health.v1.Health.Check RPC 時,這會用於 grpc.health.v1.HealthCheckRequest 的例項欄位。
  • SUCCESS_THRESHOLD (選用):探測失敗後,至少要連續成功幾次,才算成功。預設值為 2。
  • FAILURE_THRESHOLD (選用):在回報失敗前重新嘗試探測的次數,這會導致執行個體停止接收流量。預設為 3。
  • TIMEOUT (選用):探測作業逾時前的等待秒數。這個值不得超過為 periodSeconds 指定的值。請指定介於 1 到 300 之間的值。預設值為 1。
  • PERIOD (選用):執行探測的間隔時間 (以秒為單位)。例如 2,每 2 秒執行一次探查。請指定介於 1 到 300 之間的值。預設值為 10 秒。

YAML

HTTP 完備性

在執行個體程式碼中新增 HTTP/1 端點 (Cloud Run 預設端點,而非 HTTP/2),以回應探測。端點名稱 (例如 /startup/health/are_you_ready) 必須與探測設定中的 path 相符。HTTP 健康狀態檢查端點可從外部存取,並遵循與任何其他外部公開 HTTP 執行個體端點相同的原則。

  1. 如要建立新執行個體,請略過這個步驟。如要更新現有執行個體,請下載其 YAML 設定
    gcloud beta run instances describe INSTANCE --format export > instance.yaml
  2. 如圖所示設定 readinessProbe 屬性:

    apiVersion: serving.knative.dev/v1
    kind: Instance
    metadata:
      name: INSTANCE
      annotations:
        run.googleapis.com/launch-stage: BETA
    spec:
      template:
        metadata:
        spec:
          containers:
          - image: IMAGE_URL
            readinessProbe:
              httpGet:
                path: PATH
                port: CONTAINER_PORT
              successThreshold: SUCCESS_THRESHOLD
              failureThreshold: FAILURE_THRESHOLD
              timeoutSeconds: TIMEOUT
              periodSeconds: PERIOD

    更改下列內容:

    • INSTANCE:Cloud Run 執行個體的名稱。
    • IMAGE_URL:容器映像檔的參照,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址的形狀為 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • PATH (選用):HTTP 端點的相對路徑,例如 /are_you_ready。預設路徑為 /
    • CONTAINER_PORT (選用):執行個體使用的容器通訊埠。預設通訊埠是主要連入通訊埠。
    • SUCCESS_THRESHOLD (選用):探測失敗後,至少要連續成功幾次,才算成功。預設值為 2。
    • FAILURE_THRESHOLD (選用):在回報失敗前重新嘗試探測的次數,這會導致執行個體停止接收流量。預設為 3。
    • TIMEOUT (選用):探測作業逾時前的等待秒數。這個值不得超過為 periodSeconds 指定的值。請指定介於 1 到 300 之間的值。預設值為 1。
    • PERIOD (選用):執行探測的間隔時間 (以秒為單位)。例如 2,每 2 秒執行一次探查。請指定介於 1 到 300 之間的值。預設值為 10 秒。

  3. 使用下列指令建立或更新執行個體:
    gcloud beta run instances replace instance.yaml

gRPC 適用狀態

確認容器映像檔實作 gRPC 健康狀態檢查通訊協定

  1. 如要建立新執行個體,請略過這個步驟。如要更新現有執行個體,請下載其 YAML 設定
    gcloud beta run instances describe INSTANCE --format export > instance.yaml
  2. 如圖所示設定 readinessProbe 屬性:

    apiVersion: serving.knative.dev/v1
    kind: Instance
    metadata:
      name: INSTANCE
      annotations:
        run.googleapis.com/launch-stage: BETA
    spec:
      template:
        metadata:
        spec:
          containers:
          - image: IMAGE_URL
            readinessProbe:
              grpc:
                port: CONTAINER_PORT
                instance: GRPC_INSTANCE
              successThreshold: SUCCESS_THRESHOLD
              failureThreshold: FAILURE_THRESHOLD
              timeoutSeconds: TIMEOUT
              periodSeconds: PERIOD

    更改下列內容:

    • INSTANCE:Cloud Run 執行個體的名稱。
    • IMAGE_URL:容器映像檔的參照,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址的形狀為 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • CONTAINER_PORT (選用):執行個體使用的容器通訊埠。預設通訊埠是主要連入通訊埠。
    • GRPC_INSTANCE (選用):如果已設定,當呼叫 grpc.health.v1.Health.Check RPC 時,這會用於 grpc.health.v1.HealthCheckRequest 的例項欄位。
    • SUCCESS_THRESHOLD (選用):探測失敗後,至少要連續成功幾次,才算成功。預設值為 2。
    • FAILURE_THRESHOLD (選用):在回報失敗前重新嘗試探測的次數,這會導致執行個體停止接收流量。預設為 3。
    • TIMEOUT (選用):探測作業逾時前的等待秒數。這個值不得超過為 periodSeconds 指定的值。請指定介於 1 到 300 之間的值。預設值為 1。
    • PERIOD (選用):執行探測的間隔時間 (以秒為單位)。例如 2,每 2 秒執行一次探查。請指定介於 1 到 300 之間的值。預設值為 10 秒。

  3. 使用下列指令建立或更新執行個體:
    gcloud beta run instances replace instance.yaml

CPU 分配方式

  • 探針執行時,系統一律會分配 CPU。
  • 所有探查都會根據 CPU 和記憶體用量計費,但不會根據要求計費。

後續步驟