스테이트풀(Stateful) 워크로드를 실행하는 GKE 클러스터 업그레이드

이 가이드에서는 스테이트풀(Stateful) 애플리케이션 생성 및 애플리케이션을 실행하는 Google Kubernetes Engine(GKE) 클러스터 업그레이드를 위한 권장사항을 제공합니다. 이 가이드에서는 Redis 애플리케이션을 배포하는 예시를 제공하지만 GKE에 배포된 다른 유형의 스테이트풀(Stateful) 애플리케이션에도 동일한 개념이 적용됩니다.

용어

이 가이드에서 사용하는 용어:

  • Redis는 데이터베이스, 캐시, 메시지 브로커로 사용되는 오픈소스(BSD 라이선스) 인메모리 데이터 구조 저장소입니다.
  • Redis 클러스터는 고가용성을 제공하는 Redis의 분산 구현입니다. Redis 클러스터는 리더 노드와 팔로워 노드로 구성됩니다.
  • 스테이트풀(Stateful) 애플리케이션은 실행될 때마다 상태 정보를 기억할 수 있습니다. Redis는 스테이트풀(Stateful) 애플리케이션의 인기 메모리 내 데이터베이스입니다.

목표

이 가이드는 다음 과정을 다룹니다.

  • GKE에서 3개의 GKE 노드 위에 3개의 리더와 3개의 팔로워가 있는 Redis 클러스터를 만듭니다.
  • Redis 클라이언트 애플리케이션을 배포합니다. 애플리케이션에서 웹사이트에 대한 요청 수를 계산합니다.
  • 일시 급증 업그레이드로 클러스터를 업그레이드합니다.
  • 애플리케이션의 워크로드 중단과 상태 중단을 테스트합니다.

다음 다이어그램에서는 이러한 목표를 완료하여 생성하는 클러스터 아키텍처의 개요를 보여줍니다.

아키텍처 다이어그램

비용

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

  • GKE

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

시작하기 전에

다음 단계에 따라 Kubernetes Engine API를 사용 설정합니다.
  1. Google Cloud Console에서 Kubernetes Engine 페이지로 이동합니다.
  2. 프로젝트를 만들거나 선택합니다.
  3. API 및 관련 서비스가 사용 설정될 때까지 기다립니다. 몇 분 정도 걸릴 수 있습니다.
  4. Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.

이 가이드에 사용된 다음 명령줄 도구를 설치합니다.

  • gcloud는 Kubernetes Engine 클러스터를 만들고 삭제하는 데 사용됩니다. gcloudGoogle Cloud SDK에 포함되어 있습니다.
  • kubectl은 Kubernetes Engine에서 사용되는 클러스터 조정 시스템인 Kubernetes를 관리하는 데 사용됩니다. gcloud를 사용하여 kubectl을 설치할 수 있습니다.
    gcloud components install kubectl

GKE 클러스터 만들기

이 섹션에서는 노드가 3개인 GKE에 클러스터를 만들고 클러스터가 작동하는지 확인합니다.

gcloud 명령줄 도구의 기본값 설정

gcloud 명령줄 도구에서 프로젝트 IDCompute Engine 영역 옵션을 입력하는 시간을 절약하려면 다음 기본값을 설정합니다.

gcloud config set project PROJECT-ID
gcloud config set compute/zone COMPUTE-ZONE

GKE 클러스터 만들기

GKE 클러스터를 만들려면 다음 안내를 따르세요.

  1. 노드가 3개인 redis-test이라는 클러스터를 만듭니다.

    gcloud container clusters create redis-test \
        --num-nodes=3
    

    클러스터가 생성되면 다음 예시와 비슷한 출력이 표시됩니다.

    NAME        LOCATION      MASTER_VERSION  MASTER_IP     MACHINE_TYPE   NODE_VERSION    NUM_NODES  STATUS
    redis-test  COMPUTE-ZONE  1.15.12-gke.20  35.232.77.38  n1-standard-1  1.15.12-gke.20  3          RUNNING
    
  2. 클러스터와 통신하도록 kubectl을 구성합니다.

    gcloud container clusters get-credentials redis-test
    
  3. 클러스터가 실행 중인지 확인합니다.

    kubectl get nodes
    

    다음과 비슷한 출력이 표시됩니다.

    NAME                                        STATUS   ROLES    AGE     VERSION
    gke-redis-test-default-pool-c4e4225c-mw3w   Ready    <none>   2m1s    v1.15.12-gke.20
    gke-redis-test-default-pool-c4e4225c-pv51   Ready    <none>   2m1s    v1.15.12-gke.20
    gke-redis-test-default-pool-c4e4225c-whl5   Ready    <none>   2m1s    v1.15.12-gke.20
    

GKE에 Redis 클러스터 만들기

이 섹션에서는 ConfigMap, StatefulSet, 헤드리스 서비스를 만들어 이전 섹션에서 만든 GKE 클러스터 위에 Redis 클러스터를 만듭니다.

  1. 샘플 매니페스트를 클론합니다.

    git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
    cd kubernetes-engine-samples/hello-app-redis/manifests
    
  2. redis-configmap.yaml이라는 ConfigMap이 Redis 구성을 저장합니다.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: redis-cluster
    data:
      redis.conf:  |+
        cluster-enabled yes
        cluster-node-timeout 15000
        cluster-config-file /data/nodes.conf
        appendonly yes
        protected-mode no
        dir /data
        port 6379
    
    

    이 ConfigMap의 Redis 매개변수에 대해 자세히 알아보려면 Redis 클러스터 가이드의 Redis 클러스터 구성 매개변수 섹션을 참조하세요.

  3. 다음 명령어를 실행하여 ConfigMap을 배포합니다.

    kubectl apply -f redis-configmap.yaml
    
  4. redis-cluster.yaml이라는 Statefulset에 다음과 같은 주요 필드가 있습니다.

    • replicas 필드는 6으로 설정됩니다. 이렇게 하면 모든 GKE 노드에 Redis 리더 3개과 Redis 팔로워 3개을 위한 2개의 pod가 있습니다.
    • volumeClaimTemplates 필드는 PersistentVolumes를 사용하여 안정적인 스토리지를 제공합니다.
    • affinity 필드는 Kubernetes 노드에 pod를 분산시키기 위해 pod 안티어피니티 규칙을 만듭니다.
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: redis
    spec:
      serviceName: "redis-service"
      replicas: 6
      selector:
        matchLabels:
          app: redis
      template:
        metadata:
          labels:
            app: redis
            appCluster: redis-cluster
        spec:
          terminationGracePeriodSeconds: 20
          affinity:
            podAntiAffinity:
              preferredDuringSchedulingIgnoredDuringExecution:
              - weight: 100
                podAffinityTerm:
                  labelSelector:
                    matchExpressions:
                    - key: app
                      operator: In
                      values:
                      - redis
                  topologyKey: kubernetes.io/hostname
          containers:
          - name: redis
            image: "redis"
            command:
              - "redis-server"
            args:
              - "/conf/redis.conf"
              - "--protected-mode"
              - "no"
            resources:
              requests:
                cpu: "100m"
                memory: "100Mi"
            ports:
                - name: redis
                  containerPort: 6379
                  protocol: "TCP"
                - name: cluster
                  containerPort: 16379
                  protocol: "TCP"
            volumeMounts:
            - name: conf
              mountPath: /conf
              readOnly: false
            - name: data
              mountPath: /data
              readOnly: false
          volumes:
          - name: conf
            configMap:
              name: redis-cluster
              defaultMode: 0755
      volumeClaimTemplates:
      - metadata:
          name: data
        spec:
          accessModes: [ "ReadWriteOnce" ]
          resources:
            requests:
              storage: 1Gi
    
    
  5. 다음 명령어를 실행하여 StatefulSet를 배포합니다.

    kubectl apply -f redis-cluster.yaml
    
  6. redis-service.yaml이라는 헤드리스 서비스는 Redis 노드의 연결을 위한 것입니다. 헤드리스 서비스를 만들려면 clusterIP 필드를 None으로 설정합니다.

    apiVersion: v1
    kind: Service
    metadata:
      name: redis-cluster
    spec:
      clusterIP: None
      ports:
      - name: redis-port
        port: 6379
        protocol: TCP
        targetPort: 6379
      selector:
        app: redis
        appCluster: redis-cluster
      sessionAffinity: None
      type: ClusterIP
    
    
  7. 다음 명령어를 실행하여 서비스를 배포합니다.

    kubectl apply -f redis-service.yaml
    
  8. 약 2분 동안 기다린 후 다음 명령어를 사용하여 모든 Pod가 실행 중인지 확인합니다.

    kubectl get pods
    

    다음과 비슷한 출력이 표시됩니다.

    NAME      READY   STATUS              RESTARTS   AGE
    redis-0   1/1     Running             0          2m29s
    redis-1   1/1     Running             0          2m8s
    redis-2   1/1     Running             0          107s
    redis-3   1/1     Running             0          85s
    redis-4   1/1     Running             0          54s
    redis-5   1/1     Running             0          23s
    
  9. 다음 명령어를 실행하여 영구 볼륨이 생성되었는지 확인합니다.

    kubectl get pv
    

    다음과 비슷한 출력이 표시됩니다.

    NAME       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                  STORAGECLASS   REASON   AGE
    pvc-HASH   1Gi        RWO            Delete           Bound    default/data-redis-5   standard                75s
    pvc-HASH   1Gi        RWO            Delete           Bound    default/data-redis-1   standard                2m59s
    pvc-HASH   1Gi        RWO            Delete           Bound    default/data-redis-3   standard                2m16s
    pvc-HASH   1Gi        RWO            Delete           Bound    default/data-redis-2   standard                2m38s
    pvc-HASH   1Gi        RWO            Delete           Bound    default/data-redis-0   standard                3m20s
    pvc-HASH   1Gi        RWO            Delete           Bound    default/data-redis-4   standard                104s
    

    이 출력에서 HASH는 각 영구 볼륨 이름에 연결된 해시를 나타냅니다.

Redis 클러스터에 역할 할당

구성이 완료되면 Redis 클러스터에 역할을 할당합니다.

역할을 할당하려면 다음 안내를 따르세요.

  1. 처음 3개의 Redis 노드를 리더로 설정하고 마지막 3개의 Redis 노드를 팔로워로 설정합니다.

    1. Pod IP 주소를 검색하고 사본을 만듭니다.

      kubectl get pods -l app=redis -o jsonpath='{range.items[*]}{.status.podIP} '
      
    2. 각 Pod IP 주소를 다음 명령어에 붙여 넣고 메시지가 표시되면 yes를 입력하여 리더 및 팔로워 역할을 할당합니다.

      kubectl exec -it redis-0 -- redis-cli --cluster create --cluster-replicas 1 \
      POD-IP-1:6379 POD-IP-2:6379 POD-IP-3:6379 \
      POD-IP-4:6379 POD-IP-5:6379 POD-IP-6:6379
      
  2. Redis 클러스터가 실행 중인지 확인합니다.

    kubectl exec -it redis-0 -- redis-cli cluster info
    

    다음과 비슷한 출력이 표시됩니다.

    cluster_state:ok
    # ...other output...
    
  3. Redis 노드에 로그인하여 역할을 확인합니다. 예를 들어 redis-0에 리더 역할이 있는지 확인하려면 다음 명령어를 실행합니다.

    kubectl exec -it redis-0 -- redis-cli role
    

    다음과 비슷한 출력이 표시됩니다.

    1) "master"
    2) (integer) 574
    3) 1) 1) "10.28.2.3"
           2) "6379"
           3) "574"
    

Redis 클라이언트 애플리케이션 만들기

이 섹션에서는 Redis를 캐시 데이터베이스로 사용하고, 수신하는 요청 수를 계산하고, 이 숫자를 웹사이트에 표시하는 hello-app-redis라는 애플리케이션을 만듭니다. Redis 서비스가 작동하면 숫자가 계속 증가합니다.

Google Cloud Console의 gcr.io/google-samples/hello-app-redis:1.0에서 직접 이미지를 다운로드할 수 있습니다.

이미지를 가져오려면 다음 명령어를 실행합니다.

docker pull gcr.io/google-samples/hello-app-redis:1.0

이미지 빌드에 대한 자세한 내용은 컨테이너 이미지 빌드를 참조하세요.

GKE에 Redis 클라이언트 애플리케이션 배포

생성된 GKE 클러스터에 애플리케이션을 배포하려면 애플리케이션을 정의하는 배포가 필요합니다.

배포를 만들려면 다음 단계를 완료하세요.

  1. app-deployment.yaml 파일에 애플리케이션 세부정보가 들어 있습니다.

    # Copyright 2020 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: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: hello-web
      name: hello-web
      namespace: default
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: hello-web
      template:
        metadata:
          labels:
            app: hello-web
        spec:
          # Pod anti affinity config START
          affinity:
            podAntiAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
              - labelSelector:
                  matchExpressions:
                  - key: app
                    operator: In
                    values:
                    - hello-web
                topologyKey: kubernetes.io/hostname
          # Pod anti affinity config END
          containers:
          - image: gcr.io/google-samples/hello-app-redis:1.0  # change to the image name you built
            name: hello-app
            # Readiness probe config START
            readinessProbe:
              failureThreshold: 1
              httpGet:
                path: /healthz
                port: 8080
                scheme: HTTP
              initialDelaySeconds: 1
              periodSeconds: 1
              successThreshold: 1
              timeoutSeconds: 1
    

    이 배포에서 사용되는 프로브 및 pod 어피니티 규칙에 대해 자세히 알아보려면 GKE 권장사항: 가용성이 높은 클러스터 설계 및 빌드를 참조하세요.

  2. 다음 명령어를 실행하여 배포를 적용합니다.

    kubectl apply -f app-deployment.yaml
    

    app-deployment.yaml이 있는 동일한 디렉터리에서 이 명령어를 실행해야 합니다.

  3. 부하 분산기를 통해 애플리케이션을 노출합니다.

    kubectl expose deployment hello-web \
        --type=LoadBalancer \
        --port 80 \
        --target-port 8080
    
  4. 약 1분간 기다린 후 다음 명령어를 실행하여 애플리케이션의 외부 IP 주소를 검색합니다.

    kubectl get service
    

    출력에서 hello-web's EXTERNAL-IP 열에 나열된 값을 복사합니다.

    NAME             TYPE           CLUSTER-IP    EXTERNAL-IP    PORT(S)              AGE
    hello-web        LoadBalancer   10.13.10.55   EXTERNAL_IP   80:30703/TCP         166m
    
  5. 웹브라우저에 EXTERNAL_IP를 붙여 넣어 애플리케이션이 작동하는지 확인합니다. 다음과 비슷한 출력이 표시됩니다.

    I have been hit [1] times since deployment!
    

    방문 번호를 기록합니다. 애플리케이션 중단 테스트 섹션에서 이 방문 번호를 사용해야 합니다.

  6. 방금 복사한 EXTERNAL_IP의 변수를 설정합니다. 다음 섹션에서 애플리케이션을 테스트할 스크립트를 만들 때 이 값을 사용합니다.

    export IP=EXTERNAL_IP
    

GKE 클러스터 업그레이드 및 워크로드 중단 테스트

다음 섹션에서는 GKE 클러스터를 업그레이드하고 만든 스크립트를 사용하여 무슨 일이 일어나는지 관찰합니다.

애플리케이션 테스트

이 섹션에서는 요청을 애플리케이션으로 전송하는 스크립트와 요청의 성공률을 측정하는 스크립트, 이렇게 2개의 스크립트를 사용합니다. 이 스크립트를 사용하여 클러스터를 업그레이드할 때 발생하는 상황을 측정합니다.

스크립트를 만들려면 다음 안내를 따르세요.

  1. 스크립트가 포함된 디렉터리로 변경합니다.

    cd
    cd kubernetes-engine-samples/hello-app-redis/scripts
    
  2. generate_load.sh라는 스크립트는 애플리케이션에 초당 쿼리 수(QPS) 요청을 전송합니다. 이 스크립트는 HTTP 응답 코드를 현재 디렉터리에 output 파일로 저장합니다. output 값은 다음 단계에서 만드는 스크립트에 사용됩니다.

    # Copyright 2020 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.
    
    #!/bin/bash
    # Usage: generate_load.sh <IP> <QPS>_
    
    IP=$1
    QPS=$2
    
    while true
      do for N in $(seq 1 $QPS)
        do curl -I -m 5 -s -w "%{http_code}\n" -o /dev/null http://${IP}/ >> output &
        done
      sleep 1
    done
    
  3. print_error_rate.sh라는 두 번째 스크립트가 generate_load.sh에 의해 생성된 출력을 기반으로 성공률을 계산합니다.

    # Copyright 2020 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.
    
    #!/bin/bash
    # Usage: watch ./print_error_rate.sh
    
    TOTAL=$(cat output | wc -l);
    SUCCESS=$(grep "200" output |  wc -l);
    ERROR1=$(grep "000" output |  wc -l)
    ERROR2=$(grep "503" output |  wc -l)
    ERROR3=$(grep "500" output |  wc -l)
    SUCCESS_RATE=$(($SUCCESS * 100 / TOTAL))
    ERROR_RATE=$(($ERROR1 * 100 / TOTAL))
    ERROR_RATE_2=$(($ERROR2 * 100 / TOTAL))
    ERROR_RATE_3=$(($ERROR3 * 100 / TOTAL))
    echo "Success rate: $SUCCESS/$TOTAL (${SUCCESS_RATE}%)"
    echo "App network Error rate: $ERROR1/$TOTAL (${ERROR_RATE}%)"
    echo "Resource Error rate: $ERROR2/$TOTAL (${ERROR_RATE_2}%)"
    echo "Redis Error rate: $ERROR3/$TOTAL (${ERROR_RATE_3}%)"
    
  4. 스크립트를 실행할 권한을 자신에게 부여합니다.

    chmod u+x generate_load.sh print_error_rate.sh
    
  5. QPS 수에 대한 변수를 설정합니다. 이 값은 EXTERNAL_IP에 대해 설정하는 변수와 마찬가지로 generate_load.sh 스크립트에 사용됩니다. 값을 40으로 설정하는 것이 좋습니다.

    export QPS=40
    
  6. generate_load.sh 스크립트를 실행하여 QPS 전송을 시작합니다.

    ./generate_load.sh $IP $QPS 2>&1
    
  7. generate_load.sh 스크립트를 실행 중 상태로 두고 새 터미널을 엽니다. 새 터미널에서 print_error_rate.sh 스크립트를 실행하여 오류율을 확인합니다.

    watch ./print_error_rate.sh
    

    QPS가 생성되면 100% 성공률과 0% 오류율이 표시됩니다.

  8. 두 스크립트 모두 실행 중 상태로 두고 다음 섹션에 대비하여 세 번째 터미널을 엽니다.

클러스터 업그레이드

이 섹션에서는 워크로드를 업그레이드합니다.

  1. 방금 연 터미널에서 일시 급증 업그레이드를 사용하여 업그레이드 설정을 정의합니다.

    gcloud container node-pools update default-pool \
      --max-surge-upgrade=1 \
      --max-unavailable-upgrade=0 \
      --cluster=redis-test
    

    이 구성(maxSurge=1maxUnavailable=0)을 사용하면 업그레이드 중 노드 풀에 일시 급증 노드 1개만 추가할 수 있으므로 한 번에 노드 한 개만 업그레이드할 수 있습니다. 이 설정은 보수적으로 진행하면서 업그레이드 중 Pod 재시작 속도를 높입니다.

  2. redis-test 클러스터가 사용 중인 GKE 버전을 확인합니다.

    V=$(gcloud container clusters describe redis-test | grep "version:" | sed "s/version: //")
    echo $V
    

    다음 예시와 비슷한 출력이 표시됩니다. 1.15.12-gke.20.

  3. 사용 가능한 Kubernetes 버전 목록을 가져옵니다.

    gcloud container get-server-config
    
  4. 버전 목록에서 validMasterVersions: 섹션을 찾고 이전 단계에서 검색한 redis-cluster 버전을 찾습니다. 버전 편향을 방지하려면 목록에서 redis-cluster 버전 바로 위에 있는 버전을 복사합니다.

  5. 클러스터의 제어 영역을 선택한 버전으로 업그레이드하고 메시지가 표시되면 y를 입력합니다.

    gcloud container clusters upgrade redis-test \
        --master \
        --cluster-version VERSION
    

    VERSION을 이전 단계의 목록에서 선택한 버전으로 바꿉니다.

    제어 영역 업그레이드에는 몇 분 정도 걸립니다.

  6. 클러스터 노드를 선택한 버전으로 업그레이드하고 메시지가 표시되면 y를 입력합니다.

    gcloud container clusters upgrade redis-test \
        --cluster-version=VERSION \
        --node-pool=default-pool
    

    VERSION을 목록에서 선택한 버전으로 바꿉니다.

워크로드 중단 테스트

이 섹션에서는 애플리케이션의 상태와 워크로드의 중단 방식을 테스트합니다.

  1. ./print_error_rate.sh를 실행하는 터미널 창으로 돌아가서 업그레이드 중에 성공률이 어떻게 바뀌는지 관찰합니다. 업그레이드를 위해 노드가 중지됨에 따라 성공률이 약간 감소하고 앱 네트워크 오류율이 약간 증가합니다.

    Success rate 필드에는 성공한 웹사이트 방문 수가 표시됩니다. 이 값을 기록해 둡니다.

  2. 관련 터미널에 CTRL+C를 입력하여 두 스크립트 실행을 중지합니다.

  3. IP 주소(GKE에 배포 섹션에서 복사한 EXTERNAL_IP)를 브라우저에 입력하여 애플리케이션의 웹사이트로 돌아갑니다.

  4. 애플리케이션의 방문 번호를 확인합니다. 표시되는 숫자는 다음과 같아야 합니다.

    ORIGINAL_VISIT_NUMBER + SUCCESSFUL_VISIT_NUMBER

    여기서 ORIGINAL_VISIT_NUMBERGKE에 배포의 마지막 단계에서 기록한 번호이고, SUCCESSFUL_VISIT_NUMBER는 이 섹션의 첫 번째 단계에서 기록한 값입니다.

삭제

스테이트풀(Stateful) 워크로드 업그레이드 가이드를 완료한 후에는 할당량을 차지하지 않고 이후에 요금이 청구되지 않도록 Google Cloud에서 만든 리소스를 삭제할 수 있습니다. 다음 섹션에서는 리소스를 삭제하거나 사용 중지하는 방법을 설명합니다.

프로젝트 삭제

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

프로젝트를 삭제하려면 다음 안내를 따르세요.

  1. Cloud Console에서 리소스 관리 페이지로 이동합니다.

    리소스 관리로 이동

  2. 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
  3. 대화상자에서 프로젝트 ID를 입력한 후 종료를 클릭하여 프로젝트를 삭제합니다.

클러스터 삭제

이 가이드에서 만든 클러스터를 삭제하려면 다음 명령어를 실행합니다.

gcloud container clusters delete redis-test

다음 단계

  • Google Cloud에 대한 참조 아키텍처, 다이어그램, 가이드, 권장사항 살펴보기 Cloud 아키텍처 센터 살펴보기