멀티 클러스터 Google Kubernetes Engine (GKE) 추론 게이트웨이 환경에서는 여러 클러스터에 배포된 서비스에 서로 다른 백엔드 구성을 적용할 수 있습니다. 예를 들어 서로 다른 리전 또는 환경에 있는 백엔드에 대해 서로 다른 최대 요청 비율 또는 용량 스케일러를 설정할 수 있습니다.
이 문서를 이해하려면 다음 사항을 숙지해야 합니다.
- GKE의 AI/ML 조정
- 생성형 AI 용어
- 서비스, GKE 멀티 클러스터 인그레스, GKE 게이트웨이 API를 비롯한 GKE 네트워킹 개념
- Google Cloud의 부하 분산, 특히 부하 분산기가 GKE와 상호작용하는 방식
이 문서는 다음 사용자를 대상으로 합니다.
- AI/ML 워크로드를 서빙하기 위해 Kubernetes 컨테이너 조정 기능을 사용하는 데 관심이 있는 머신러닝 (ML) 엔지니어, 플랫폼 관리자 및 운영자, 데이터 및 AI 전문가
- Kubernetes 네트워킹과 상호작용하는 클라우드 설계자 또는 네트워킹 전문가
Google Cloud 콘텐츠에서 참조하는 일반적인 역할 및 예시 태스크에 대해 자세히 알아보려면 일반 GKE Enterprise 사용자 역할 및 태스크를 참고하세요.
GCPBackendPolicy 범위 작동 방식
GCPBackendPolicy의 scopes 필드를 사용하면 백엔드가 실행되는 특정 클러스터를 기반으로 백엔드 구성을 맞춤설정할 수 있습니다. 다양한 환경 또는 리전의 백엔드에 서로 다른 설정을 적용하여 분산된 AI/ML 워크로드를 세부적으로 제어할 수 있습니다. 다음 섹션에서는 리소스를 타겟팅하고, 정책 범위를 정의하고, 충돌 해결을 처리하는 방법을 설명합니다.
타겟 추론 게이트웨이 리소스
멀티 클러스터 GKE 환경에서 추론 게이트웨이 정책을 사용하려면 GCPBackendPolicy의 targetRef 필드가 GCPInferencePoolImport 리소스를 참조해야 합니다.
targetRef:
group: networking.gke.io
kind: GCPInferencePoolImport
name: example
정책 범위 정의
GCPBackendPolicy의 scopes 필드를 사용하면 특정 백엔드 그룹에 서로 다른 백엔드 설정을 적용할 수 있습니다. default.scopes 내에서 구성 객체를 정의하면 클러스터 라벨을 사용하여 백엔드를 정확하게 타겟팅하고 특정 설정을 적용할 수 있습니다. 예를 들어 서로 다른 리전 또는 클러스터의 백엔드에 고유한 용량 한도 또는 요청률을 설정할 수 있습니다.
기본 default 섹션과 default.scopes 항목 내에서 동일한 백엔드 수준 필드 (예: maxRatePerEndpoint)를 지정할 수 없습니다.
이렇게 하면 정책이 거부되어 명확하고 일관된 구성을 보장할 수 있습니다.
충돌 해결 방법
백엔드가 여러 범위와 일치하는 경우 시스템은 예측 가능한 동작을 보장하기 위해 다음 규칙을 적용합니다.
- 우선순위가 지정된 일치: 백엔드가
scopes목록에서 여러 선택기와 일치하는 경우 시스템은 일치하는 첫 번째 선택기의 설정만 적용합니다. 의도한 구성이 적용되도록 가장 구체적인 범위부터 가장 일반적인 범위 순으로 범위를 정렬합니다. - 정확한 타겟팅: 단일 선택기에 여러 라벨 (예:
gke.io/region: us-central1및env: prod)이 포함된 경우 백엔드는 시스템이 범위의 구성을 적용하려면 이러한 라벨을 모두 충족해야 합니다. 이 접근 방식을 사용하면 여러 기준에 따라 백엔드를 정확하게 타겟팅할 수 있습니다.
백엔드별 지원 필드
다음 표에는 다양한 환경 또는 지역에서 백엔드 동작을 제어하기 위해 맞춤설정할 수 있는 백엔드 수준 필드가 나와 있습니다.
| 필드 이름 | 설명 | 구성 예 |
|---|---|---|
backendPreference |
멀티 리전 부하 분산의 용량 추적 중에 백엔드가 선호되는지 (PREFERRED) 아니면 기본값인지 (DEFAULT) 지정합니다. |
backendPreference: PREFERRED |
balancingMode |
균형 조정 알고리즘을 지정합니다. 지원되는 값은 RATE, UTILIZATION, CUSTOM_METRICS입니다. |
balancingMode: CUSTOM_METRICS |
capacityScalerPercent |
용량에 따라 트래픽 분산을 구성합니다. 이 값은 백엔드에서 구성된 타겟 용량의 승수 역할을 하는 0~100%의 백분율입니다. 기본값은 100%입니다. | capacityScalerPercent: 20 |
customMetrics |
balancingMode이 CUSTOM_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개입니다.
다음 단계
GCPBackendPolicy구성 방법을 알아보세요.- GKE 멀티 클러스터 Inference Gateway에 대해 자세히 알아보세요.
- GKE 멀티 클러스터 추론 게이트웨이 설정에 대해 자세히 알아보세요.