규모에 맞게 GKE 워크로드 크기 조정


이 가이드에서는 VPA 권장사항 및 사용 측정항목을 사용해서 Google Kubernetes Engine(GKE) 워크로드의 적정 크기를 조정하는 방법을 보여줍니다.

리소스 적정 크기 조정이 중요한 이유 이해

과소 프로비저닝은 컨테이너에 애플리케이션 실행에 필요한 리소스를 부족하게 하여 속도가 느려지고 신뢰할 수 없게 됩니다. 과대 프로비저닝은 애플리케이션 성능에 영향을 미치지 않지만 월별 요금이 증가할 수 있습니다.

다음 표에서는 CPU 및 메모리의 과소 프로비저닝 및 과대 프로비저닝이 미치는 영향을 설명합니다.

리소스 프로비저닝 상태 완화 설명
CPU 과도 비용 불필요한 리소스를 예약하여 워크로드 비용을 높입니다.
이전 단계에서 만든 VM의 외부 IP 주소를 성능 워크로드가 느려지거나 응답하지 않을 수 있습니다.
설정되지 않음 신뢰성 CPU가 0으로 제한되어 워크로드가 응답하지 않을 수 있습니다.
메모리 과도 비용 불필요한 리소스를 예약하여 워크로드 비용을 높입니다.
이전 단계에서 만든 VM의 외부 IP 주소를 신뢰성 메모리 부족(OOM) 오류로 애플리케이션이 종료될 수 있습니다.
설정되지 않음 신뢰성 kubelet은 언제든지 포드를 중지하고 실패로 표시할 수 있습니다.

목표

이 튜토리얼에서는 다음과 같은 방법을 알아봅니다.

  • 샘플 애플리케이션을 배포합니다.
  • Monitoring에서 BigQuery로 GKE 권장사항 측정항목을 내보냅니다.
  • BigQuery 및 Looker Studio를 사용하여 프로젝트 전체에서 GKE 컨테이너 권장사항을 확인합니다.

비용

이 문서에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.

프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요. Google Cloud를 처음 사용하는 사용자는 무료 체험판을 사용할 수 있습니다.

이 문서에 설명된 태스크를 완료했으면 만든 리소스를 삭제하여 청구가 계속되는 것을 방지할 수 있습니다. 자세한 내용은 삭제를 참조하세요.

시작하기 전에

프로젝트 설정

Cloud ShellDocker, kubectl, gcloud CLI, Terraform을 포함하여 이 튜토리얼에 필요한 소프트웨어와 함께 사전 설치됩니다. Cloud Shell을 사용하지 않는 경우에는 gcloud CLI를 설치해야 합니다.

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. Google Cloud CLI를 설치합니다.
  3. gcloud CLI를 초기화하려면 다음 명령어를 실행합니다.

    gcloud init
  4. Google Cloud 프로젝트를 만들거나 선택합니다.

    • Google Cloud 프로젝트를 만듭니다.

      gcloud projects create PROJECT_ID

      PROJECT_ID를 만들려는 Google Cloud 프로젝트의 이름으로 바꿉니다.

    • 만든 Google Cloud 프로젝트를 선택합니다.

      gcloud config set project PROJECT_ID

      PROJECT_ID를 Google Cloud 프로젝트 이름으로 바꿉니다.

  5. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  6. Resource Manager, Google Kubernetes Engine, Cloud Monitoring, BigQuery, Cloud Run, Cloud Build API를 사용 설정합니다.

    gcloud services enable cloudresourcemanager.googleapis.com container.googleapis.com monitoring.googleapis.com bigquery.googleapis.com run.googleapis.com cloudbuild.googleapis.com cloudscheduler.googleapis.com artifactregistry.googleapis.com
  7. Google Cloud CLI를 설치합니다.
  8. gcloud CLI를 초기화하려면 다음 명령어를 실행합니다.

    gcloud init
  9. Google Cloud 프로젝트를 만들거나 선택합니다.

    • Google Cloud 프로젝트를 만듭니다.

      gcloud projects create PROJECT_ID

      PROJECT_ID를 만들려는 Google Cloud 프로젝트의 이름으로 바꿉니다.

    • 만든 Google Cloud 프로젝트를 선택합니다.

      gcloud config set project PROJECT_ID

      PROJECT_ID를 Google Cloud 프로젝트 이름으로 바꿉니다.

  10. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  11. Resource Manager, Google Kubernetes Engine, Cloud Monitoring, BigQuery, Cloud Run, Cloud Build API를 사용 설정합니다.

    gcloud services enable cloudresourcemanager.googleapis.com container.googleapis.com monitoring.googleapis.com bigquery.googleapis.com run.googleapis.com cloudbuild.googleapis.com cloudscheduler.googleapis.com artifactregistry.googleapis.com
  12. Google 계정에 역할을 부여합니다. 다음 각 IAM 역할에 대해 다음 명령어를 한 번씩 실행합니다. roles/serviceusage.serviceUsageAdmin, roles/container.clusterAdmin, roles/iam.serviceAccountAdmin, roles/iam.securityAdmin, roles/container.admin

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
    • PROJECT_ID를 프로젝트 ID로 바꿉니다.
    • EMAIL_ADDRESS를 이메일 주소로 바꿉니다.
    • ROLE을 각 개별 역할로 바꿉니다.

환경 설정하기

환경을 설정하려면 다음 단계를 수행합니다.

  1. 환경 변수를 설정합니다.

    export PROJECT_ID=PROJECT_ID
    export REGION=us-central1
    export ZONE=us-central1-f
    export IMAGE=$REGION-docker.pkg.dev/$PROJECT_ID/main/vpa-recs-image:latest
    

    PROJECT_ID를 Google Cloud 프로젝트 ID로 바꿉니다.

  2. 기본 환경 변수를 설정합니다.

    gcloud config set project $PROJECT_ID
    gcloud config set compute/region $REGION
    gcloud config set compute/zone $ZONE
    
  3. 코드 저장소를 클론합니다.

    git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
    
  4. 작업 디렉터리로 변경합니다.

    cd kubernetes-engine-samples/cost-optimization/gke-vpa-recommendations
    

(선택사항) 샘플 애플리케이션 설정

이 섹션은 샘플 애플리케이션을 배포하기 위한 선택적인 섹션입니다. 기존 클러스터를 사용하려면 클러스터에 Cloud Monitoring이 구성되어 있어야 합니다.

실제 환경을 시뮬레이션하기 위해 설정 스크립트를 사용하여 Online Boutique를 배포합니다.

다음 단계에서는 샘플 애플리케이션을 설치하고 기본 구성을 수정합니다. 예를 들어 이 안내에서는 일부 워크로드에 대해 수평형 포드 자동 확장 처리(HPA)를 구성하고 리소스 요청 및 한도를 변경합니다.

  1. 설치 스크립트를 실행합니다.

    ./scripts/setup.sh
    

    설정 스크립트는 다음을 수행합니다.

    • GKE 클러스터를 만듭니다.
    • Online Boutique 샘플 애플리케이션을 배포합니다.
    • 포드 CPU 및 메모리 리소스 요청을 업데이트합니다.
    • 실제 환경을 시뮬레이션하도록 adservice 워크로드의 HorizontalPodAutoscaler 리소스를 구성합니다.

    설정 스크립트는 완료하는 데 최대 10분까지 걸릴 수 있습니다.

  2. 샘플 애플리케이션이 준비되었는지 확인합니다.

    kubectl get deployment
    

    출력은 다음과 비슷합니다.

    NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
    adservice               2/2     2            2           4m54s
    cartservice             1/1     1            1           4m55s
    checkoutservice         1/1     1            1           4m56s
    currencyservice         1/1     1            1           4m55s
    emailservice            1/1     1            1           4m56s
    frontend                1/1     1            1           4m55s
    loadgenerator           1/1     1            1           4m55s
    paymentservice          1/1     1            1           4m55s
    productcatalogservice   1/1     1            1           4m55s
    recommendationservice   1/1     1            1           4m56s
    redis-cart              1/1     1            1           4m54s
    shippingservice         1/1     1            1           4m54s
    

저장소 만들기

측정항목 내보내기 도구 이미지를 저장할 저장소를 만듭니다.

  1. 새 Docker 저장소를 만듭니다.

    gcloud artifacts repositories create main --repository-format=docker \
        --location=$REGION \
        --description="docker repository"
    
  2. Docker 저장소에 대한 인증을 설정합니다.

    gcloud auth configure-docker $REGION-docker.pkg.dev
    
  3. 다음 명령어를 실행하여 이미지를 배포합니다.

    gcloud builds submit metrics-exporter --region=$REGION --tag $IMAGE
    

애플리케이션 배포

다음 섹션에서는 Terraform을 사용해서 다음 태스크를 수행합니다.

  • 서비스 계정을 만들고 Google Cloud 리소스를 관리하고 상호작용하는 데 필요한 권한을 할당합니다.
  • 서비스 계정에 모니터링 뷰어, BigQuery 데이터 편집자, BigQuery 데이터 소유자, BigQuery 작업 사용자, Cloud Run 호출자 역할을 부여합니다.
  • Artifact Registry에서 Docker 이미지를 가져오고 지정된 구성으로 실행하는 Cloud Run 작업을 배포합니다.
  • Cloud Run 서비스를 매일 트리거하는 Cloud Scheduler 작업을 만듭니다.
  • 측정항목 데이터와 권장사항을 저장할 BigQuery 데이터 세트, 테이블, 뷰를 만듭니다.

Terraform 구성

  1. 구성 환경 변수를 설정합니다.

    export TF_VAR_BIGQUERY_DATASET=gke_metrics_dataset
    export TF_VAR_BIGQUERY_TABLE=gke_metrics
    export TF_VAR_RECOMMENDATION_WINDOW_SECONDS=1209600
    export TF_VAR_RECOMMENDATION_DISTANCE=86400
    export TF_VAR_LATEST_WINDOW_SECONDS=600
    export TF_VAR_METRIC_WINDOW=259200
    export TF_VAR_METRIC_DISTANCE=600
    

    이 명령어에는 다음이 포함됩니다.

    • TF_VAR_BIGQUERY_DATASETTF_VAR_BIGQUERY_TABLE: GKE 측정항목 데이터를 저장합니다.
    • TF_VAR_RECOMMENDATION_WINDOW_SECONDS: VPA 권장사항의 기간입니다. 기본값은 1,209,600초 또는 14일입니다.
    • TF_VAR_RECOMMENDATION_DISTANCE: VPA 권장사항 데이터 포인트가 반환되는 간격입니다. 기본값은 86,400초 또는 1일입니다.
    • TF_VAR_LATEST_WINDOW_SECONDS: 최근에 요청된 한도 리소스 값을 가져올 기간입니다. 기본값은 600초 또는 10분입니다.
    • METRIC_WINDOW: GKE 사용 및 사용률 측정항목의 기간을 설정합니다. 기본값은 25,9200초 또는 3일입니다.
    • METRIC_DISTANCE: 데이터 포인트가 반환되는 간격입니다. 기본값은 600초 또는 10분입니다.

    워크로드 요구에 따라 이러한 값을 조정합니다. 예를 들어 한 달에 한 번 실행되는 일괄 워크로드의 경우 TF_VAR_RECOMMENDATION_WINDOW_SECONDSMETRIC_WINDOW2592000초(30일)로 업데이트합니다.

Terraform 구성 배포

  1. 구성을 초기화, 검증, 적용합니다.

    terraform -chdir=terraform init
    terraform -chdir=terraform validate
    terraform -chdir=terraform apply -var project_id=$PROJECT_ID -var region=$REGION -var image=$IMAGE
    

    이 명령어는 실행 계획을 제공하고 변경 전 승인을 요청합니다. 계획을 검토하고 모든 것이 예상대로 진행되면 yes를 입력하여 계속 진행합니다.

    적용 명령어가 성공적으로 완료되면 Terraform에서 리소스가 생성되고 관리됩니다.

  2. Cloud Scheduler 작업을 수동으로 실행합니다.

    gcloud scheduler jobs run recommendation-schedule --location ${REGION}
    

배포 확인

  1. workload-recommendations 세부정보 페이지에서 로그 탭을 선택합니다.

  2. Cloud Run 콘솔에서 측정항목 로그가 처리되고 있는지 확인합니다.

    Cloud Run으로 이동

    로그는 BigQuery에 작성되는 측정항목을 보여줍니다. 출력은 다음과 비슷하게 표시됩니다.

    INFO - Building Row
    INFO - Successfully wrote 12 rows to BigQuery table [PROJECT_ID].gke_metric_dataset.gke_metrics.
    INFO - Run Completed
    

    출력이 일치하지 않으면 5분 정도 기다린 후 gcloud scheduler jobs run recommendation-schedule --location $REGION 명령어를 실행합니다.

BigQuery에서 컨테이너 권장사항 보기

  1. Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.

    BigQuery로 이동

  2. 데이터가 gke_metrics 테이블과 container_recommendations 뷰에 표시되는지 확인합니다. 워크로드 수에 따라 모든 측정항목을 BigQuery에 쓰는 데 몇 분 정도 걸릴 수 있습니다.

  3. 쿼리 편집기의 container_recommendations 뷰에서 모든 행을 선택합니다.

    SELECT * FROM `PROJECT_ID.gke_metrics_dataset.container_recommendations`
    

    이 프로그램은 클라우드 모니터링에서 다음 측정항목을 추출합니다.

    • 워크로드 세부정보: 프로젝트 ID, 클러스터 이름, 컨트롤러, 컨테이너 이름입니다.

    • CPU/메모리 사용량 및 사용률: 워크로드에서 사용 중인 CPU 및 메모리 양, 사용 중인 CPU 및 메모리의 비율입니다.

    • 요청 및 한도: 워크로드에 요청된 CPU 및 메모리 양과 워크로드에 허용되는 최대 CPU 및 메모리 양입니다.

    • CPU 및 메모리 워크로드 권장사항: 배포를 위한 VPA 권장사항 및 비배포 객체의 실제 사용량 및 대상 사용률을 기준으로 원활한 실행을 위해 워크로드에 할당해야 하는 CPU 및 메모리 양에 대한 권장사항입니다.

Looker Studio에서 권장사항 시각화

Looker Studio는 사용자가 데이터 시각화, 대시보드, 보고서를 빌드하고 사용할 수 있게 해주는 무료 셀프서비스 비즈니스 인텔리전스 플랫폼입니다. Looker Studio를 사용하면 데이터에 연결하고, 시각화를 만들고, 유용한 정보를 다른 사람과 공유할 수 있습니다.

Looker Studio를 사용하여 BigQuery container_recommendations 뷰에서 데이터를 시각화합니다.

  1. 워크로드 크기 조정 대시보드 템플릿을 엽니다.
  2. 내 데이터 사용을 클릭합니다.
  3. 프로젝트를 선택합니다.
  4. 데이터 세트에서 gke_metric_dataset를 선택합니다.
  5. 테이블로 container_recommendations를 선택합니다.
  6. 추가를 클릭합니다.
  7. 보고서에 추가를 클릭합니다.

Looker Studio 템플릿 세부정보

Looker Studio 템플릿 세부정보 페이지는 다음 정보를 제공합니다.

  • GKE 워크로드 크기 최적화 개요: 다음을 포함한 클러스터 개요를 제공합니다.
    • 안정성 및 성능 문제를 일으킬 수 있는 최선의 노력과 버스트 워크로드의 수
    • 잠재적인 CPU 및 메모리 리소스 절감 양수 값은 오버프로비저닝을 나타내고, 음수 값은 과소 프로비저닝을 나타냅니다.
  • 워크로드 권장사항: 워크로드 CPU 및 메모리 요청 및 한도에 대한 권장사항을 제공합니다.
  • 위험이 있는 GKE 워크로드: 안정성 및 성능 문제를 일으킬 위험이 가장 큰 워크로드를 표시합니다.
  • 기록 - 워크로드 크기 조정 - Google에서 어떤 작업을 하고 있나요?: 워크로드가 얼마나 잘 작동하고 최선의 워크로드가 얼마나 잘 구현되었는지에 대한 이전 뷰를 제공합니다.

요청된 CPU 및 컨테이너 권장사항 제한

요청된 워크로드 CPU 및 한도 값이 동일한 경우 QoS가 보장된 것으로 간주되며, CPU 권장사항이 14일의 기간 내 최댓값으로 설정됩니다. 그렇지 않으면 CPU 요청 권장사항의 95번째 백분위수가 14일 이내에 사용됩니다.

CPU 요청 및 한도 값이 동일하면 CPU 한도 권장사항이 배포 객체의 최대 CPU 요청 VPA 권장사항과 목표 사용률이 70%인 CPU 사용량으로 설정됩니다. 워크로드의 요청 및 한도가 동일하지 않으면 기존 한도 비율이 사용됩니다.

요청된 메모리 및 컨테이너 권장사항 제한

메모리 권장사항은 배포 객체의 최대 VPA 권장사항과 대상 사용률이 80%인 최대 메모리 사용량을 사용하여 워크로드 안정성을 보장합니다. container_recommendation 뷰의 쿼리에서 대상 사용률 값을 업데이트할 수 있습니다.

메모리가 압축할 수 없는 리소스이기 때문에 요청 및 한도에 동일한 양의 메모리를 사용하는 것이 좋습니다 . 메모리가 소진되면 포드를 종료해야 합니다. 포드를 종료해서 환경이 불안정화되는 것을 방지하기 위해서는 요청된 메모리를 메모리 한도로 설정해야 합니다.

권장사항 우선순위 지정

권장사항에 따라 즉각적인 조치가 필요한 워크로드를 표시하기 위해 각 행에 우선순위 값이 할당됩니다. CPU 및 메모리 단위는 다릅니다. 단위를 정규화하기 위해 사전 정의된 CPU와 메모리 사이의 E2 머신 유형 주문형 가격 비율이 메모리 단위를 CPU 단위로 변환하는 근사치로 사용됩니다.

우선순위는 다음 수식을 사용하여 계산됩니다.

priority = (CPU requested - CPU recommendation) + ((memory requested -
memory recommendation) / (vCPUs on-demand pricing /memory on-demand pricing ))

Autopilot의 경우 배포 구성에서 요청한 총 리소스는 지원되는 최솟값 및 최댓값 내에 있어야 합니다.

여러 프로젝트의 VPA 권장사항 보기

여러 프로젝트에서 VPA 컨테이너 권장사항을 보려면 새 프로젝트를 범위 지정 프로젝트로 사용합니다.

프로덕션 환경에 이 프로젝트를 배포할 때는 분석하려는 모든 프로젝트를 새 프로젝트의 측정항목 범위에 추가합니다.

삭제

이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요.

프로젝트 삭제

청구되지 않도록 하는 가장 쉬운 방법은 튜토리얼에서 만든 프로젝트를 삭제하는 것입니다.

Google Cloud 프로젝트를 삭제합니다.

gcloud projects delete PROJECT_ID

다음 단계