GKE에서 규모에 맞게 풀 스택 워크로드 실행


이 튜토리얼에서는 Google Kubernetes Engine(GKE)에서 규모에 맞게 고가용성 관계형 데이터베이스에서 지원되는 웹 애플리케이션을 실행하는 방법을 보여줍니다.

이 튜토리얼에 사용된 샘플 애플리케이션은 은행의 결제 처리 네트워크를 시뮬레이션하는 HTTP 기반 웹 애플리케이션인 Bank of Anthos입니다. Bank of Anthos는 여러 서비스를 사용하여 작동합니다. 이 튜토리얼은 Bank of Anthos 서비스를 지원하는 웹사이트 프런트엔드 및 관계형 PostgreSQL 데이터베이스에 중점을 두고 있습니다. 아키텍처 및 배포 서비스를 포함하여 Bank of Anthos에 대해 자세히 알아보려면 GitHub의 Bank of Anthos를 참조하세요.

목표

  • GKE 클러스터를 만들고 구성합니다.
  • 샘플 웹 애플리케이션 및 고가용성 PostgreSQL 데이터베이스를 배포합니다.
  • 웹 애플리케이션 및 데이터베이스의 자동 확장을 구성합니다.
  • 부하 생성기를 사용하여 트래픽 급증을 시뮬레이션합니다.
  • 서비스 확장 및 축소 방법을 관찰합니다.

비용

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

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

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

시작하기 전에

  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. GKE API를 사용 설정합니다.

    gcloud services enable container.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. GKE API를 사용 설정합니다.

    gcloud services enable container.googleapis.com
  12. Helm CLI를 설치합니다.

환경 준비

  1. 이 튜토리얼에 사용된 샘플 저장소를 클론합니다.

    git clone https://github.com/GoogleCloudPlatform/bank-of-anthos.git
    cd bank-of-anthos/
    
  2. 환경 변수를 설정합니다.

    PROJECT_ID=PROJECT_ID
    GSA_NAME=bank-of-anthos
    GSA_EMAIL=bank-of-anthos@${PROJECT_ID}.iam.gserviceaccount.com
    KSA_NAME=default
    

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

클러스터 및 서비스 계정 설정

  1. 클러스터 만들기:

    gcloud container clusters create-auto bank-of-anthos --region=us-central1
    

    클러스터를 시작하려면 최대 5분 정도 걸릴 수 있습니다.

  2. IAM 서비스 계정을 만듭니다.

    gcloud iam service-accounts create bank-of-anthos
    
  3. IAM 서비스 계정에 대한 액세스 권한을 부여합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --role roles/cloudtrace.agent \
      --member "serviceAccount:bank-of-anthos@PROJECT_ID.iam.gserviceaccount.com"
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --role roles/monitoring.metricWriter \
      --member "serviceAccount:bank-of-anthos@PROJECT_ID.iam.gserviceaccount.com"
    gcloud iam service-accounts add-iam-policy-binding "bank-of-anthos@PROJECT_ID.iam.gserviceaccount.com" \
      --role roles/iam.workloadIdentityUser \
      --member "serviceAccount:PROJECT_ID.svc.id.goog[default/default]"
    

    이 단계에서는 다음 액세스 권한을 부여합니다.

    • roles/cloudtrace.agent: 지연 시간 정보와 같은 추적 데이터를 Trace에 기록합니다.
    • roles/monitoring.metricWriter: Cloud Monitoring에 측정항목을 기록합니다.
    • roles/iam.workloadIdentityUser: Kubernetes 서비스 계정이 GKE용 워크로드 아이덴티티 제휴를 사용하여 IAM 서비스 계정으로 작동할 수 있게 허용합니다.
  4. default 네임스페이스의 default Kubernetes 서비스 계정이 사용자가 만든 IAM 서비스 계정으로 작동하도록 구성합니다.

    kubectl annotate serviceaccount default \
        iam.gke.io/gcp-service-account=bank-of-anthos@PROJECT_ID.iam.gserviceaccount.com
    

    이렇게 하면 default 네임스페이스의 default Kubernetes 서비스 계정을 사용하는 포드가 IAM 서비스 계정과 동일한 Google Cloud 리소스에 액세스할 수 있습니다.

Bank of Anthos 및 PostgreSQL 배포

이 섹션에서는 데이터베이스 서버 복제본을 자동 확장할 수 있도록 Bank of Anthos 및 PostgreSQL 데이터베이스를 고가용성(HA) 모드로 설치합니다. 이 섹션에 사용된 스크립트, Helm 차트, Kubernetes 매니페스트를 보려면 GitHub의 Bank of 저장소를 확인합니다.

  1. 데이터베이스 스키마 및 데이터 정의 언어(DDL) 스크립트를 배포합니다.

    kubectl create configmap initdb \
        --from-file=src/accounts/accounts-db/initdb/0-accounts-schema.sql \
        --from-file=src/accounts/accounts-db/initdb/1-load-testdata.sql \
        --from-file=src/ledger/ledger-db/initdb/0_init_tables.sql \
        --from-file=src/ledger/ledger-db/initdb/1_create_transactions.sh
    
  2. 샘플 Helm 차트를 사용하여 PostgreSQL을 설치합니다.

    helm repo add bitnami https://charts.bitnami.com/bitnami
    helm install accounts-db bitnami/postgresql-ha \
        --version 10.0.1 \
        --values extras/postgres-hpa/helm-postgres-ha/values.yaml \
        --set="postgresql.initdbScriptsCM=initdb" \
        --set="postgresql.replicaCount=1" \
        --wait
    

    이 명령어는 시작 복제본 수가 1인 PostgreSQL 클러스터를 만듭니다. 이 튜토리얼의 후반부에서는 들어오는 연결을 기반으로 클러스터를 확장합니다. 이 작업을 완료하려면 10분 정도 걸릴 수 있습니다.

  3. Bank of Anthos를 배포합니다.

    kubectl apply -f extras/jwt/jwt-secret.yaml
    kubectl apply -f extras/postgres-hpa/kubernetes-manifests
    

    이 작업을 완료하려면 몇 분 정도 걸릴 수 있습니다.

체크포인트: 설정 검증

  1. 모든 Bank of Anthos 포드가 실행되는지 확인합니다.

    kubectl get pods
    

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

    NAME                                  READY   STATUS
    accounts-db-pgpool-57ffc9d685-c7xs8   3/3     Running
    accounts-db-postgresql-0              1/1     Running
    balancereader-57b59769f8-xvp5k        1/1     Running
    contacts-54f59bb669-mgsqc             1/1     Running
    frontend-6f7fdc5b65-h48rs             1/1     Running
    ledgerwriter-cd74db4cd-jdqql          1/1     Running
    pgpool-operator-5f678457cd-cwbhs      1/1     Running
    transactionhistory-5b9b56b5c6-sz9qz   1/1     Running
    userservice-f45b46b49-fj7vm           1/1     Running
    
  2. 웹사이트 프런트엔드에 액세스할 수 있는지 확인합니다.

    1. frontend 서비스의 외부 IP 주소를 가져옵니다.

      kubectl get ingress frontend
      

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

      NAME       CLASS    HOSTS   ADDRESS         PORTS   AGE
      frontend   <none>   *       203.0.113.9     80      12m
      
    2. 브라우저에서 외부 IP 주소로 이동합니다. Bank of Anthos 로그인 페이지가 표시됩니다. 궁금하면 애플리케이션을 둘러봅니다.

      404 오류가 발생하면 마이크로서비스가 프로비저닝되도록 몇 분 정도 기다린 후 다시 시도합니다.

웹 앱 및 PostgreSQL 데이터베이스 자동 확장

GKE Autopilot은 클러스터의 워크로드 수를 기반으로 클러스터 컴퓨팅 리소스를 자동 확장합니다. 리소스 측정항목을 기반으로 클러스터에서 포드 수를 자동으로 확장하려면 Kubernetes 수평형 포드 자동 확장을 구현해야 합니다. 기본 제공되는 Kubernetes CPU 및 메모리 측정항목을 사용하거나 초당 HTTP 요청 수 또는 Cloud Monitoring에서 가져온 SELECT 문 수량과 같은 커스텀 측정항목을 사용할 수 있습니다.

이 섹션에서는 다음과 같은 작업을 수행하게 됩니다.

  1. 기본 제공되는 측정항목 및 커스텀 측정항목을 사용하여 Bank of Anthos 마이크로서비스에 대해 수평형 포드 자동 확장을 구성할 수 있습니다.
  2. Bank of Anthos 애플리케이션 부하를 시뮬레이션하여 자동 확장 이벤트를 트리거합니다.
  3. 클러스터의 포드 및 노드 수가 부하에 따라 자동으로 확장 및 축소되는 방식을 관측합니다.

커스텀 측정항목 수집 설정

Monitoring에서 커스텀 측정항목을 읽으려면 클러스터에서 커스텀 측정항목 - Stackdriver 어댑터를 배포해야 합니다.

  1. 어댑터를 배포합니다.

    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter.yaml
    
  2. GKE용 워크로드 아이덴티티 제휴를 사용하여 측정항목을 가져오도록 어댑터를 구성합니다.

    1. IAM 서비스 계정을 구성합니다.

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member "serviceAccount:bank-of-anthos@PROJECT_ID.iam.gserviceaccount.com" \
          --role roles/monitoring.viewer
      gcloud iam service-accounts add-iam-policy-binding bank-of-anthos@PROJECT_ID.iam.gserviceaccount.com \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:PROJECT_ID.svc.id.goog[custom-metrics/custom-metrics-stackdriver-adapter]"
      
    2. 어댑터에 사용되는 Kubernetes 서비스 계정에 주석을 추가합니다.

      kubectl annotate serviceaccount custom-metrics-stackdriver-adapter \
          --namespace=custom-metrics \
        iam.gke.io/gcp-service-account=bank-of-anthos@PROJECT_ID.iam.gserviceaccount.com
      
    3. 변경사항이 전파되도록 어댑터 배포를 다시 시작합니다.

      kubectl rollout restart deployment custom-metrics-stackdriver-adapter \
          --namespace=custom-metrics
      

데이터베이스의 자동 확장 구성

이 튜토리얼의 초반부에서 Bank of Anthos 및 PostgreSQL을 배포한 경우 모든 수신되는 SQL 문을 처리하도록 하나의 기본 읽기/쓰기 복제본이 있는 StatefulSet로 데이터베이스가 배포되었습니다. 이 섹션에서는 수신되는 SELECT 문을 처리하기 위해 새로운 대기 읽기 전용 복제본을 추가하도록 수평형 포드 자동 확장을 구성합니다. 각 복제본에서 부하를 줄이는 좋은 방법은 읽기 작업인 SELECT 문을 분산시키는 것입니다. PostgreSQL 배포에는 이러한 부하 분산을 달성하고 시스템 처리량을 향상시켜 주는 Pgpool-II라는 도구가 포함되어 있습니다.

PostgreSQL은 SELECT 문 측정항목을 Prometheus 측정항목으로 내보냅니다. prometheus-to-sd라는 경량형 측정항목 내보내기 도구를 사용하여 이러한 측정항목을 지원되는 형식으로 Cloud Monitoring으로 전송합니다.

  1. HorizontalPodAutoscaler 객체를 검토합니다.

    # Copyright 2022 Google LLC
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #      http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    
    ---
    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: accounts-db-postgresql
    spec:
      behavior:
        scaleUp:
          stabilizationWindowSeconds: 0
          policies:
          - type: Percent
            value: 100
            periodSeconds: 5
          selectPolicy: Max
      scaleTargetRef:
        apiVersion: apps/v1
        kind: StatefulSet
        name: accounts-db-postgresql
      minReplicas: 1
      maxReplicas: 5
      metrics:
      - type: External
        external:
          metric:
            name: custom.googleapis.com|mypgpool|pgpool2_pool_backend_stats_select_cnt
          target:
              type: AverageValue
              averageValue: "15"
    

    이 매니페스트는 다음을 수행합니다.

    • 5로 수직 확장하는 동안 최대 복제본 수를 설정합니다.
    • 1로 수직 축소하는 동안 최소 복제본 수를 설정합니다.
    • 외부 측정항목을 사용하여 확장 결정을 수행합니다. 이 샘플에서 측정항목은 SELECT 문의 개수입니다. 들어오는 SELECT 문 수가 15를 초과하면 확장 이벤트가 발생합니다.
  2. 클러스터에 매니페스트를 적용합니다.

    kubectl apply -f extras/postgres-hpa/hpa/postgresql-hpa.yaml
    

웹 인터페이스의 자동 확장 구성

Bank of Anthos 및 PostgreSQL 배포에서 Bank of Anthos 웹 인터페이스를 배포했습니다. 사용자 수가 증가하면 userservice 서비스가 더 많은 CPU 리소스를 소비합니다. 이 섹션에서는 기존 포드가 요청된 CPU를 60% 넘게 사용하는 경우에는 userservice 배포에 대해 그리고 부하 분산기에 대해 들어오는 HTTP 요청 수가 초당 5개를 초과할 경우에는 frontend 배포에 대해 수평형 포드 자동 확장을 구성합니다.

사용자 서비스 배포에 대해 자동 확장 구성

  1. userservice 배포에 대해 HorizontalPodAutoscaler 매니페스트를 검토합니다.

    # Copyright 2022 Google LLC
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #      http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    
    ---
    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: userservice
    spec:
      behavior:
        scaleUp:
          stabilizationWindowSeconds: 0
          policies:
            - type: Percent
              value: 100
              periodSeconds: 5
          selectPolicy: Max
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: userservice
      minReplicas: 5
      maxReplicas: 50
      metrics:
        - type: Resource
          resource:
            name: cpu
            target:
              type: Utilization
              averageUtilization: 60
    

    이 매니페스트는 다음을 수행합니다.

    • 50로 수직 확장하는 동안 최대 복제본 수를 설정합니다.
    • 5로 수직 축소하는 동안 최소 복제본 수를 설정합니다.
    • 기본 제공되는 Kubernetes 측정항목을 사용하여 확장 결정을 수행합니다. 이 샘플에서 측정항목은 CPU 활용률이고 목표 활용률은 초과 활용률 및 미만 활용률을 모두 방지하는 60%입니다.
  2. 클러스터에 매니페스트를 적용합니다.

    kubectl apply -f extras/postgres-hpa/hpa/userservice.yaml
    

프런트엔드 배포를 위한 자동 확장 구성

  1. userservice 배포에 대해 HorizontalPodAutoscaler 매니페스트를 검토합니다.

    # Copyright 2022 Google LLC
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #      http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    
    ---
    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: frontend
    spec:
      behavior:
        scaleUp:
          stabilizationWindowSeconds: 0
          policies:
            - type: Percent
              value: 100
              periodSeconds: 5
          selectPolicy: Max
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: frontend
      minReplicas: 5
      maxReplicas: 25
      metrics:
        - type: External
          external:
            metric:
              name: loadbalancing.googleapis.com|https|request_count
              selector:
                matchLabels:
                  resource.labels.forwarding_rule_name: FORWARDING_RULE_NAME
            target:
              type: AverageValue
              averageValue: "5"
    

    이 매니페스트에는 다음 필드가 사용됩니다.

    • spec.scaleTargetRef: 확장할 Kubernetes 리소스입니다.
    • spec.minReplicas: 이 샘플의 경우 5에 해당하는 최소 복제본 수입니다.
    • spec.maxReplicas: 이 샘플의 경우 25에 해당하는 최대 복제본 수입니다.
    • spec.metrics.*: 사용할 측정항목입니다. 이 샘플에서는 배포한 어댑터로 제공되는 Cloud Monitoring의 커스텀 측정항목인 초당 HTTP 요청 수입니다.
    • spec.metrics.external.metric.selector.matchLabels: 자동 확장 시 필터링할 특정 리소스 라벨입니다.
  2. 부하 분산기에서 frontend 배포로의 전달 규칙 이름을 찾습니다.

    export FW_RULE=$(kubectl get ingress frontend -o=jsonpath='{.metadata.annotations.ingress\.kubernetes\.io/forwarding-rule}')
    echo $FW_RULE
    

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

    k8s2-fr-j76hrtv4-default-frontend-wvvf7381
    
  3. 매니페스트에 전달 규칙을 추가합니다.

    sed -i "s/FORWARDING_RULE_NAME/$FW_RULE/g" "extras/postgres-hpa/hpa/frontend.yaml"
    

    이 명령어는 FORWARDING_RULE_NAME을 저장된 전달 규칙으로 바꿉니다.

  4. 클러스터에 매니페스트를 적용합니다.

    kubectl apply -f extras/postgres-hpa/hpa/frontend.yaml
    

체크포인트: 자동 확장 설정 검증

HorizontalPodAutoscaler 리소스 상태를 가져옵니다.

kubectl get hpa

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

NAME                     REFERENCE                            TARGETS             MINPODS   MAXPODS   REPLICAS   AGE
accounts-db-postgresql   StatefulSet/accounts-db-postgresql   10905m/15 (avg)     1         5         2          5m2s
contacts                 Deployment/contacts                  1%/70%              1         5         1          11m
frontend                 Deployment/frontend                  <unknown>/5 (avg)   5         25        1          34s
userservice              Deployment/userservice               0%/60%              5         50        5          4m56s

지금까지 애플리케이션 설정과 자동 확장 구성이 완료되었습니다. 이제 제공한 측정항목을 기준으로 프런트엔드 및 데이터베이스를 확장할 수 있습니다.

부하 시뮬레이션 및 GKE 확장 관찰

Bank of Anthos에는 트래픽을 시뮬레이션하여 부하에 따라 애플리케이션 확장을 테스트할 수 있게 해주는 loadgenerator 서비스가 포함되어 있습니다. 이 섹션에서는 loadgenerator 서비스를 배포하고, 부하를 생성하고, 결과 확장을 관찰합니다.

부하 테스트 생성기 배포

  1. Bank of Anthos 부하 분산기의 IP 주소로 환경 변수를 만듭니다.

    export LB_IP=$(kubectl get ingress frontend -o=jsonpath='{.status.loadBalancer.ingress[0].ip}')
    echo $LB_IP
    

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

    203.0.113.9
    
  2. 부하 분산기의 IP 주소를 매니페스트에 추가합니다.

    sed -i "s/FRONTEND_IP_ADDRESS/$LB_IP/g" "extras/postgres-hpa/loadgenerator.yaml"
    
  3. 클러스터에 매니페스트를 적용합니다.

    kubectl apply -f  extras/postgres-hpa/loadgenerator.yaml
    

부하 분산기에서 초당 한 명씩 최대 250명까지 사용자 추가가 시작됩니다.

부하 시뮬레이션

이 섹션에서는 부하 생성기를 사용하여 트래픽 급증을 시뮬레이션하고 시간에 따라 부하 증가를 수용하기 위해 복제본 수 및 노드 수 확장을 관찰합니다. 그런 후 테스트를 종료하고 응답에서 복제본 및 노드 수 축소를 관찰합니다.

  1. 부하 생성기 웹 인터페이스를 로컬로 노출합니다.

    kubectl port-forward svc/loadgenerator 8080
    

    오류 메시지가 표시되면 포드가 실행될 때 다시 시도합니다.

  2. 브라우저에서 부하 생성기 웹 인터페이스를 엽니다.

    • 로컬 셸을 사용하는 경우 브라우저를 열고 http://127.0.0.1:8080으로 이동합니다.
    • Cloud Shell을 사용하는 경우 웹 미리보기를 클릭한 후 포트 8080에서 미리보기를 클릭합니다.
  3. 차트 탭을 클릭하여 시간별 성능을 관측합니다.

  4. 새 터미널 창을 열고 수평형 포드 자동 확장 처리의 복제본 수를 관찰합니다.

    kubectl get hpa -w
    

    부하가 증가하면 복제본 수가 증가합니다. 확장에는 약 10분 정도 걸릴 수 있습니다.

    NAME                     REFERENCE                            TARGETS          MINPODS   MAXPODS   REPLICAS
    accounts-db-postgresql   StatefulSet/accounts-db-postgresql   8326m/15 (avg)   1         5         5
    contacts                 Deployment/contacts                  51%/70%          1         5         2
    frontend                 Deployment/frontend                  5200m/5 (avg)    5         25        13
    userservice              Deployment/userservice               71%/60%          5         50        17
    
  5. 다른 터미널 창을 열고 클러스터에서 노드 수를 확인합니다.

    gcloud container clusters list \
        --filter='name=bank-of-anthos' \
        --format='table(name, currentMasterVersion, currentNodeVersion, currentNodeCount)' \
        --region="us-central1"
    
  6. 새로운 복제본을 수용하기 위해 3개 노드의 시작 수량에서 증가하는 노드 수입니다.

  7. 부하 생성기 인터페이스를 열고 중지를 클릭하여 테스트를 종료합니다.

  8. 복제본 수와 노드 수를 다시 확인하고 부하 감소에 따른 숫자 감소를 확인합니다. Kubernetes HorizontalPodAutoscaler 리소스의 복제본에 대한 기본 안정화 기간이 5분이기 때문에 축소하는 데 시간이 약간 걸릴 수 있습니다. 자세한 내용은 안정화 기간을 참조하세요.

삭제

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

개별 리소스 삭제

Google Cloud는 사용자가 만든 Kubernetes 객체를 기반으로 부하 분산기와 같은 리소스를 만듭니다. 이 튜토리얼에서 모든 리소스를 삭제하려면 다음을 수행합니다.

  1. 샘플 Kubernetes 리소스를 삭제합니다.

    kubectl delete \
        -f extras/postgres-hpa/loadgenerator.yaml \
        -f extras/postgres-hpa/hpa \
        -f extras/postgres-hpa/kubernetes-manifests \
        -f extras/jwt/jwt-secret.yaml \
        -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter.yaml
    
  2. PostgreSQL 데이터베이스를 삭제합니다.

    helm uninstall accounts-db
    kubectl delete pvc -l "app.kubernetes.io/instance=accounts-db"
    kubectl delete configmaps initdb
    
  3. GKE 클러스터를 및 IAM 서비스 계정을 삭제합니다.

    gcloud iam service-accounts delete "bank-of-anthos@PROJECT_ID.iam.gserviceaccount.com" --quiet
    gcloud container clusters delete "bank-of-anthos" --region="us-central1" --quiet
    

프로젝트 삭제

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

    gcloud projects delete PROJECT_ID

다음 단계