측정항목을 기준으로 포드 자동 확장 최적화


이 튜토리얼에서는 Cloud Monitoring에서 제공되는 측정항목을 기반으로 Google Kubernetes Engine(GKE) 워크로드를 자동으로 확장하는 방법을 보여 줍니다.

이 튜토리얼에서는 4가지 측정항목 중 하나를 기준으로 자동 확장을 설정할 수 있습니다.

CPU

CPU 사용률

노드 간 CPU 사용률을 기준으로 확장합니다. 이를 통해 비용 효율적으로 CPU 리소스 사용률을 극대화할 수 있습니다. 그러나 CPU 사용량은 후행 측정항목이므로 확장이 진행되는 동안 사용자에게 지연 시간이 발생할 수 있습니다.

Pub/Sub

Pub/Sub 백로그

Pub/Sub 구독에 남아 있는 확인되지 않은 메시지 수를 기준으로 확장합니다. 이렇게 하면 문제가 발생하기 전에 지연 시간을 효과적으로 줄일 수 있지만 CPU 사용률에 따라 자동 확장보다 리소스를 상대적으로 많이 사용할 수 있습니다.

커스텀 측정항목

커스텀 Cloud Monitoring 측정항목

Cloud Monitoring 클라이언트 라이브러리에서 내보낸 커스텀 사용자 정의 측정항목을 기준으로 확장합니다. 자세한 내용은 Cloud Monitoring 문서의 커스텀 측정항목 만들기를 참조하세요.

커스텀 Prometheus

커스텀 Prometheus 측정항목

Prometheus 형식으로 내보낸 커스텀 사용자 정의 측정항목을 기준으로 확장합니다. Prometheus 측정항목은 Gauge 유형이어야 하며, custom.googleapis.com 프리픽스를 포함해서는 안됩니다.

자동 확장은 기본적으로 비용과 지연 시간 사이에서 허용되는 균형을 찾는 것입니다. 이러한 측정항목 및 기타의 조합을 실험하여 자신에게 맞는 정책을 찾을 수 있습니다.

목표

이 튜토리얼에서는 다음 태스크를 다룹니다.

  1. 커스텀 측정항목 어댑터 배포 방법
  2. 애플리케이션 코드 내에서 측정항목을 내보내는 방법
  3. Cloud Monitoring 인터페이스에서 측정항목을 보는 방법
  4. HorizontalPodAutoscaler(HPA) 리소스를 배포하여 Cloud Monitoring 측정항목을 기준으로 애플리케이션을 확장하는 방법

비용

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

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

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

시작하기 전에

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

이 튜토리얼에 사용되는 gcloud, kubectl 명령줄 도구가 사전 설치되어 있는 Cloud Shell을 사용하여 이 튜토리얼을 따르면 됩니다. Cloud Shell을 사용하는 경우 이러한 명령줄 도구를 워크스테이션에 설치할 필요가 없습니다.

Cloud Shell을 사용하려면 다음 안내를 따르세요.

  1. Google Cloud 콘솔로 이동합니다.
  2. Google Cloud 콘솔 창 상단의 Cloud Shell 활성화 셸 활성화 버튼 버튼을 클릭합니다.

    Google Cloud 콘솔 하단에 있는 새 프레임 내에 Cloud Shell 세션이 열리면서 명령줄 프롬프트가 표시됩니다.

    Cloud Shell 세션

환경 설정

  1. Google Cloud CLI의 기본 영역을 설정합니다.

    gcloud config set compute/zone zone
    

    다음을 바꿉니다.

    • zone: 가장 가까운 영역을 선택합니다. 자세한 내용은 리전 및 영역을 참조하세요.
  2. PROJECT_ID 환경 변수를 Google Cloud 프로젝트 ID(project-id)로 설정합니다.

    export PROJECT_ID=project-id
    
  3. Google Cloud CLI의 기본 영역을 설정합니다.

    gcloud config set project $PROJECT_ID
    
  4. GKE 클러스터를 만듭니다.

    gcloud container clusters create metrics-autoscaling
    

커스텀 측정항목 어댑터 배포

커스텀 측정항목 어댑터를 사용하면 클러스터에서 Cloud Monitoring으로 측정항목을 보내고 받을 수 있습니다.

CPU

해당 없음: 수평형 포드 자동 확장 처리는 기본적으로 CPU 사용률에 따라 확장될 수 있으므로 커스텀 측정항목 어댑터가 필요하지 않습니다.

Pub/Sub

사용자에게 필수 승인 역할을 만들 수 있는 권한을 부여합니다.

kubectl create clusterrolebinding cluster-admin-binding \
    --clusterrole cluster-admin --user "$(gcloud config get-value account)"

클러스터에 새 리소스 모델 어댑터를 배포합니다.

kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter_new_resource_model.yaml

커스텀 측정항목

사용자에게 필수 승인 역할을 만들 수 있는 권한을 부여합니다.

kubectl create clusterrolebinding cluster-admin-binding \
    --clusterrole cluster-admin --user "$(gcloud config get-value account)"

클러스터에 리소스 모델 어댑터를 배포합니다.

kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter_new_resource_model.yaml

커스텀 Prometheus

사용자에게 필수 승인 역할을 만들 수 있는 권한을 부여합니다.

kubectl create clusterrolebinding cluster-admin-binding \
    --clusterrole cluster-admin --user "$(gcloud config get-value account)"

클러스터에 기존 리소스 모델 어댑터를 배포합니다.

kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter.yaml

측정항목으로 애플리케이션 배포

이 튜토리얼의 애플리케이션 코드가 포함된 저장소를 다운로드합니다.

CPU

git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.git
cd kubernetes-engine-samples/quickstarts/hello-app

Pub/Sub

git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.git
cd kubernetes-engine-samples/databases/cloud-pubsub

커스텀 측정항목

git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.git
cd kubernetes-engine-samples/observability/custom-metrics-autoscaling/direct-to-sd

커스텀 Prometheus

git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.git
cd kubernetes-engine-samples/observability/custom-metrics-autoscaling/prometheus-to-sd

저장소에는 Cloud Monitoring으로 측정항목을 내보내는 코드가 포함되어 있습니다.

CPU

이 애플리케이션은 8080 포트의 모든 웹 요청에 대해 'Hello, world!'라고 응답합니다. Compute Engine CPU 측정항목은 Cloud Monitoring에서 자동으로 수집됩니다.

package main

import (
	"fmt"
	"log"
	"net/http"
	"os"
)

func main() {
	// register hello function to handle all requests
	mux := http.NewServeMux()
	mux.HandleFunc("/", hello)

	// use PORT environment variable, or default to 8080
	port := os.Getenv("PORT")
	if port == "" {
		port = "8080"
	}

	// start the web server on port and accept requests
	log.Printf("Server listening on port %s", port)
	log.Fatal(http.ListenAndServe(":"+port, mux))
}

// hello responds to the request with a plain-text "Hello, world" message.
func hello(w http.ResponseWriter, r *http.Request) {
	log.Printf("Serving request: %s", r.URL.Path)
	host, _ := os.Hostname()
	fmt.Fprintf(w, "Hello, world!\n")
	fmt.Fprintf(w, "Version: 1.0.0\n")
	fmt.Fprintf(w, "Hostname: %s\n", host)
}

Pub/Sub

이 애플리케이션은 새 메시지의 Pub/Sub 구독을 폴링하여 메시지가 도착하면 이를 확인합니다. Pub/Sub 구독 측정항목은 Cloud Monitoring에서 자동으로 수집됩니다.

from google import auth
from google.cloud import pubsub_v1

def main():
    """Continuously pull messages from subsciption"""

    # read default project ID
    _, project_id = auth.default()
    subscription_id = 'echo-read'

    subscriber = pubsub_v1.SubscriberClient()
    subscription_path = subscriber.subscription_path(
        project_id, subscription_id)

    def callback(message: pubsub_v1.subscriber.message.Message) -> None:
        """Process received message"""
        print(f"Received message: ID={message.message_id} Data={message.data}")
        print(f"[{datetime.datetime.now()}] Processing: {message.message_id}")
        time.sleep(3)
        print(f"[{datetime.datetime.now()}] Processed: {message.message_id}")
        message.ack()

    streaming_pull_future = subscriber.subscribe(
        subscription_path, callback=callback)
    print(f"Pulling messages from {subscription_path}...")

    with subscriber:
        try:
            streaming_pull_future.result()
        except Exception as e:
            print(e)

커스텀 측정항목

이 애플리케이션은 Cloud Monitoring 클라이언트 라이브러리를 사용하여 상수 값 측정항목을 내보냅니다.

func exportMetric(stackdriverService *monitoring.Service, metricName string,
	metricValue int64, metricLabels map[string]string, monitoredResource string, resourceLabels map[string]string) error {
	dataPoint := &monitoring.Point{
		Interval: &monitoring.TimeInterval{
			EndTime: time.Now().Format(time.RFC3339),
		},
		Value: &monitoring.TypedValue{
			Int64Value: &metricValue,
		},
	}
	// Write time series data.
	request := &monitoring.CreateTimeSeriesRequest{
		TimeSeries: []*monitoring.TimeSeries{
			{
				Metric: &monitoring.Metric{
					Type:   "custom.googleapis.com/" + metricName,
					Labels: metricLabels,
				},
				Resource: &monitoring.MonitoredResource{
					Type:   monitoredResource,
					Labels: resourceLabels,
				},
				Points: []*monitoring.Point{
					dataPoint,
				},
			},
		},
	}
	projectName := fmt.Sprintf("projects/%s", resourceLabels["project_id"])
	_, err := stackdriverService.Projects.TimeSeries.Create(projectName, request).Do()
	return err
}

커스텀 Prometheus

이 애플리케이션은 Prometheus 형식을 사용하여 상수 값 측정항목을 내보냅니다.

metric := prometheus.NewGauge(
	prometheus.GaugeOpts{
		Name: *metricName,
		Help: "Custom metric",
	},
)
prometheus.MustRegister(metric)
metric.Set(float64(*metricValue))

http.Handle("/metrics", promhttp.Handler())
log.Printf("Starting to listen on :%d", *port)
err := http.ListenAndServe(fmt.Sprintf(":%d", *port), nil)

저장소에는 애플리케이션을 클러스터에 배포하기 위한 Kubernetes 매니페스트도 포함됩니다.

CPU

apiVersion: apps/v1
kind: Deployment
metadata:
  name: helloweb
  labels:
    app: hello
spec:
  selector:
    matchLabels:
      app: hello
      tier: web
  template:
    metadata:
      labels:
        app: hello
        tier: web
    spec:
      containers:
      - name: hello-app
        image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
        ports:
        - containerPort: 8080
        resources:
          requests:
            cpu: 200m

Pub/Sub

apiVersion: apps/v1
kind: Deployment
metadata:
  name: pubsub
spec:
  selector:
    matchLabels:
      app: pubsub
  template:
    metadata:
      labels:
        app: pubsub
    spec:
      volumes:
      - name: google-cloud-key
        secret:
          secretName: pubsub-key
      containers:
      - name: subscriber
        image: us-docker.pkg.dev/google-samples/containers/gke/pubsub-sample:v2
        volumeMounts:
        - name: google-cloud-key
          mountPath: /var/secrets/google
        env:
        - name: GOOGLE_APPLICATION_CREDENTIALS
          value: /var/secrets/google/key.json

커스텀 측정항목

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    run: custom-metric-sd
  name: custom-metric-sd
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      run: custom-metric-sd
  template:
    metadata:
      labels:
        run: custom-metric-sd
    spec:
      containers:
      - command: ["./sd-dummy-exporter"]
        args:
        - --use-new-resource-model=true
        - --use-old-resource-model=false
        - --metric-name=custom-metric
        - --metric-value=40
        - --pod-name=$(POD_NAME)
        - --namespace=$(NAMESPACE)
        image: us-docker.pkg.dev/google-samples/containers/gke/sd-dummy-exporter:v0.3.0
        name: sd-dummy-exporter
        resources:
          requests:
            cpu: 100m
        env:
        # save Kubernetes metadata as environment variables for use in metrics
        - name: POD_NAME
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: metadata.name
        - name: NAMESPACE
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: metadata.namespace

커스텀 Prometheus

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    run: custom-metric-prometheus-sd
  name: custom-metric-prometheus-sd
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      run: custom-metric-prometheus-sd
  template:
    metadata:
      labels:
        run: custom-metric-prometheus-sd
    spec:
      containers:
      # sample container generating custom metrics
      - name: prometheus-dummy-exporter
        image: us-docker.pkg.dev/google-samples/containers/gke/prometheus-dummy-exporter:v0.2.0
        command: ["./prometheus-dummy-exporter"]
        args:
        - --metric-name=custom_prometheus
        - --metric-value=40
        - --port=8080
      # pre-built 'prometheus-to-sd' sidecar container to export prometheus
      # metrics to Stackdriver
      - name: prometheus-to-sd
        image: gcr.io/google-containers/prometheus-to-sd:v0.5.0
        command: ["/monitor"]
        args:
        - --source=:http://localhost:8080
        - --stackdriver-prefix=custom.googleapis.com
        - --pod-id=$(POD_ID)
        - --namespace-id=$(POD_NAMESPACE)
        env:
        # save Kubernetes metadata as environment variables for use in metrics
        - name: POD_ID
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: metadata.uid
        - name: POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace

애플리케이션을 클러스터에 배포합니다.

CPU

kubectl apply -f manifests/helloweb-deployment.yaml

Pub/Sub

프로젝트에서 Pub/Sub API를 사용 설정합니다.

gcloud services enable cloudresourcemanager.googleapis.com pubsub.googleapis.com

Pub/Sub 주제 및 구독을 만듭니다.

gcloud pubsub topics create echo
gcloud pubsub subscriptions create echo-read --topic=echo

Pub/Sub에 액세스할 수 있는 서비스 계정을 만듭니다.

gcloud iam service-accounts create autoscaling-pubsub-sa
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member "serviceAccount:autoscaling-pubsub-sa@$PROJECT_ID.iam.gserviceaccount.com" \
  --role "roles/pubsub.subscriber"

서비스 계정 키 파일을 다운로드합니다.

gcloud iam service-accounts keys create key.json \
  --iam-account autoscaling-pubsub-sa@$PROJECT_ID.iam.gserviceaccount.com

서비스 계정 키를 클러스터에 보안 비밀로 가져옵니다.

kubectl create secret generic pubsub-key --from-file=key.json=./key.json

애플리케이션을 클러스터에 배포합니다.

kubectl apply -f deployment/pubsub-with-secret.yaml

커스텀 측정항목

kubectl apply -f custom-metrics-sd.yaml

커스텀 Prometheus

kubectl apply -f custom-metrics-prometheus-sd.yaml

애플리케이션이 배포될 때까지 잠시 기다린 후 모든 포드가 Ready 상태에 도달합니다.

CPU

kubectl get pods

출력:

NAME                        READY   STATUS    RESTARTS   AGE
helloweb-7f7f7474fc-hzcdq   1/1     Running   0          10s

Pub/Sub

kubectl get pods

출력:

NAME                     READY   STATUS    RESTARTS   AGE
pubsub-8cd995d7c-bdhqz   1/1     Running   0          58s

커스텀 측정항목

kubectl get pods

출력:

NAME                                READY   STATUS    RESTARTS   AGE
custom-metric-sd-58dbf4ffc5-tm62v   1/1     Running   0          33s

커스텀 Prometheus

kubectl get pods

출력:

NAME                                           READY   STATUS    RESTARTS   AGE
custom-metric-prometheus-sd-697bf7c7d7-ns76p   2/2     Running   0          49s

Cloud Monitoring에서 측정항목 보기

애플리케이션이 실행되면 측정항목이 Cloud Monitoring에 기록됩니다.

측정항목 탐색기를 사용하여 모니터링 리소스의 측정항목을 보려면 다음을 수행합니다.

  1. Google Cloud 콘솔의 탐색 패널에서 Monitoring을 선택한 후 측정항목 탐색기를 선택합니다.

    측정항목 탐색기로 이동

  2. 측정항목 요소에서 측정항목 선택 메뉴를 확장한 후 리소스 유형 및 측정항목 유형을 선택합니다. 예를 들어 가상 머신의 CPU 사용률을 차트로 표시하려면 다음 안내를 따르세요.
    1. (선택사항) 메뉴의 옵션을 줄이려면 필터 표시줄에서 측정항목 이름의 일부를 입력합니다. 이 예시에서는 utilization을 입력합니다.
    2. 활성 리소스 메뉴에서 VM 인스턴스를 선택합니다.
    3. 활성 측정항목 카테고리 메뉴에서 인스턴스를 선택합니다.
    4. 활성 측정항목 메뉴에서 CPU 사용량을 선택한 후 적용을 클릭합니다.
  3. 표시되는 시계열을 필터링하려면 필터 요소를 사용합니다.

  4. 시계열을 조합하려면 집계 요소의 메뉴를 사용합니다. 예를 들어 VM의 CPU 사용률을 영역에 따라 표시하려면 첫 번째 메뉴를 평균으로, 두 번째 메뉴를 영역으로 설정합니다.

    집계 요소의 첫 번째 메뉴가 집계되지 않음으로 설정되면 모든 시계열이 표시됩니다. 집계 요소 기본 설정은 선택한 측정항목 유형에 따라 결정됩니다.

리소스 유형과 측정항목은 다음과 같습니다.

CPU

측정항목 탐색기

리소스 유형: gce_instance

측정항목: compute.googleapis.com/instance/cpu/utilization

Pub/Sub

측정항목 탐색기

리소스 유형: pubsub_subscription

측정항목: pubsub.googleapis.com/subscription/num_undelivered_messages

커스텀 측정항목

측정항목 탐색기

리소스 유형: k8s_pod

측정항목: custom.googleapis.com/custom-metric

커스텀 Prometheus

측정항목 탐색기

리소스 유형: gke_container

측정항목: custom.googleapis.com/custom_prometheus

HorizontalPodAutoscaler 객체 만들기

Cloud Monitoring에 측정항목이 표시되면 HorizontalPodAutoscaler를 배포하여 측정항목에 따라 배포 크기를 조절할 수 있습니다.

CPU

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: cpu
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: helloweb
  minReplicas: 1
  maxReplicas: 5
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 30

Pub/Sub

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: pubsub
spec:
  minReplicas: 1
  maxReplicas: 5
  metrics:
  - external:
      metric:
       name: pubsub.googleapis.com|subscription|num_undelivered_messages
       selector:
         matchLabels:
           resource.labels.subscription_id: echo-read
      target:
        type: AverageValue
        averageValue: 2
    type: External
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: pubsub

커스텀 측정항목

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: custom-metric-sd
  namespace: default
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: custom-metric-sd
  minReplicas: 1
  maxReplicas: 5
  metrics:
  - type: Pods
    pods:
      metric:
        name: custom-metric
      target:
        type: AverageValue
        averageValue: 20

커스텀 Prometheus

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: custom-prometheus-hpa
  namespace: default
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: custom-metric-prometheus-sd
  minReplicas: 1
  maxReplicas: 5
  metrics:
  - type: Pods
    pods:
      metric:
        name: custom_prometheus
      target:
        type: AverageValue
        averageValue: 20

HorizontalPodAutoscaler를 클러스터에 배포합니다.

CPU

kubectl apply -f manifests/helloweb-hpa.yaml

Pub/Sub

kubectl apply -f deployment/pubsub-hpa.yaml

커스텀 측정항목

kubectl apply -f custom-metrics-sd-hpa.yaml

커스텀 Prometheus

kubectl apply -f custom-metrics-prometheus-sd-hpa.yaml

부하 생성

일부 측정항목의 경우 자동 확장을 보기 위해 부하를 생성해야 할 수 있습니다.

CPU

helloweb 서버에 대한 요청 10,000개를 시뮬레이션합니다.

 kubectl exec -it deployments/helloweb -- /bin/sh -c \
     "for i in $(seq -s' ' 1 10000); do wget -q -O- localhost:8080; done"

Pub/Sub

Pub/Sub 주제에 메시지 200개를 게시합니다.

for i in {1..200}; do gcloud pubsub topics publish echo --message="Autoscaling #${i}"; done

커스텀 측정항목

해당 없음: 이 샘플에 사용된 코드는 커스텀 측정항목의 상수 값 40을 내보냅니다. HorizontalPodAutoscaler는 대상 값 20으로 설정되므로 배포를 자동으로 확장하려고 시도합니다.

커스텀 Prometheus

해당 없음: 이 샘플에 사용된 코드는 커스텀 측정항목의 상수 값 40을 내보냅니다. HorizontalPodAutoscaler는 대상 값 20으로 설정되므로 배포를 자동으로 확장하려고 시도합니다.

HorizontalPodAutoscaler 확장 관찰

다음 명령어를 실행하여 배포의 현재 복제본 수를 확인할 수 있습니다.

kubectl get deployments

측정항목이 전파될 때까지 약간의 시간이 지나면 배포에서 백로그를 처리할 수 있는 포드 5개가 생성됩니다.

다음 명령어를 실행하여 HorizontalPodAutoscaler의 상태와 최근 활동도 검사할 수 있습니다.

kubectl describe hpa

삭제

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

CPU

GKE 클러스터를 삭제합니다.

 gcloud container clusters delete metrics-autoscaling

Pub/Sub

  1. Pub/Sub 구독 및 주제를 삭제합니다.

    gcloud pubsub subscriptions delete echo-read
    gcloud pubsub topics delete echo
    
  2. GKE 클러스터를 삭제합니다.

    gcloud container clusters delete metrics-autoscaling
    

커스텀 측정항목

GKE 클러스터를 삭제합니다.

 gcloud container clusters delete metrics-autoscaling

커스텀 Prometheus

GKE 클러스터를 삭제합니다.

 gcloud container clusters delete metrics-autoscaling

다음 단계