GCPBackendPolicy 범위로 백엔드 구성 맞춤설정

멀티 클러스터 Google Kubernetes Engine (GKE) 추론 게이트웨이 환경에서는 여러 클러스터에 배포된 서비스에 서로 다른 백엔드 구성을 적용할 수 있습니다. 예를 들어 서로 다른 리전 또는 환경에 있는 백엔드에 대해 서로 다른 최대 요청 비율 또는 용량 스케일러를 설정할 수 있습니다.

이 문서를 이해하려면 다음 사항을 숙지해야 합니다.

이 문서는 다음 사용자를 대상으로 합니다.

  • AI/ML 워크로드를 서빙하기 위해 Kubernetes 컨테이너 조정 기능을 사용하는 데 관심이 있는 머신러닝 (ML) 엔지니어, 플랫폼 관리자 및 운영자, 데이터 및 AI 전문가
  • Kubernetes 네트워킹과 상호작용하는 클라우드 설계자 또는 네트워킹 전문가

Google Cloud 콘텐츠에서 참조하는 일반적인 역할 및 예시 태스크에 대해 자세히 알아보려면 일반 GKE Enterprise 사용자 역할 및 태스크를 참고하세요.

GCPBackendPolicy 범위 작동 방식

GCPBackendPolicyscopes 필드를 사용하면 백엔드가 실행되는 특정 클러스터를 기반으로 백엔드 구성을 맞춤설정할 수 있습니다. 다양한 환경 또는 리전의 백엔드에 서로 다른 설정을 적용하여 분산된 AI/ML 워크로드를 세부적으로 제어할 수 있습니다. 다음 섹션에서는 리소스를 타겟팅하고, 정책 범위를 정의하고, 충돌 해결을 처리하는 방법을 설명합니다.

타겟 추론 게이트웨이 리소스

멀티 클러스터 GKE 환경에서 추론 게이트웨이 정책을 사용하려면 GCPBackendPolicytargetRef 필드가 GCPInferencePoolImport 리소스를 참조해야 합니다.

targetRef:
  group: networking.gke.io
  kind: GCPInferencePoolImport
  name: example

정책 범위 정의

GCPBackendPolicyscopes 필드를 사용하면 특정 백엔드 그룹에 서로 다른 백엔드 설정을 적용할 수 있습니다. default.scopes 내에서 구성 객체를 정의하면 클러스터 라벨을 사용하여 백엔드를 정확하게 타겟팅하고 특정 설정을 적용할 수 있습니다. 예를 들어 서로 다른 리전 또는 클러스터의 백엔드에 고유한 용량 한도 또는 요청률을 설정할 수 있습니다.

기본 default 섹션과 default.scopes 항목 내에서 동일한 백엔드 수준 필드 (예: maxRatePerEndpoint)를 지정할 수 없습니다. 이렇게 하면 정책이 거부되어 명확하고 일관된 구성을 보장할 수 있습니다.

충돌 해결 방법

백엔드가 여러 범위와 일치하는 경우 시스템은 예측 가능한 동작을 보장하기 위해 다음 규칙을 적용합니다.

  • 우선순위가 지정된 일치: 백엔드가 scopes 목록에서 여러 선택기와 일치하는 경우 시스템은 일치하는 첫 번째 선택기의 설정만 적용합니다. 의도한 구성이 적용되도록 가장 구체적인 범위부터 가장 일반적인 범위 순으로 범위를 정렬합니다.
  • 정확한 타겟팅: 단일 선택기에 여러 라벨 (예: gke.io/region: us-central1env: prod)이 포함된 경우 백엔드는 시스템이 범위의 구성을 적용하려면 이러한 라벨을 모두 충족해야 합니다. 이 접근 방식을 사용하면 여러 기준에 따라 백엔드를 정확하게 타겟팅할 수 있습니다.

백엔드별 지원 필드

다음 표에는 다양한 환경 또는 지역에서 백엔드 동작을 제어하기 위해 맞춤설정할 수 있는 백엔드 수준 필드가 나와 있습니다.

필드 이름 설명 구성 예
backendPreference 멀티 리전 부하 분산의 용량 추적 중에 백엔드가 선호되는지 (PREFERRED) 아니면 기본값인지 (DEFAULT) 지정합니다. backendPreference: PREFERRED
balancingMode 균형 조정 알고리즘을 지정합니다. 지원되는 값은 RATE, UTILIZATION, CUSTOM_METRICS입니다. balancingMode: CUSTOM_METRICS
capacityScalerPercent 용량에 따라 트래픽 분산을 구성합니다. 이 값은 백엔드에서 구성된 타겟 용량의 승수 역할을 하는 0~100%의 백분율입니다. 기본값은 100%입니다. capacityScalerPercent: 20
customMetrics balancingModeCUSTOM_METRICS로 설정된 경우 부하 분산에 사용되는 맞춤 측정항목을 지정합니다. 이 필드는 측정항목 정의 목록입니다. customMetrics: [{ name: "my-metric", value: 0.8 }]
maxInFlightPerEndpoint 엔드포인트당 최대 동시 요청 또는 연결 수를 설정합니다. maxInFlightPerEndpoint: 100
maxRatePerEndpoint 엔드포인트당 최대 요청 속도를 초당 요청 수 (RPS)로 설정합니다. maxRatePerEndpoint: 50

범위 선택기 지정

각 범위의 selectors 필드를 사용하면 특정 정책 설정을 수신하는 백엔드를 제어할 수 있습니다. 클러스터 라벨(기본 제공 GKE 라벨 또는 자체 맞춤 라벨)을 기반으로 백엔드를 타겟팅하여 다양한 백엔드 그룹에 맞게 구성을 조정할 수 있습니다.

kind: GCPBackendPolicy
apiVersion: networking.gke.io/v1
metadata:
  name: echoserver-v2
spec:
  targetRef:
    group: "networking.gke.io"
    kind: GCPInferencePoolImport
    name: test-inference-pool
  default:
    balancingMode: IN_FLIGHT # IN_FLIGHT mode is set at the default level
    scopes:
    - selector:
        gke.io/zone: "us-central1-a"
      maxInFlightPerEndpoint: 100 # Invalid: maxInFlightPerEndpoint cannot be set within a scope when balancingMode is IN_FLIGHT at the default level

암시적 GKE 라벨

다음 암시적 라벨을 선택기로 사용할 수 있습니다. GKE는 클러스터에 다음 라벨을 자동으로 적용합니다.

라벨 설명 예제 값
gke.io/cluster-name GKE 클러스터의 이름입니다. my-cluster
gke.io/region 클러스터가 있는 리전입니다. us-central1
gke.io/zone 클러스터가 있는 영역입니다. us-central1-a

맞춤 클러스터 라벨

커스텀 클러스터 라벨을 사용하면 백엔드를 더 유연하게 그룹화하고 관리할 수 있습니다. GKE 클러스터에 자체 라벨을 정의하면 GCPBackendPolicy에서 매우 구체적인 선택기를 만들어 고유한 구성을 적용할 수 있습니다. 예를 들어 다양한 환경 (dev, staging 또는 prod) 또는 특정 애플리케이션 버전과 같은 기준에 따라 이러한 구성을 설정할 수 있습니다.

GKE 클러스터에 environment=production와 같은 맞춤 라벨을 추가하려면 다음 명령어를 실행합니다.

gcloud container clusters update CLUSTER_NAME \
    --region=REGION \
    --update-labels=LABEL_KEY=LABEL_VALUE

다음을 바꿉니다.

  • CLUSTER_NAME: 클러스터 이름입니다.
  • REGION: 클러스터의 리전입니다.
  • LABEL_KEY: 맞춤 라벨의 키입니다(예: environment).
  • LABEL_VALUE: 맞춤 라벨의 값입니다(예: production).

그런 다음 정책에서 맞춤 라벨 선택기를 사용하여 이 클러스터의 백엔드를 선택할 수 있습니다.

범위 선택기가 있는 GCPBackendPolicy의 예

다음 예에서는 experimental라는 GCPInferencePoolImport을 타겟팅하는 GCPBackendPolicy를 정의합니다. 정책은 암시적 라벨과 맞춤 라벨을 사용하여 backendPreference, maxRatePerEndpoint, capacityScalerPercent의 값을 설정합니다.

apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: backend-policy
spec:
  targetRef:
    kind: GCPInferencePoolImport
    name: experimental
  default:
    scopes:
      # Selector 1: Targets backends in us-west2, sets capacity to 50%
      - capacityScalarPercent: 50
        selector:
          gke.io/region: us-west2

      # Selector 2: Targets backends in clusters labeled 'env: prod'
      - maxRatePerEndpoint: 40
        selector:
          env: prod

      # Selector 3: Targets backends in a specific US-Central zone and marks them as PREFERRED
      - backendPreference: PREFERRED
        maxRatePerEndpoint: 50
        selector:
          gke.io/cluster-name: my-cluster
          gke.io/zone: us-central1-a

이 정책을 적용하면 다음과 같은 동작이 관찰됩니다.

  • us-west2 리전 내 클러스터의 백엔드 유효 용량이 50%로 조정됩니다.
  • env: prod 라벨이 지정된 클러스터의 백엔드는 엔드포인트당 초당 최대 40개의 요청으로 제한됩니다.
  • 특히 us-central1-a 영역에 있는 클러스터의 백엔드는 부하 분산 중에 우선순위가 지정되며 (PREFERRED) 엔드포인트당 초당 최대 요청 수가 50개입니다.

다음 단계