이 페이지에서는 GKE 서비스의 사용률 기반 부하 분산을 구성하는 방법을 설명합니다. 이 페이지는 GKE 서비스의 트래픽 분산을 구성하고 관리하는 인프라 및 애플리케이션 팀과 GKE 관리자를 대상으로 합니다.
사용률 기반 부하 분산기를 사용하여 GKE 포드의 실시간 리소스 사용량에 따라 트래픽을 지능적으로 분산하여 애플리케이션 성능과 가용성을 최적화할 수 있습니다.
이 페이지를 읽기 전에 GKE 서비스의 사용률 기반 부하 분산과 사용률 기반 부하 분산의 작동 방식을 숙지해야 합니다.
가격 책정
사용률 기반 부하 분산은 추가 비용 없이 사용할 수 있는 GKE Gateway 기능입니다. Cloud Load Balancing 및 GKE 가격 책정은 그대로 적용됩니다.
할당량
활용률 기반 부하 분산은 새로운 할당량을 도입하지 않지만 Cloud Load Balancing 및 기타 종속 서비스의 모든 할당량은 계속 적용됩니다.
시작하기 전에
시작하기 전에 다음 태스크를 수행했는지 확인합니다.
- Google Kubernetes Engine API를 사용 설정합니다. Google Kubernetes Engine API 사용 설정
- 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화하세요. 이전에 gcloud CLI를 설치한 경우
gcloud components update
를 실행하여 최신 버전을 가져옵니다.
- 게이트웨이 컨트롤러 요구사항을 검토합니다.
- 제한사항을 검토합니다.
GKE Gateway Controller 요구사항
GKE 서비스의 사용률 기반 부하 분산에는 다음이 필요합니다.
- Google Cloud CLI 버전 516.0.0 이상
- 빠른 채널의 GKE 버전 1.33.1-gke.1918000 이상
- 클러스터에서 Gateway API를 사용 설정해야 합니다.
- 클러스터에서 성능 HPA 프로필을 사용 설정해야 합니다.
- Google Cloud 프로젝트에서 Autoscaling API를 사용 설정해야 합니다.
- 노드 서비스 계정은 자동 확장 API에 쓸 수 있어야 합니다.
GKE 서비스의 사용률 기반 부하 분산은 다음을 지원합니다.
- Google Cloud관리형 부하 분산기의 백엔드 역할을 하는 단일 및 멀티 클러스터 GKE 서비스
- 모든 GKE 버전 (Standard, Autopilot, Enterprise)
- 기본 애플리케이션 부하 분산기를 제외한 모든 Google Cloud 애플리케이션 부하 분산기
제한사항
GKE 서비스의 사용률 기반 부하 분산에는 다음과 같은 제한사항이 있습니다.
- 지원되는 유일한 리소스 사용률 측정항목은 CPU입니다.
- 패스 스루 또는 프록시 네트워크 부하 분산기는 지원되지 않습니다.
- Gateway API만 지원되며 Service 및 Ingress API는 지원되지 않습니다.
- 트래픽이 매우 급격하게 변동하는 경우 사용률 기반 부하 분산이 제대로 작동하지 않습니다. 포드가 최대 사용률에 도달하면 트래픽 리밸런싱에 최대 30초가 걸립니다. 활용률 신호는 수신 트래픽과 함께 증가해야 하지만 이 지연으로 인해 활용률 기반 부하 분산이 조정되는 데 시간이 걸립니다. 최적의 성능을 위해 사용률 기반 부하 분산은 원활하고 예측 가능한 트래픽 흐름이 있는 환경에서 가장 잘 작동합니다.
- 이중 스택 클러스터 (IPv4 주소 1개와 IPv6 주소 1개가 있는 클러스터)는 지원되지 않습니다.
- 활용률 기반 부하 분산은
GCPBackendPolicy
에서 dryRun 필드를 수정하거나 삭제하는 등 구성이 변경된 후 트래픽 분산을 업데이트하고 조정하는 데 최대 30초가 걸릴 수 있습니다. 이 지연은 알려진 시스템 전체 동작입니다. 따라서 이 기능은 업데이트 지연 시간을 허용할 수 있는 비교적 안정적인 트래픽 패턴이 있는 애플리케이션에 가장 적합합니다.
기본적으로 GKE 서비스에 대해 사용률 기반 부하 분산이 사용 중지되어 있습니다. 명시적으로 사용 설정해야 합니다. 최대 사용률 기준점을 설정하지 않으면 시스템에서 엔드포인트당 80% 사용률을 기본값으로 사용합니다.
활용률 기반 부하 분산을 구성하는 목표는 백엔드 포드가 워크로드를 효율적으로 관리할 수 있도록 트래픽 분산을 최적화하는 것입니다. 이를 통해 애플리케이션 성능과 리소스 활용률이 향상됩니다.
사용률 기반 부하 분산 및 성능 HPA 프로필 사용 설정
활용률 기반 부하 분산을 구성하기 전에 GKE 클러스터가 필요한 기능을 지원하는지 확인하세요. 사용률 기반 부하 분산은 CPU와 같은 맞춤 측정항목을 사용하여 더 스마트한 라우팅 결정을 내립니다. 이러한 결정은 다음 사항에 따라 달라집니다.
GCPBackendPolicy
를 통해 서비스 수준 정책을 허용하는 게이트웨이 API- CPU 신호를 사용하여 워크로드를 더 빠르고 적극적으로 확장할 수 있는 성능 HPA 프로필
게이트웨이 API 및 성능 HPA 프로필 사용 설정
Autopilot
Autopilot 클러스터에서는 기본적으로 Gateway API와 성능 HPA 프로필을 사용할 수 있습니다.
Standard
성능 HPA 프로필과 Gateway API가 사용 설정된 새 Standard 클러스터를 만들려면 다음 명령어를 실행합니다.
gcloud container clusters create CLUSTER_NAME \
--location=LOCATION \
--project=PROJECT_ID \
--cluster-version=CLUSTER_VERSION \
--gateway-api=standard \
--hpa-profile=performance \
--release-channel=rapid
다음을 바꿉니다.
CLUSTER_NAME
을 새 클러스터 이름으로 바꿉니다.LOCATION
을 클러스터의 Compute Engine 리전 또는 영역으로 바꿉니다.PROJECT_ID
를 프로젝트 ID로 바꿉니다.- GKE 버전이 1.33.1-gke.1918000 이상이어야 하는
CLUSTER_VERSION
기존 GKE Standard 클러스터에서 성능 HPA 프로필과 Gateway API를 사용 설정하려면 다음을 사용합니다.
gcloud container clusters update CLUSTER_NAME \
--location=LOCATION \
--project=PROJECT_ID \
--gateway-api=standard \
--hpa-profile=performance \
--release-channel=rapid
다음을 바꿉니다.
CLUSTER_NAME
을 새 클러스터 이름으로 바꿉니다.LOCATION
을 클러스터의 Compute Engine 리전 또는 영역으로 바꿉니다.PROJECT_ID
를 프로젝트 ID로 바꿉니다.
성능 HPA 프로필에 관한 자세한 내용은 성능 HPA 프로필 구성을 참고하세요.
사용률 기반 부하 분산 구성
클러스터가 준비되면 백엔드 사용률에 따라 트래픽이 라우팅되는 방식을 지정하는 정책을 정의합니다. 구성을 위해 GCPBackendPolicy
를 통해 Kubernetes Gateway API를 사용해야 합니다.
기본 요건
Gateway API를 사용하여 사용률 기반 부하 분산을 구성하기 전에 GKE 클러스터가 다음 요구사항을 충족하는지 확인하세요.
애플리케이션 배포: Deployment 리소스를 사용하여 Kubernetes 애플리케이션을 배포해야 합니다. 자세한 내용은 GKE 클러스터에 애플리케이션 배포를 참고하세요.
예를 들어 일반적인 배포 매니페스트에는 다음과 같은 리소스 섹션이 포함될 수 있습니다.
apiVersion: apps/v1 kind: Deployment metadata: name: store-v1 spec: # ... other deployment configurations ... template: # ... other template configurations ... spec: containers: - name: your-container-name image: your-image ports: - containerPort: 8080 resources: limits: cpu: 100m memory: 45Mi requests: cpu: 100m memory: 45Mi
서비스를 사용하여 애플리케이션 노출: Kubernetes 서비스를 사용하여 애플리케이션을 노출해야 합니다. 서비스 작동 방식과 구성 방법에 대한 자세한 내용은 Kubernetes 서비스 이해를 참고하세요.
게이트웨이 API 기반 애플리케이션 부하 분산기 사용: 게이트웨이 API를 통해 구성된 GKE 관리 애플리케이션 부하 분산기를 사용하여 서비스를 노출합니다. 자세한 내용은 게이트웨이 배포를 참고하세요.
CPU 기반 부하 분산을 위한 GCPBackendPolicy
만들기
이 구성을 사용하면 GKE가 각 백엔드 포드의 실시간 CPU 사용률에 따라 트래픽을 동적으로 분산할 수 있습니다.
GKE 서비스에 사용률 기반 부하 분산을 사용 설정하려면 Kubernetes Gateway API의 GCPBackendPolicy
커스텀 리소스를 사용하세요.
GCPBackendPolicy
커스텀 리소스를 사용하면 Kubernetes 클러스터 내에서 부하 분산 동작을 선언적으로 정의할 수 있습니다. CPU 사용률 측정항목을 지정하면 현재 리소스 사용량에 따라 백엔드에 트래픽이 분산되는 방식을 제어할 수 있습니다. 이 접근 방식을 사용하면 애플리케이션 성능을 유지하고, 개별 포드의 과부하를 방지하며, 애플리케이션의 안정성과 사용자 환경을 개선할 수 있습니다.
다음 샘플 매니페스트를
my-backend-policy.yaml
로 저장합니다.kind: GCPBackendPolicy apiVersion: networking.gke.io/v1 metadata: name: my-backend-policy namespace: team-awesome spec: targetRef: group: "" kind: Service name: super-service default: balancingMode: CUSTOM_METRICS customMetrics: - name: gke.cpu dryRun: false
다음에 유의하세요.
spec.targetRef.kind: Service
: 동일한 클러스터 내의 표준 Kubernetes 서비스를 타겟팅합니다.spec.targetRef.kind: ServiceImport
: 멀티 클러스터 설정에서 다른 클러스터의 서비스를 타겟팅합니다.balancingMode: CUSTOM_METRICS
: 맞춤 측정항목 기반 부하 분산을 사용 설정합니다.name: gke.cpu
: 트래픽 분배의 측정항목으로 CPU 사용률을 지정합니다.
maxUtilizationPercent
필드를 지정하지 않으면 기본 사용률 임계값은 80%입니다. 백엔드가 CPU 사용량 80% 를 초과하면 트래픽이 리밸런싱됩니다.샘플 매니페스트를 클러스터에 적용합니다.
kubectl apply -f my-backend-policy.yaml
트래픽 분산을 실시간 CPU 사용률에 기반하면 성능이 자동으로 최적화됩니다. 이 작업은 개별 포드의 과부하를 방지하는 데 도움이 됩니다.
dryRun
및 balancingMode
관련 중요 고려사항
맞춤 측정항목으로 GCPBackendPolicy
를 구성할 때는 customMetrics
정의에서 balancingMode
와 dryRun
필드 간의 상호작용을 고려하세요. 이 상호작용에 따라 부하 분산기가 맞춤 측정항목을 사용하는 방식이 결정됩니다. 분산 모드와 관련된 제한사항을 비롯한 커스텀 측정항목 및 제한사항에 대한 자세한 내용은 Cloud Load Balancing 커스텀 측정항목을 참고하세요.
balancingMode: CUSTOM_METRICS
- 맞춤 측정항목을 기반으로 트래픽을 분산하려면
customMetrics
목록의 맞춤 측정항목 중 하나 이상이dryRun
을false
로 설정해야 합니다. 이 설정은 부하 분산기가 리밸런싱 결정에 해당 측정항목을 적극적으로 사용하도록 지시합니다. dryRun: true
와 함께 다른 맞춤 측정항목을 포함할 수 있으며, 드라이 실행이 아닌 측정항목도 포함할 수 있습니다. 이렇게 하면 트래픽에 영향을 주지 않고 GPU 사용률과 같은 새 측정항목을 테스트하거나 모니터링할 수 있으며,dryRun: false
가 있는 CPU 사용률과 같은 다른 측정항목은 균형 조정을 제어합니다.balancingMode
이CUSTOM_METRICS
이고 모든 맞춤 측정항목의dryRun
이true
로 설정된 경우 오류가 발생합니다. 예를 들어 부하 분산기가 결정을 내리려면 활성 측정항목이 필요합니다.gceSync: generic::invalid_argument: Update: Invalid value for field 'resource.backends[0]': '...'. CUSTOM_METRICS BalancingMode requires at least one non-dry-run custom metric.
- 맞춤 측정항목을 기반으로 트래픽을 분산하려면
balancingMode
이RATE
또는 기타 맞춤 측정항목이 아닌 모드인 경우- 부하 분산이 초당 요청 수에 대한
RATE
와 같은 맞춤 측정항목 이외의 기준에 기반하는 경우 모든 맞춤 측정항목에 대해dryRun: true
을 설정할 수 있습니다. 이렇게 하면 기본 균형 조정 메커니즘에 영향을 주지 않고 맞춤 측정항목을 모니터링할 수 있습니다. 이는balancingMode
을CUSTOM_METRICS
로 전환하기 전에 새 맞춤 측정항목을 테스트하는 데 유용합니다.
- 부하 분산이 초당 요청 수에 대한
커스텀 측정항목 모니터링
GCPBackendPolicy
를 구성하고 애플리케이션으로 트래픽을 전송하기 시작한 후gke.cpu
과 같은 맞춤 측정항목이 측정항목 탐색기에 표시되기까지 다소 시간이 걸립니다.- 맞춤 측정항목이 측정항목 탐색기에 표시되고 활성화되려면 정책에서 모니터링하는 백엔드를 통해 실제 트래픽이 흘러야 합니다. 트래픽이 없으면 측정항목이 측정항목 탐색기의 '비활성 리소스'에만 표시될 수 있습니다.
맞춤 CPU 사용률 임계값 설정
기본적으로 GKE는 CPU 사용률이 80% 를 초과하는 백엔드에서 트래픽을 분산합니다. 하지만 트래픽 재분배가 필요하기 전에 특정 워크로드는 CPU 사용량이 더 높거나 낮아도 될 수 있습니다. GCPBackendPolicy
리소스의 maxUtilizationPercent
필드를 사용하여 이 기준점을 맞춤설정할 수 있습니다.
백엔드가 리밸런싱이 트리거되기 전에 최대 70% 의 CPU를 활용할 수 있도록 GKE 서비스를 구성하려면 다음 샘플 매니페스트를
my-backend-policy.yaml
로 저장하세요.kind: GCPBackendPolicy apiVersion: networking.gke.io/v1 metadata: name: my-backend-policy namespace: team-awesome spec: targetRef: group: "" kind: Service name: super-service default: balancingMode: CUSTOM_METRICS customMetrics: - name: gke.cpu maxUtilizationPercent: 70
다음에 유의하세요.
maxUtilizationPercent
필드는 0~100의 값을 허용합니다. 값이 100이면 트래픽이 리밸런싱되기 전에 백엔드가 전체 CPU 용량을 사용할 수 있음을 의미합니다.- 초기 오프로드가 필요한 지연 시간에 민감한 워크로드의 경우 더 낮은 기준점을 사용하세요.
- 거의 최대 용량으로 실행되도록 설계된 워크로드의 경우 더 높은 임계값을 사용하세요.
- 멀티 클러스터 서비스의 경우
spec.targetRef.kind
는ServiceImport
이어야 하고group
는net.gke.io
이어야 합니다.
샘플 매니페스트를 클러스터에 적용합니다.
kubectl apply -f my-backend-policy.yaml
맞춤 CPU 사용률 기준점을 사용 설정하면 백엔드의 CPU 사용률에 따라 트래픽 분산을 제어할 수 있습니다.
(선택사항) 테스트 실행 모드 사용 설정
테스트 실행 모드는 트래픽 분배를 변경하지 않고 포드 리소스 사용률을 모니터링합니다. 드라이런 모드가 사용 설정되면 측정항목이 Cloud Monitoring으로 내보내지지만 Cloud Load Balancing은 이러한 측정항목을 무시하고 기본 부하 분산 동작을 사용합니다.
GKE 서비스에 테스트 실행 모드를 사용 설정하려면 다음 샘플 매니페스트를
my-backend-policy.yaml
로 저장합니다.kind: GCPBackendPolicy apiVersion: networking.gke.io/v1 metadata: name: my-backend-policy spec: targetRef: group: "" kind: Service name: store-v1 default: balancingMode: RATE maxRatePerEndpoint: 10 customMetrics: - name: gke.cpu dryRun: true
샘플 매니페스트를 클러스터에 적용합니다.
kubectl apply -f my-backend-policy.yaml
테스트 실행 모드를 사용 설정하면 다음이 발생합니다.
Cloud Load Balancing은 CPU 사용률 측정항목을 무시하고 대신 기본 부하 분산 동작을 사용합니다.
측정항목은
network.googleapis.com/loadbalancer/backend/lb_custom_metrics
아래의 Cloud Monitoring으로 계속 내보내집니다.
측정항목을 검토한 후 GCPBackendPolicy
에서 dryRun
필드를 삭제하고 구성을 다시 적용합니다. 드라이런을 사용 중지한 후 문제가 발생하면 정책에 dryRun: true
를 다시 추가하여 드라이런을 다시 사용 설정하세요.
정책 확인
GCPBackendPolicy
가 GKE 서비스에 적용되었는지 확인하고 GKE 컨트롤러가 정책을 인식하는지 확인하려면 다음 명령어를 실행합니다.
kubectl describe gcpbackendpolicy POLICY_NAME -n NAMESPACE
출력은 다음과 비슷합니다.
Name: <your policy name>
Namespace: <your namespace>
Labels: <none>
Annotations: <none>
API Version: networking.gke.io/v1
Kind: GCPBackendPolicy
Metadata:
Creation Timestamp: ...
Generation: 1
Resource Version: …
UID: …
Spec:
Default:
Balancing Mode: CUSTOM_METRICS
Custom Metrics:
Dry Run: false
Name: gke.cpu
Target Ref:
Group:
Kind: Service
Name: super-service
Status:
Conditions:
Last Transition Time: …
Message:
Reason: Attached
Status: True
Type: Attached
Events:
…
Compute Engine API를 사용하여 사용률 기반 부하 분산 구성
Kubernetes Gateway API를 사용하여 GKE 서비스의 사용률 기반 부하 분산을 구성하는 것이 좋습니다.
하지만 Compute Engine API 또는 Terraform을 사용하여 부하 분산기를 직접 관리하는 것이 더 나을 수도 있습니다. 이 방법을 선택하는 경우 BackendService 수준에서 사용률 기반 부하 분산을 사용 설정해야 합니다.
기존 BackendService의 경우 다음 명령어를 실행하여 사용률 기반 부하 분산을 사용 설정하고 네트워크 엔드포인트 그룹 (NEG) my-lb-neg를 연결합니다.
gcloud compute backend-services add-backend MY_BACKEND_SERVICE \ --network-endpoint-group my-lb-neg \ --network-endpoint-group-zone=asia-southeast1-a \ --global \ --balancing-mode=CUSTOM_METRICS \ --custom-metrics 'name="gke.cpu",maxUtilization=0.8'
다음을 바꿉니다.
MY_BACKEND_SERVICE
을 BackendService 이름으로 바꿉니다.CUSTOM_METRICS
포함CUSTOM_METRICS
NEG가 이미 연결된 BackendService의 기존 백엔드 항목에 대한 사용률 기반 부하 분산 설정을 업데이트하려면 다음 명령어를 실행합니다.
gcloud compute backend-services update-backend MY_BACKEND_SERVICE \ --network-endpoint-group my-lb-neg \ --network-endpoint-group-zone=asia-southeast1-a \ --global \ --balancing-mode=CUSTOM_METRICS \ --custom-metrics 'name="gke.cpu",maxUtilization=0.8'
다음을 바꿉니다.
MY_BACKEND_SERVICE
을 BackendService 이름으로 바꿉니다.CUSTOM_METRICS
포함CUSTOM_METRICS
GKE 서비스의 사용률 기반 부하 분산 사용 중지
GKE 서비스에서 사용률 기반 부하 분산을 사용 중지하려면 다음 단계를 수행하세요.
- 다른 설정의 정책을 유지하려면
GCPBackendPolicy
에서balancingMode
및customMetrics
필드를 삭제합니다. GCPBackendPolicy
가 더 이상 필요하지 않으면 삭제할 수 있습니다.- Compute Engine API를 사용하는 경우 백엔드 서비스에서
--balancing-mode
및--custom-metrics
플래그를 다시 변경합니다.