부하 분산기의 커스텀 측정항목 노출

이 문서에서는 포드 또는 워크로드에서 부하 분산기로 하나 이상의 측정항목을 전송하는 방법을 설명합니다.

이러한 측정항목은 실행 중인 서비스 또는 애플리케이션에서 가져옵니다. 예를 들어 vLLM 엔진에서 노출하는 측정항목을 참고하세요.

그러면 부하 분산기는 이 데이터를 사용률 기반 부하 분산 과 함께 사용하여 워크로드의 부하를 더 효율적으로 분산할 수 있습니다. 예를 들어 이 기능을 사용하여 워크로드 사용량이 많은 리전을 모니터링한 후 부하 분산기가 사용 가능한 리소스가 더 많은 리전으로 트래픽을 리디렉션하도록 허용할 수 있습니다. vLLM 예시에서 사용률을 추적하는 데 유용한 측정항목은 입니다 vllm:gpu_cache_usage_perc.

요구사항

포드의 요구사항은 다음과 같습니다.

측정항목의 요구사항은 다음과 같습니다.

  • 측정항목은 게이트웨이에서 부하 분산 중인 포드 아래의 HTTP 엔드포인트에서 액세스할 수 있어야 합니다. 기본 엔드포인트 경로는 /metrics입니다.
  • 측정항목은 Prometheus 표준에 따라 형식이 지정되어야 합니다.
  • 부하 분산기에는 측정항목 이름에 제한사항이 있습니다. 예를 들어 이름은 64자를 초과할 수 없습니다. 제한사항의 전체 목록은 BackendService의 API 참조에서 backends[].customMetrics[].name 필드에 관한 세부정보를 참고하세요.

    서비스의 측정항목이 이러한 제한사항을 준수하지 않는 경우 exportName 필드를 사용하여 이름을 바꿀 수 있습니다.

  • 0~1 사이의 게이지 측정항목만 지원되며 1은 100% 사용률을 나타냅니다.

  • 포드 라벨 선택기의 라벨 이름에는 특수문자가 포함되어서는 안 됩니다. a~z 문자 (대문자 또는 소문자), 숫자, 하이픈, 밑줄만 지원됩니다.

  • 클러스터당 최대 20개의 고유 측정항목을 노출할 수 있습니다. 다른 서비스에는 자체 한도가 있습니다. 예를 들어 부하 분산기의 한도 및 요구사항을 참고하세요. 클러스터는 둘 이상의 부하 분산기를 사용할 수 있습니다.

커스텀 측정항목을 기반으로 하는 GKE 사용률 기반 부하 분산 (UBB)

GKE 사용률 기반 부하 분산 (UBB)을 사용하여 부하 분산기가 백엔드 포드의 사용률에 따라 트래픽을 분산하도록 할 수 있습니다. CPU와 같은 일반 측정항목에 의존하는 대신 애플리케이션 성능과 더 관련이 있는 커스텀 측정항목을 사용하도록 UBB를 구성할 수 있습니다.

GKE에서 커스텀 측정항목과 함께 UBB를 사용하는 경우 다음 제한사항이 적용됩니다.

부하 분산을 위한 측정항목 노출

  1. 노출할 측정항목을 선택합니다. 서버에서 노출하고 이전 섹션에 나열된 요구사항을 충족하는 측정항목을 선택할 수 있습니다. 이 예시에서는 queue_depth_util이라는 커스텀 측정항목을 사용합니다.

  2. 측정항목 및 포드와 관련된 세부정보를 바꿔서 다음 커스텀 리소스를 추가합니다.

    apiVersion: autoscaling.gke.io/v1beta1
    kind: AutoscalingMetric
    metadata:
      name: NAME
      namespace:NAMESPACE
    spec:
      metrics:
      - pod:
          selector:
            matchLabels:
              APP_LABEL_NAME: APP_LABEL_VALUE
          containers:
          - endpoint:
              port: METRIC_PORT
              path: METRIC_PATH
            metrics:
            - gauge:
              name: METRIC
              prometheusMetricName: METRIC_PROMETHEUS_NAME
              loadBalancing:
                enabled: true
    

    워크로드에 맞게 다음을 바꿉니다.

    • NAME: AutoscalingMetric 객체의 이름입니다.
    • NAMESPACE: 포드가 있는 네임스페이스입니다.
    • APP_LABEL_NAMEAPP_LABEL_VALUE: 측정항목을 내보내는 포드와 일치하는 라벨 이름 및 값입니다.
    • METRIC_PORT: 포트 번호입니다.
    • METRIC_PATH: 측정항목의 경로입니다. 서비스 또는 애플리케이션에서 사용하는 경로를 확인합니다. 이 경로는 보통 /metrics입니다.
    • METRIC: 노출하는 측정항목의 이름입니다. 이름은 정규 표현식 ^[a-z]([a-z0-9_-]*[a-z0-9])?과 일치해야 하며 길이는 63자를 초과할 수 없습니다. 즉, 첫 번째 문자는 소문자여야 하며 마지막 문자를 제외한 모든 후속 문자는 하이픈, 밑줄, 소문자 또는 숫자여야 합니다. 마지막 문자는 문자 또는 숫자여야 합니다.
    • 선택사항: METRIC_PROMETHEUS_NAME: 포드에서 노출하는 Prometheus 측정항목 이름입니다. 예를 들어 포드에서 노출하는 측정항목 이름이 부하 분산기에서 설정한 이름 제한사항을 준수하지 않기 때문에 이 필드를 사용하여 측정항목 이름을 바꿀 수 있습니다.

      제한사항의 전체 목록은 BackendService의 API 참조에서 backends[].customMetrics[].name 필드에 관한 세부정보를 참고하세요.

  3. 다음 명령어를 사용하여 매니페스트를 적용합니다.

    kubectl apply -f FILE_NAME.yaml
    

    FILE_NAME을 YAML 파일 이름으로 바꿉니다.

    커스텀 리소스를 추가하면 측정항목이 자동 확장 API로 푸시됩니다. 측정항목은 몇 초마다 읽혀서 부하 분산기로 전송됩니다.

  4. 부하 분산 목적으로 이 신호를 사용하려면 GCPBackendPolicy를 제공합니다. 예를 들면 다음과 같습니다.

    kind: GCPBackendPolicy
    apiVersion: networking.gke.io/v1
    metadata:
      name: my-backend-policy
    spec:
      targetRef:
        group: ""
        kind: Service
        name: store-v1
      default:
        balancingMode: CUSTOM_METRICS
        customMetrics:
        -   name: gke.named_metrics.queue_depth_util
            dryRun: false
    

Prometheus에서 보고하는 측정항목은 다른 이름 지정 표준을 따릅니다. 부하 분산을 위해 측정항목이 보고되면 GKE 측정항목 에이전트는 BackendService API 요구사항을 따르기 위해 내부적으로 gke.named_metrics. 프리픽스를 추가합니다.

두 번째 측정항목을 노출하려면 동일한 단계에 따라 다른 커스텀 리소스를 만듭니다.

이제 부하 분산기에 측정항목을 노출했으므로 이러한 측정항목을 사용하도록 부하 분산기를 구성할 수 있습니다. 자세한 내용은 커스텀 측정항목을 사용하도록 부하 분산기 구성을 참고하세요.

부하 분산기 작업에 관한 자세한 내용은 GKE 서비스의 사용률 기반 부하 분산 구성을 참고하세요.

부하 분산기에 노출되는 측정항목 문제 해결

측정항목이 부하 분산기에 올바르게 노출되는지 확인하려면 다음을 수행하면 됩니다.

다음 단계