컨테이너 상태 점검(서비스)

신규 및 기존 Cloud Run 서비스에 대하여 HTTP 및 gRPC 활성 프로브와 더불어 HTTP, TCP, gRPC 시작 상태 점검 프로브를 구성할 수 있습니다. YAML 파일을 사용하여 Cloud Run 서비스의 시작 또는 활성 프로브를 구성하세요. 구성은 프로브 유형에 따라 달라집니다.

활성 확인 프로브를 사용하여 컨테이너를 다시 시작할 시점을 확인하여 서비스를 실행 중이지만 진행할 수 없는 교착 상태 등을 포착할 수 있습니다. 이 경우 컨테이너를 다시 시작하면 버그 발생 시 서비스 가용성이 증가할 수 있습니다.

시작 프로브를 사용하여 컨테이너가 시작되고 트래픽을 수락할 준비가 된 시점을 확인합니다.

시작 프로브를 구성하면 서비스 시작을 간섭하지 않도록 시작 프로브에서 컨테이너가 시작되었음을 확인할 때까지 활성 확인이 중지됩니다.

시작 프로브는 컨테이너가 가동 및 실행되기 전에 조기 종료를 방지하므로 느리게 시작되는 컨테이너에 활성 확인을 사용하는 경우 특히 유용합니다.

서비스가 반복적으로 시작되거나 활성 상태인 프로브가 실패하면 Cloud Run이 제어되지 않는 비정상 종료 루프를 방지하기 위해 인스턴스 재시작을 제한합니다.

청구 및 CPU 할당

  • 모든 프로브에 CPU가 할당됩니다.
  • 모든 프로브에는 CPU 및 메모리 사용량 소비가 청구되지만 요청 기반 요금은 없습니다.

구성을 변경하면 새 버전이 생성됩니다. 이를 변경하는 명시적 업데이트가 없으면 이후 버전에도 이 구성 설정이 자동으로 적용됩니다.

시작 프로브 구성

HTTP, TCP, gRPC 프로브를 구성할 수 있습니다.

HTTP 시작 프로브 구성

HTTP용 기본 HTTP 시작 프로브는 없지만 Cloud Run 서비스용으로 구성할 수 있습니다. HTTP 상태 점검 프로브를 사용하려면 프로브에 응답하기 위해 서비스에서 해당 HTTP 상태 점검 엔드포인트를 만들어야 합니다. 또한 서비스에서 HTTP/2가 아닌 HTTP/1(Cloud Run 기본값)을 사용해야 합니다.

시작 프로브가 구성된 후 Cloud Run은 서비스 상태 점검 엔드포인트(예: /ready)에 HTTP GET 요청을 수행합니다. 200400 사이의 응답은 성공입니다. 다른 모든 응답은 실패를 나타냅니다.

시작 프로브가 지정된 시간(failureThreshold * periodSeconds), 즉 240초 이내에 성공하지 못하면 컨테이너가 종료됩니다.

HTTP 활성 프로브를 구성한 경우 지정된 시간 내에 HTTP 시작 프로브가 성공하면 HTTP 활성 프로브가 시작됩니다.

기존 서비스의 경우 Google Cloud 콘솔을 사용하고, 신규 또는 기존 서비스의 경우 YAML을 사용하여 HTTP 시작 프로브를 구성할 수 있습니다.

콘솔

  1. Cloud Run으로 이동

  2. 구성하려는 서비스를 클릭합니다.

  3. YAML 탭을 클릭합니다.

  4. 수정을 클릭하고 다음과 같이 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이 이미 생성되어 있어야 합니다. URL의 형식은 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG입니다.
    • PATH: HTTP 엔드포인트의 상대 경로(예: /ready)
    • (선택사항) CONTAINER_PORT: 서비스에 사용되는 컨테이너 포트로 설정해야 합니다.
    • (선택사항) httpHeaders는 다음과 같이 HEADER_NAMEHEADER_VALUE 필드를 사용하여 여러 개의 또는 반복되는 커스텀 헤더를 제공할 수 있습니다.
    • (선택사항) DELAY: 첫 번째 프로브를 수행하기 전에 컨테이너가 시작된 후 대기하는 시간(초). 0~240초 사이의 값을 지정하세요. 기본값은 0초입니다.
    • (선택사항) TIMEOUT: 프로브가 타임아웃될 때까지 기다리는 시간(초). 이 값은 periodSeconds에 지정된 값을 초과할 수 없습니다. 1~240 사이의 값을 지정하세요. 기본값은 1입니다.
    • (선택 사항) THRESHOLD: 준비되지 않음으로 컨테이너를 표시하기 전에 프로브를 재시도할 횟수. 기본값은 3입니다.
    • (선택사항) PERIOD: 프로브를 수행할 시간(초). 예를 들어 2초마다 프로브를 수행하는 경우 2로 바꿉니다. 1~240초 사이의 값을 지정하세요. 기본값은 10초입니다.
  5. 저장 후 새 버전 배포를 클릭합니다.

YAML

YAML 형식으로 정리된 결과를 생성하는 gcloud run services describe --format export 명령어를 사용하면 기존 서비스 구성을 다운로드해서 볼 수 있습니다. 그런 다음 아래 설명된 필드를 수정하고 gcloud run services replace 명령어를 사용하여 수정된 YAML을 업로드할 수 있습니다. 설명된 대로 필드만 수정해야 합니다.

  1. 구성을 보고 다운로드하려면 다음을 실행합니다.

    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:
              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이 이미 생성되어 있어야 합니다. URL의 형식은 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG입니다.
    • PATH: HTTP 엔드포인트의 상대 경로(예: /ready)
    • (선택사항) CONTAINER_PORT: 서비스에 사용되는 컨테이너 포트로 설정해야 합니다.
    • (선택사항) httpHeaders는 다음과 같이 HEADER_NAMEHEADER_VALUE 필드를 사용하여 여러 개의 또는 반복되는 커스텀 헤더를 제공할 수 있습니다.
    • (선택사항) DELAY: 첫 번째 프로브를 수행하기 전에 컨테이너가 시작된 후 대기하는 시간(초). 0~240초 사이의 값을 지정하세요. 기본값은 0초입니다.
    • (선택사항) TIMEOUT: 프로브가 타임아웃될 때까지 기다리는 시간(초). 이 값은 periodSeconds에 지정된 값을 초과할 수 없습니다. 1~240 사이의 값을 지정하세요. 기본값은 1입니다.
    • (선택 사항) THRESHOLD: 준비되지 않음으로 컨테이너를 표시하기 전에 프로브를 재시도할 횟수. 기본값은 3입니다.
    • (선택사항) PERIOD: 프로브를 수행할 시간(초). 예를 들어 2초마다 프로브를 수행하는 경우 2로 바꿉니다. 1~240초 사이의 값을 지정하세요. 기본값은 10초입니다.
  3. 다음 명령어를 사용하여 서비스를 새 구성으로 바꿉니다.

    gcloud run services replace service.yaml

Terraform

Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.

다음과 같이 startup_probe 속성을 사용하여 Cloud Run 서비스를 구성합니다.

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

  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 = "*"
          }
        }
      }
    }
  }
}

HTTP 상태 점검 엔드포인트 만들기

HTTP 시작 프로브 또는 활성 프로브를 위한 Cloud Run 서비스를 구성하는 경우 프로브에 응답하도록 엔드포인트를 서비스 코드에 추가해야 합니다. 엔드포인트의 이름은 원하는 대로 지정할 수 있지만(예: /startup 또는 /ready) 프로브 구성의 path에 지정한 값과 일치해야 합니다. 예를 들어 HTTP 시작 프로브에 /ready를 지정하면 다음과 같이 프로브 구성에 path를 지정합니다.

startupProbe:
  httpGet:
    path: /ready

HTTP 상태 점검 엔드포인트는 외부에서 액세스할 수 있으며 외부에 노출된 다른 HTTP 서비스 엔드포인트와 동일한 원칙을 따릅니다.

TCP 시작 프로브 구성

시작 프로브를 직접 구성하지 않은 경우 새 Cloud Run 서비스의 기본값으로 TCP 시작 프로브가 자동으로 구성됩니다. 기본 프로브는 다음과 동일합니다.

startupProbe:
  tcpSocket:
    port: CONTAINER_PORT
  timeoutSeconds: 240
  periodSeconds: 240
  failureThreshold: 1

여기서 CONTAINER_PORT는 서비스에 사용되는 컨테이너 포트로 설정됩니다.

이 섹션의 안내에 따라 이러한 기본값을 변경할 수 있습니다.

TCP 시작 프로브의 경우 Cloud Run은 TCP 연결을 만들어 지정된 포트에서 TCP 소켓을 엽니다. Cloud Run에서 연결을 설정할 수 없으면 실패한 것입니다.

시작 프로브가 지정된 시간(failureThreshold * periodSeconds), 즉 240초 이내에 성공하지 못하면 컨테이너가 종료됩니다.

기존 서비스의 경우 Google Cloud 콘솔을 사용하고, 신규 또는 기존 서비스의 경우 YAML을 사용하여 TCP 시작 프로브를 구성할 수 있습니다.

콘솔

  1. Cloud Run으로 이동

  2. 구성하려는 서비스를 클릭합니다.

  3. YAML 탭을 클릭합니다.

  4. 수정을 클릭하고 다음과 같이 startupProbe 속성을 구성합니다.

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

    다음과 같이 바꿉니다.

    • SERVICE: Cloud Run 서비스 이름입니다.
    • IMAGE_URL을 컨테이너 이미지에 대한 참조(예: us-docker.pkg.dev/cloudrun/container/hello:latest)로 바꿉니다. Artifact Registry를 사용하는 경우 저장소 REPO_NAME이 이미 생성되어 있어야 합니다. URL의 형식은 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초입니다.
  5. 저장 후 새 버전 배포를 클릭합니다.

YAML

YAML 형식으로 정리된 결과를 생성하는 gcloud run services describe --format export 명령어를 사용하면 기존 서비스 구성을 다운로드해서 볼 수 있습니다. 그런 다음 아래 설명된 필드를 수정하고 gcloud run services replace 명령어를 사용하여 수정된 YAML을 업로드할 수 있습니다. 설명된 대로 필드만 수정해야 합니다.

  1. 구성을 보고 다운로드하려면 다음을 실행합니다.

    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이 이미 생성되어 있어야 합니다. URL의 형식은 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

Terraform

Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.

다음과 같이 startup_probe 속성을 사용하여 Cloud Run 서비스를 구성합니다.

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

  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
        }
      }
    }
  }
}

gRPC 시작 프로브 구성

gRPC 시작 프로브를 사용하려면 Cloud Run 서비스에서 gRPC 상태 점검 프로토콜을 구현한 후 이 섹션에 설명된 대로 프로브를 구성해야 합니다.

기존 서비스의 경우 Google Cloud 콘솔을 사용하고, 신규 또는 기존 서비스의 경우 YAML을 사용하여 gRPC 시작 프로브를 구성할 수 있습니다.

콘솔

  1. Cloud Run으로 이동

  2. 구성하려는 서비스를 클릭합니다.

  3. YAML 탭을 클릭합니다.

  4. 수정을 클릭하고 다음과 같이 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이 이미 생성되어 있어야 합니다. URL의 형식은 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG입니다.
    • (선택사항) CONTAINER_PORT: 서비스에 사용되는 컨테이너 포트로 설정해야 합니다.
    • GRPC_SERVICE: 상태 점검을 전송할 gRPC 서비스 이름
    • (선택사항) DELAY: 첫 번째 프로브를 수행하기 전에 컨테이너가 시작된 후 대기하는 시간(초). 0~240초 사이의 값을 지정하세요. 기본값은 0초입니다.
    • (선택사항) TIMEOUT: 프로브가 타임아웃될 때까지 기다리는 시간(초). 이 값은 periodSeconds에 지정된 값을 초과할 수 없습니다. 1~240 사이의 값을 지정하세요. 기본값은 1입니다.
    • (선택 사항) THRESHOLD: 준비되지 않음으로 컨테이너를 표시하기 전에 프로브를 재시도할 횟수. 기본값은 3입니다.
    • (선택사항) PERIOD: 프로브를 수행할 시간(초). 예를 들어 2초마다 프로브를 수행하는 경우 2로 바꿉니다. 1~240초 사이의 값을 지정하세요. 기본값은 10초입니다.
  5. 저장 후 새 버전 배포를 클릭합니다.

YAML

YAML 형식으로 정리된 결과를 생성하는 gcloud run services describe --format export 명령어를 사용하면 기존 서비스 구성을 다운로드해서 볼 수 있습니다. 그런 다음 아래 설명된 필드를 수정하고 gcloud run services replace 명령어를 사용하여 수정된 YAML을 업로드할 수 있습니다. 설명된 대로 필드만 수정해야 합니다.

  1. 구성을 보고 다운로드하려면 다음을 실행합니다.

    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이 이미 생성되어 있어야 합니다. URL의 형식은 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG입니다.
    • GRPC_SERVICE: 상태 점검을 전송할 gRPC 서비스 이름
    • (선택사항) 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

Terraform

Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.

서비스에서 GRPC 상태 확인을 구현해야 합니다.

다음과 같이 startup_probe 속성을 사용하여 Cloud Run 서비스를 구성합니다.

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

  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"
        }
      }
    }
  }
}

활성 프로브 구성

HTTP 및 gRPC 활성 프로브를 구성할 수 있습니다.

HTTP 활성 프로브 구성

HTTP 시작 프로브를 구성하면 시작 프로브가 성공한 후에만 활성 프로브가 시작됩니다. HTTP 상태 점검 프로브를 사용하려면 프로브에 응답하기 위해 서비스에서 해당 HTTP 상태 점검 엔드포인트를 만들어야 합니다. 또한 서비스에서 HTTP/2가 아닌 HTTP/1(Cloud Run 기본값)을 사용해야 합니다.

활성 프로브가 구성되고 모든 시작 프로브가 성공하면 Cloud Run이 서비스 상태 점검 엔드포인트(예: /health)에 HTTP GET 요청을 수행합니다. 200400 사이의 응답은 성공을 의미하며 그 밖의 모든 응답은 실패를 나타냅니다.

지정된 시간(failureThreshold * periodSeconds) 내에 활성 프로브가 실패하면 컨테이너가 SIGKILL 신호를 사용하여 종료됩니다. 컨테이너에서 아직 처리 중인 나머지 요청은 HTTP 상태 코드 503으로 종료됩니다. 컨테이너가 종료되면 Cloud Run 자동 확장이 새 컨테이너 인스턴스를 시작합니다.

기존 서비스의 경우 Google Cloud 콘솔을 사용하고, 신규 또는 기존 서비스의 경우 YAML을 사용하여 HTTP 활성 프로브를 구성할 수 있습니다.

콘솔

  1. Cloud Run으로 이동

  2. 구성하려는 서비스를 클릭합니다.

  3. YAML 탭을 클릭합니다.

  4. 수정을 클릭하고 다음과 같이 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이 이미 생성되어 있어야 합니다. URL의 형식은 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG입니다.
    • PATH: HTTP 엔드포인트의 상대 경로(예: /ready)
    • (선택사항) CONTAINER_PORT: 서비스에 사용되는 컨테이너 포트로 설정해야 합니다.
    • (선택사항) httpHeaders는 다음과 같이 HEADER_NAMEHEADER_VALUE 필드를 사용하여 여러 개의 또는 반복되는 커스텀 헤더를 제공할 수 있습니다.
    • (선택사항) DELAY: 첫 번째 프로브를 수행하기 전에 컨테이너가 시작된 후 대기하는 시간(초). 0~240초 사이의 값을 지정하세요. 기본값은 0초입니다.
    • (선택사항) TIMEOUT: 프로브가 타임아웃될 때까지 기다리는 시간(초). 이 값은 periodSeconds에 지정된 값을 초과할 수 없습니다. 1~3,600 사이의 값을 지정하세요. 기본값은 1입니다.
    • (선택 사항) THRESHOLD: 준비되지 않음으로 컨테이너를 표시하기 전에 프로브를 재시도할 횟수. 기본값은 3입니다.
    • (선택사항) PERIOD: 프로브를 수행할 시간(초). 예를 들어 2초마다 프로브를 수행하는 경우 2로 바꿉니다. 1~3600초 사이의 값을 지정하세요. 기본값은 10초입니다.
  5. 저장 후 새 버전 배포를 클릭합니다.

YAML

YAML 형식으로 정리된 결과를 생성하는 gcloud run services describe --format export 명령어를 사용하면 기존 서비스 구성을 다운로드해서 볼 수 있습니다. 그런 다음 아래 설명된 필드를 수정하고 gcloud run services replace 명령어를 사용하여 수정된 YAML을 업로드할 수 있습니다. 설명된 대로 필드만 수정해야 합니다.

  1. 구성을 보고 다운로드하려면 다음을 실행합니다.

    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:
              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이 이미 생성되어 있어야 합니다. URL의 형식은 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG입니다.
    • PATH: HTTP 엔드포인트의 상대 경로(예: /ready)
    • (선택사항) CONTAINER_PORT: 서비스에 사용되는 컨테이너 포트로 설정해야 합니다.
    • (선택사항) httpHeaders는 다음과 같이 HEADER_NAMEHEADER_VALUE 필드를 사용하여 여러 개의 또는 반복되는 커스텀 헤더를 제공할 수 있습니다.
    • (선택사항) DELAY: 첫 번째 프로브를 수행하기 전에 컨테이너가 시작된 후 대기하는 시간(초). 0~240초 사이의 값을 지정하세요. 기본값은 0초입니다.
    • (선택사항) TIMEOUT: 프로브가 타임아웃될 때까지 기다리는 시간(초). 이 값은 periodSeconds에 지정된 값을 초과할 수 없습니다. 1~3,600 사이의 값을 지정하세요. 기본값은 1입니다.
    • (선택 사항) THRESHOLD: 준비되지 않음으로 컨테이너를 표시하기 전에 프로브를 재시도할 횟수. 기본값은 3입니다.
    • (선택사항) PERIOD: 프로브를 수행할 시간(초). 예를 들어 2초마다 프로브를 수행하는 경우 2로 바꿉니다. 1~3600초 사이의 값을 지정하세요. 기본값은 10초입니다.
  3. 다음 명령어를 사용하여 서비스를 새 구성으로 바꿉니다.

    gcloud run services replace service.yaml

Terraform

Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.

서비스는 GRPC 상태 점검을 구현해야 합니다.

다음과 같이 liveness_probe 속성을 사용하여 Cloud Run 서비스를 구성합니다.

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

  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 = "*"
          }
        }
      }
    }
  }
}

HTTP 프로브 구성을 완료한 후에는 프로브에 응답하기 위해 상태 점검 엔드포인트도 만들어야 합니다.

gRPC 활성 프로브 구성

gRPC 시작 프로브를 구성하면 시작 프로브가 성공한 후에만 활성 프로브가 시작됩니다. gRPC 상태 점검 프로브를 사용하려면 Cloud Run 서비스에서 gRPC 상태 점검 프로토콜을 구현해야 합니다.

활성 프로브가 구성되고 시작 프로브가 성공하면 Cloud Run이 서비스에 대해 상태 점검 요청을 수행합니다.

지정된 시간(failureThreshold * periodSeconds) 내에 활성 프로브가 실패하면 컨테이너가 SIGKILL 신호를 사용하여 종료됩니다. 컨테이너가 종료되면 Cloud Run 자동 확장이 새 컨테이너 인스턴스를 시작합니다.

기존 서비스의 경우 Google Cloud 콘솔을 사용하고, 신규 또는 기존 서비스의 경우 YAML을 사용하여 gRPC 활성 프로브를 구성할 수 있습니다.

콘솔

  1. Cloud Run으로 이동

  2. 구성하려는 서비스를 클릭합니다.

  3. YAML 탭을 클릭합니다.

  4. 수정을 클릭하고 다음과 같이 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이 이미 생성되어 있어야 합니다. URL의 형식은 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG입니다.
    • (선택사항) CONTAINER_PORT: 서비스에 사용되는 컨테이너 포트로 설정해야 합니다.
    • GRPC_SERVICE: 상태 점검을 전송할 gRPC 서비스 이름
    • (선택사항) DELAY: 첫 번째 프로브를 수행하기 전에 컨테이너가 시작된 후 대기하는 시간(초). 0~240초 사이의 값을 지정하세요. 기본값은 0초입니다.
    • (선택사항) TIMEOUT: 프로브가 타임아웃될 때까지 기다리는 시간(초). 이 값은 periodSeconds에 지정된 값을 초과할 수 없습니다. 1~3,600 사이의 값을 지정하세요. 기본값은 1입니다.
    • (선택 사항) THRESHOLD: 준비되지 않음으로 컨테이너를 표시하기 전에 프로브를 재시도할 횟수. 기본값은 3입니다.
    • (선택사항) PERIOD: 프로브를 수행할 시간(초). 예를 들어 2초마다 프로브를 수행하는 경우 2로 바꿉니다. 1~3600초 사이의 값을 지정하세요. 기본값은 10초입니다.
  5. 저장 후 새 버전 배포를 클릭합니다.

YAML

YAML 형식으로 정리된 결과를 생성하는 gcloud run services describe --format export 명령어를 사용하면 기존 서비스 구성을 다운로드해서 볼 수 있습니다. 그런 다음 아래 설명된 필드를 수정하고 gcloud run services replace 명령어를 사용하여 수정된 YAML을 업로드할 수 있습니다. 설명된 대로 필드만 수정해야 합니다.

  1. 구성을 보고 다운로드하려면 다음을 실행합니다.

    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이 이미 생성되어 있어야 합니다. URL의 형식은 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG입니다.
    • (선택사항) CONTAINER_PORT: 서비스에 사용되는 컨테이너 포트로 설정해야 합니다.
    • GRPC_SERVICE: 상태 점검을 전송할 gRPC 서비스 이름
    • (선택사항) DELAY: 첫 번째 프로브를 수행하기 전에 컨테이너가 시작된 후 대기하는 시간(초). 0~240초 사이의 값을 지정하세요. 기본값은 0초입니다.
    • (선택사항) TIMEOUT: 프로브가 타임아웃될 때까지 기다리는 시간(초). 이 값은 periodSeconds에 지정된 값을 초과할 수 없습니다. 1~3,600 사이의 값을 지정하세요. 기본값은 1입니다.
    • (선택 사항) THRESHOLD: 준비되지 않음으로 컨테이너를 표시하기 전에 프로브를 재시도할 횟수. 기본값은 3입니다.
    • (선택사항) PERIOD: 프로브를 수행할 시간(초). 예를 들어 2초마다 프로브를 수행하는 경우 2로 바꿉니다. 1~3600초 사이의 값을 지정하세요. 기본값은 10초입니다.
  3. 다음 명령어를 사용하여 서비스를 새 구성으로 바꿉니다.

    gcloud run services replace service.yaml

Terraform

Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.

다음과 같이 liveness_probe 속성을 사용하여 Cloud Run 서비스를 구성합니다.

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

  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"
        }
      }
    }
  }
}