為服務設定容器健康狀態檢查

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

用途

您可以設定兩種類型的健康狀態檢查探測器:

  • 啟動探測可判斷容器是否已啟動,且是否已準備好接收流量。

    • 設定啟動探測時,系統會停用有效性檢查,直到啟動探測判斷容器已啟動為止,以免干擾服務啟動。
    • 如果您在啟動速度較慢的容器上使用有效性檢查,啟動探測就特別實用,因為啟動探測可避免容器在啟動及執行前提早關閉。
  • 有效性探測可決定是否要重新啟動容器。

    • 在這種情況下,重新啟動容器可在發生錯誤時提高服務可用性。
    • 執行中探測器的用途是重新啟動無法以其他方式復原的個別執行個體。這些方法應主要用於無法復原的例項失敗,例如在服務執行中但無法取得進展時,捕捉死結。您可以使用自訂機構政策,為每個容器要求進行連線狀態探查。

如果服務發生多次啟動或有效性探測失敗,Cloud Run 會限制執行個體重新啟動次數,以免發生無控的當機迴圈。

設定探測

任何設定變更都會建立新的修訂版本。除非您明確做出更新,否則後續的修訂版本也會自動取得這個設定。

設定啟動探測

您可以使用 Google Cloud 主控台、YAML 或 Terraform 設定 HTTP、TCP 和 gRPC 探針:

控制台

  1. 前往 Google Cloud 控制台的「Cloud Run」頁面:

    前往 Cloud Run

  2. 如為新服務,請展開「容器、磁碟區、網路與安全性」,顯示健康情況檢查選項。如果是現有服務,請按一下要設定的服務,然後點選「編輯並部署」,即可顯示健康狀態檢查選項。

  3. 在「容器」部分中,前往「健康狀態檢查」,然後按一下「新增健康狀態檢查」,開啟「新增健康狀態檢查」設定面板。

  4. 在「選取健康狀態檢查類型」選單中,選取要新增的健康狀態檢查類型。

  5. 在「選取探測類型」選單中,選取要使用的探測類型,例如 HTTP 或 gRPC。這會顯示探針設定表單。

  6. 請注意,探針設定會因探針類型而異。設定探針設定:

    • 如果您使用的是 HTTP 探針:

      • 請確認您的服務使用的是 HTTP/1 (Cloud Run 預設值),而非 HTTP/2

      • 使用「Path」欄位指定「端點」的相對路徑,例如 /

      • 選取「HTTP 標頭」核取方塊,指定選用的自訂標頭。在「名稱」欄位中指定標頭名稱,並在「值」欄位中指定標頭值。按一下「新增 HTTP 標頭」,指定更多標頭。

    • 如果您使用 gRPC 探針,請確認容器映像檔實作 gRPC 健康狀態檢查通訊協定。詳情請參閱「GRPC 健康狀態檢查通訊協定」。

    • 在「Port」(通訊埠) 中,指定服務使用的容器通訊埠

    • 針對「Initial delay」,指定容器啟動後要等待的秒數,然後再執行第一次探測。請指定介於 0 秒到 240 秒之間的值。預設值為 0 秒。

    • 針對「Period」,指定要執行探測的時間 (以秒為單位)。例如 2,可讓系統每 2 秒執行一次探測作業。請指定 1 秒到 240 秒之間的值。預設值為 10 秒。

    • 針對「失敗門檻」,指定在關閉容器前重試探測的次數。預設值為 3。

    • 針對「逾時」,請指定要等待多久時間才會讓探測作業逾時。這個值不得超過 periodSeconds 指定的值。請指定介於 1 到 240 的值。預設值是 1。

  7. 按一下「新增」,新增閾值

gcloud

TCP 啟動

執行下列指令:

  gcloud run deploy SERVICE \
      --image=IMAGE_URL \
      --startup-probe tcpSocket.port=CONTAINER_PORT,initialDelaySeconds=DELAY,failureThreshold=THRESHOLD,timeoutSeconds=TIMEOUT,periodSeconds=PERIOD

取代:

  • SERVICE 改為 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 啟動

執行下列指令:

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

取代:

  • SERVICE 改為 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
  • PATHHTTP 端點的相對路徑,例如 /ready
  • (選用) CONTAINER_PORT 應設為服務使用的容器通訊埠
  • (選用) DELAY 會在容器啟動後等待幾秒,然後才執行第一項探測作業。指定的值介於 0 秒至 240 秒之間。預設值為 0 秒。
  • (選用) THRESHOLD 與關閉容器前重試探測的次數。預設值為 3。
  • (選用) TIMEOUT 與等待探測作業逾時之前的秒數。這個值不得超過 periodSeconds 指定的值。請指定介於 1 到 240 之間的值。預設值是 1。
  • (選用) PERIOD 與執行探測的週期 (以秒為單位)。例如 2,可讓系統每 2 秒執行一次探測作業。指定的值介於 1 秒到 240 秒之間。預設值為 10 秒。

gRPC 啟動

使用 gRPC 探針前,請確認容器映像檔已實作 gRPC 健康狀態檢查通訊協定。詳情請參閱「GRPC 健康狀態檢查通訊協定」。

執行下列指令:

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

取代:

  • SERVICE 改為 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_SERVICE。如果已設定,系統會在呼叫 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 run services describe SERVICE --format export > service.yaml
  2. 請按照下列說明設定 startupProbe 屬性:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     name: SERVICE
    spec:
     template:
       metadata:
       spec:
         containers:
         - image: IMAGE_URL
           startupProbe:
             tcpSocket:
               port: CONTAINER_PORT
             initialDelaySeconds: DELAY
             timeoutSeconds: TIMEOUT
             failureThreshold: THRESHOLD
             periodSeconds: PERIOD

    取代:

    • SERVICE 改為 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 run services replace service.yaml

HTTP 啟動

  1. 如果您要建立新服務,請略過這個步驟。如果您要更新現有服務,請下載其 YAML 設定
    gcloud run services describe SERVICE --format export > service.yaml
  2. 請確認您的服務使用的是 HTTP/1 (Cloud Run 的預設值),而非 HTTP/2

  3. 請按照下列說明設定 startupProbe 屬性:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
        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

    取代:

    • SERVICE 改為 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
    • PATHHTTP 端點的相對路徑,例如 /ready
    • (選用) CONTAINER_PORT 應設為服務使用的容器通訊埠
    • (選用) DELAY 會在容器啟動後等待幾秒,然後才執行第一項探測作業。指定的值介於 0 秒至 240 秒之間。預設值為 0 秒。
    • (選用) THRESHOLD 與關閉容器前重試探測的次數。預設值為 3。
    • (選用) httpHeaders 可用於使用 HEADER_NAMEHEADER_VALUE 欄位提供多個或重複的自訂標頭,如下所示。
    • (選用) TIMEOUT 與等待探測作業逾時之前的秒數。這個值不得超過 periodSeconds 指定的值。請指定介於 1 到 240 的值。預設值是 1。
    • (選用) PERIOD 與執行探測的週期 (以秒為單位)。例如 2,可讓系統每 2 秒執行一次探測作業。指定的值介於 1 秒到 240 秒之間。預設值為 10 秒。
  4. 使用下列指令建立或更新服務:
    gcloud run services replace service.yaml

gRPC 啟動

使用 gRPC 探針前,請確認容器映像檔已實作 gRPC 健康狀態檢查通訊協定。詳情請參閱「GRPC 健康狀態檢查通訊協定」。

  1. 如果您要建立新服務,請略過這個步驟。如果您要更新現有服務,請下載其 YAML 設定
    gcloud run services describe SERVICE --format export > service.yaml
  2. 請按照下列說明設定 startupProbe 屬性:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
        spec:
          containers:
          - image: IMAGE_URL
            startupProbe:
              grpc:
                service: GRPC_SERVICE
                port: CONTAINER_PORT
              initialDelaySeconds: DELAY
              timeoutSeconds: TIMEOUT
              failureThreshold: THRESHOLD
              periodSeconds: PERIOD

    取代:

    • SERVICE 改為 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_SERVICE。如果已設定,系統會在呼叫 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. 使用下列指令建立或更新服務:
    gcloud run services replace service.yaml

Terraform

如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。

TCP 啟動

如圖所示,使用 startup_probe 屬性設定 Cloud Run 服務:

resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-service-healthcheck"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"

      startup_probe {
        failure_threshold     = 5
        initial_delay_seconds = 10
        timeout_seconds       = 3
        period_seconds        = 3

        tcp_socket {
          port = 8080
        }
      }
    }
  }
}

HTTP 啟動

請確認您的服務使用的是 HTTP/1 (Cloud Run 的預設值),而非 HTTP/2

如圖所示,使用 startup_probe 屬性設定 Cloud Run 服務:

resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-service-healthcheck"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"

      startup_probe {
        failure_threshold     = 5
        initial_delay_seconds = 10
        timeout_seconds       = 3
        period_seconds        = 3

        http_get {
          path = "/"
          # Custom headers to set in the request
          # https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/cloud_run_v2_service#http_headers
          http_headers {
            name  = "Access-Control-Allow-Origin"
            value = "*"
          }
        }
      }
    }
  }
}

gRPC 啟動

使用 gRPC 探針前,請確認容器映像檔已實作 gRPC 健康狀態檢查通訊協定。詳情請參閱「GRPC 健康狀態檢查通訊協定」。

如圖所示,使用 startup_probe 屬性設定 Cloud Run 服務:

resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-service-healthcheck"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      # Note: Change to the name of your image
      image = "us-docker.pkg.dev/cloudrun/container/hello"

      startup_probe {
        failure_threshold     = 5
        initial_delay_seconds = 10
        timeout_seconds       = 3
        period_seconds        = 3

        grpc {
          # Note: Change to the name of your pre-existing grpc health status service
          service = "grpc.health.v1.Health"
        }
      }
    }
  }
}

預設 TCP 啟動探測

系統會自動為新的 Cloud Run 服務設定 TCP 啟動探測,並使用預設值。預設探針等同於以下內容:

startupProbe:
  tcpSocket:
    port: CONTAINER_PORT
  timeoutSeconds: 1
  periodSeconds: 10
  failureThreshold: 3

CONTAINER_PORT 替換為服務的容器連接埠

您可以按照本頁「探針設定」一節中的指示變更這些預設值。

啟動探測需求和行為

探針類型 需求條件 行為
TCP 啟動 根據預設,Cloud Run 會建立 TCP 連線,以便在指定的通訊埠上開啟 TCP Sockets。如果 Cloud Run 無法建立連線,表示發生錯誤。

如果啟動探測未在指定時間 (failureThreshold * periodSeconds) 內成功,且該時間不得超過 240 秒,容器就會關閉。另請參閱「TCP 預設值」。
HTTP 啟動 建立 HTTP 健康狀態檢查端點
使用 HTTP/1
設定探測之後,Cloud Run 會向服務健康狀態檢查端點 (例如 /ready) 提出 HTTP GET 要求。200400 之間的任何回應都表示成功,其他則表示失敗。

如果啟動探測在指定時間 (failureThreshold * periodSeconds) 內未成功,且您已設定 HTTP 存活探測,則會啟動 HTTP 存活探測。

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

設定 liveness 探測

您可以使用 Google Cloud 控制台、YAML 或 Terraform 設定 HTTP 和 gRPC 探針:

控制台

使用 gRPC 探針前,請確認容器映像檔已實作 gRPC 健康狀態檢查通訊協定。詳情請參閱「GRPC 健康狀態檢查通訊協定」。
  1. 前往 Google Cloud 控制台的「Cloud Run」頁面:

    前往 Cloud Run

  2. 如為新服務,請展開「容器、磁碟區、網路與安全性」,顯示健康情況檢查選項。如果是現有服務,請按一下要設定的服務,然後點選「編輯並部署」,即可顯示健康狀態檢查選項。

  3. 在「容器」部分中,前往「健康狀態檢查」,然後按一下「新增健康狀態檢查」,開啟「新增健康狀態檢查」設定面板。

  4. 在「選取健康狀態檢查類型」選單中,選取要新增的健康狀態檢查類型。

  5. 在「選取探測類型」選單中,選取要使用的探測類型,例如 HTTP 或 gRPC。這會顯示探針設定表單。

  6. 請注意,探針設定會因探針類型而異。設定探針設定:

    • 如果您使用的是 HTTP 探針:

      • 請確認您的服務使用的是 HTTP/1 (Cloud Run 預設值),而非 HTTP/2

      • 使用「Path」欄位指定「端點」的相對路徑,例如 /

      • 選取「HTTP 標頭」核取方塊,指定選用的自訂標頭。在「名稱」欄位中指定標頭名稱,並在「值」欄位中指定標頭值。按一下「新增 HTTP 標頭」,指定更多標頭。

    • 如果您使用 gRPC 探針,請確認容器映像檔實作 gRPC 健康狀態檢查通訊協定。詳情請參閱「GRPC 健康狀態檢查通訊協定」。

    • 在「Port」(通訊埠) 中,指定服務使用的容器通訊埠

    • 針對「Initial delay」,指定容器啟動後要等待的秒數,然後再執行第一次探測。請指定介於 0 秒到 240 秒之間的值。預設值為 0 秒。

    • 針對「Period」,指定要執行探測的時間 (以秒為單位)。例如 2,可讓系統每 2 秒執行一次探測作業。請指定 1 秒到 240 秒之間的值。預設值為 10 秒。

    • 針對「失敗門檻」,指定在關閉容器前重試探測的次數。預設值為 3。

    • 針對「逾時」,請指定要等待多久時間才會讓探測作業逾時。這個值不得超過 periodSeconds 指定的值。請指定介於 1 到 240 的值。預設值是 1。

  7. 按一下「新增」,新增閾值

gcloud

HTTP 存活性

執行下列指令:

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

取代:

  • SERVICE 改為 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
  • PATHHTTP 端點的相對路徑,例如 /ready
  • (選用) CONTAINER_PORT 應設為服務使用的容器通訊埠
  • (選用) DELAY 會在容器啟動後等待幾秒,然後才執行第一項探測作業。指定的值介於 0 秒至 240 秒之間。預設值為 0 秒。
  • (選用) THRESHOLD 與關閉容器前重試探測的次數。預設值為 3。
  • (選用) TIMEOUT 會等待多少秒,直到探測作業逾時。這個值不得超過 periodSeconds 指定的值。請指定介於 1 到 3600 之間的值。預設值為 1。
  • (選用) PERIOD,其中包含執行探測的週期 (以秒為單位)。例如 2,每隔 2 秒執行探測。請指定介於 1 秒到 3600 秒的值。預設值為 10 秒。

gRPC 存活性

使用 gRPC 探針前,請確認容器映像檔已實作 gRPC 健康狀態檢查通訊協定。詳情請參閱「GRPC 健康狀態檢查通訊協定」。

執行下列指令:

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

取代:

  • SERVICE 改為 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_SERVICE。如果已設定,系統會在呼叫 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 存活性

  1. 如果您要建立新服務,請略過這個步驟。如果您要更新現有服務,請下載其 YAML 設定
    gcloud run services describe SERVICE --format export > service.yaml
  2. 請確認您的服務使用的是 HTTP/1 (Cloud Run 的預設值),而非 HTTP/2

  3. 請按照下列說明設定 livenessProbe 屬性:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
        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

    取代:

    • SERVICE 改為 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
    • PATHHTTP 端點的相對路徑,例如 /ready
    • (選用) CONTAINER_PORT 應設為服務使用的容器通訊埠
    • (選用) DELAY 會在容器啟動後等待幾秒,然後才執行第一項探測作業。指定的值介於 0 秒至 240 秒之間。預設值為 0 秒。
    • (選用) THRESHOLD 與關閉容器前重試探測的次數。預設值為 3。
    • (選用) httpHeaders 可用於使用 HEADER_NAMEHEADER_VALUE 欄位提供多個或重複的自訂標頭,如下所示。
    • (選用) TIMEOUT 會等待多少秒,直到探測作業逾時。此值不得超過 periodSeconds 指定的值。請指定介於 1 到 3600 之間的值。預設值為 1。
    • (選用) PERIOD 與執行探測的週期 (以秒為單位)。例如 2,每隔 2 秒執行一次探測。請指定介於 1 秒到 3600 秒的值。預設值為 10 秒。
  4. 使用下列指令建立或更新服務:
    gcloud run services replace service.yaml

gRPC 存活性

使用 gRPC 探針前,請確認容器映像檔已實作 gRPC 健康狀態檢查通訊協定。詳情請參閱「GRPC 健康狀態檢查通訊協定」。

  1. 如果您要建立新服務,請略過這個步驟。如果您要更新現有服務,請下載其 YAML 設定
    gcloud run services describe SERVICE --format export > service.yaml
  2. 請按照下列說明設定 livenessProbe 屬性:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
        spec:
          containers:
          - image: IMAGE_URL
            livenessProbe:
              grpc:
                port: CONTAINER_PORT
                service: GRPC_SERVICE
              initialDelaySeconds: DELAY
              timeoutSeconds: TIMEOUT
              failureThreshold: THRESHOLD
              periodSeconds: PERIOD

    取代

    • SERVICE 改為 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_SERVICE。如果已設定,系統會在呼叫 grpc.health.v1.Health.Check rpc 時,在 grpc.health.v1.HealthCheckRequest 的 service 欄位中使用此值。
    • (選用) CONTAINER_PORT 應設為服務使用的容器通訊埠
    • (選用) DELAY 會在容器啟動後等待幾秒,然後才執行第一項探測作業。指定的值介於 0 秒至 240 秒之間。預設值為 0 秒。
    • (選用) THRESHOLD 與關閉容器前重試探測的次數。預設值為 3。
    • (選用) TIMEOUT 會等待多少秒,直到探測作業逾時。這個值不得超過 periodSeconds 指定的值。請指定介於 1 到 3600 之間的值。預設值為 1。
    • (選用) PERIOD 與執行探測的週期 (以秒為單位)。例如 2,每隔 2 秒執行一次探測。請指定介於 1 秒到 3600 秒的值。預設值為 10 秒。

  3. 使用下列指令建立或更新服務:
    gcloud run services replace service.yaml

Terraform

如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。

HTTP 存活性

請確認您的服務使用的是 HTTP/1 (Cloud Run 的預設值),而非 HTTP/2

如圖所示,使用 liveness_probe 屬性設定 Cloud Run 服務:

resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-service-healthcheck"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"

      liveness_probe {
        failure_threshold     = 5
        initial_delay_seconds = 10
        timeout_seconds       = 3
        period_seconds        = 3

        http_get {
          path = "/"
          # Custom headers to set in the request
          # https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/cloud_run_v2_service#http_headers
          http_headers {
            name  = "Access-Control-Allow-Origin"
            value = "*"
          }
        }
      }
    }
  }
}

gRPC 存活性

使用 gRPC 探針前,請確認容器映像檔已實作 gRPC 健康狀態檢查通訊協定。詳情請參閱「GRPC 健康狀態檢查通訊協定」。

如圖所示,使用 liveness_probe 屬性設定 Cloud Run 服務:

resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-service-healthcheck"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      # Note: Change to the name of your image
      image = "us-docker.pkg.dev/cloudrun/container/hello"

      liveness_probe {
        failure_threshold     = 5
        initial_delay_seconds = 10
        timeout_seconds       = 3
        period_seconds        = 3

        # Note: Change to the name of your pre-existing grpc health status service
        grpc {
          service = "grpc.health.v1.Health"
        }
      }
    }
  }
}

有效性探測需求和行為

探針類型 需求條件 行為
HTTP 存活性 建立 HTTP 健康狀態檢查端點
使用 HTTP/1
只有在啟動探測成功後,系統才會啟動存活探測。設定探針後,如果任何啟動探針都成功,Cloud Run 就會向服務健康檢查端點 (例如 /health) 提出 HTTP GET 要求。如果 200400 之間的任何回應都成功,其他所有回應都表示失敗。

如果生命探針未在指定時間 (failureThreshold * periodSeconds) 內成功,容器就會使用 SIGKILL 信號關閉。任何仍由容器提供服務的剩餘要求都會終止,並傳回 HTTP 狀態碼 503。容器關閉後,Cloud Run 自動調整功能就會啟動新的容器執行個體。
gRPC 存活性 在 Cloud Run 服務中實作 gRPC 健康狀態檢查通訊協定 如果您設定 gRPC 啟動探測,則只有在啟動探測成功後,系統才會啟動有效性探測。

在設定有效性探測並成功執行任何啟動探測後,Cloud Run 會向服務提出健康檢查要求。

如果有效性探測未在指定時間 (failureThreshold * periodSeconds) 內成功,容器就會使用 SIGKILL 信號關閉。容器關閉後,Cloud Run 會啟動新的容器執行個體。

建立 HTTP 健康狀態檢查端點

如果您為 HTTP 啟動探測器設定 Cloud Run 服務,就必須在服務程式碼中新增端點,以便回應探測器。端點可以使用您想要的任何名稱,例如 /startup/ready,但必須與您在探針設定中為 path 指定的值相符,如下所示:

startupProbe:
    httpGet:
      path: /ready

如果您使用 /health 等路徑為 Cloud Run 服務設定 HTTP 存活探測,請在探測器設定中定義如下:

livenessProbe:
    httpGet:
      path: /health

HTTP 健康檢查端點可供外部存取,並遵循與任何其他外部公開的 HTTP 服務端點相同的原則。

CPU 分配方式

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