이 페이지에서는 커스텀 컴퓨팅 클래스를 사용하여 워크로드의 특정 요구사항에 따라 Google Kubernetes Engine(GKE) 클러스터의 컴퓨팅 인프라 및 자동 확장 동작을 제어하는 방법을 보여줍니다. 이미 커스텀 컴퓨팅 클래스 개념에 익숙해야 합니다. 자세한 내용은 커스텀 컴퓨팅 클래스 정보를 참조하세요.
이 문서는 노드에 대해 자동 확장 프로필을 선언적으로 정의하려는 플랫폼 관리자와 특정 컴퓨팅 클래스에서 워크로드를 실행하려는 클러스터 운영자를 대상으로 합니다.
커스텀 컴퓨팅 클래스 정보
커스텀 컴퓨팅 클래스는 워크로드를 실행하도록 노드를 프로비저닝할 때 GKE가 따라야 할 우선순위를 정의할 수 있는 Kubernetes 커스텀 리소스입니다. 커스텀 컴퓨팅 클래스를 사용하여 다음을 수행할 수 있습니다.
- Compute Engine 머신 시리즈 또는 최소 리소스 용량과 같은 특정 매개변수가 각각 포함된 노드를 프로비저닝할 때 GKE에 순차적으로 따를 일련의 우선순위를 부여합니다.
- 기존 컴퓨팅 용량에서 사용률이 낮은 노드를 삭제하고 워크로드를 효율적으로 통합하기 위한 자동 확장 기준점 및 매개변수를 정의합니다.
- 최적의 워크로드 성능을 위해 GKE가 선호하지 않는 노드 구성을 더 선호되는 노드 구성으로 자동 교체하도록 지정합니다.
모든 구성 옵션과 옵션 간의 상호작용 방식, GKE Autopilot 모드 및 GKE Standard 모드와의 상호작용 방식을 알아보려면 커스텀 컴퓨팅 클래스 정보를 참고하세요.
가격 책정
ComputeClass
커스텀 리소스는 GKE에서 추가 비용 없이 제공됩니다. 다음과 같은 가격 책정 고려사항이 적용됩니다.
GKE Autopilot 모드: 노드 기반 결제 모드를 사용하여 요금이 청구됩니다. 자세한 내용은 Autopilot 모드 가격 책정을 참고하세요.
GKE Standard 모드: Standard 모드 가격 책정을 참고하세요.
시작하기 전에
시작하기 전에 다음 태스크를 수행했는지 확인합니다.
- Google Kubernetes Engine API를 사용 설정합니다. Google Kubernetes Engine API 사용 설정
- 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화합니다. 이전에 gcloud CLI를 설치한 경우
gcloud components update
를 실행하여 최신 버전을 가져옵니다.
- 버전 1.30.3-gke.1451000 이상을 실행하는 기존 GKE 클러스터가 있는지 확인합니다. 자세한 내용은 Autopilot 클러스터 만들기를 참조하세요.
- Standard 모드 클러스터를 사용하는 경우 자동 확장이 사용 설정된 노드 풀이 하나 이상 있거나 클러스터가 노드 자동 프로비저닝을 사용하는지 확인합니다.
컴퓨팅 클래스의 예시 시나리오
이 문서에서는 커스텀 컴퓨팅 클래스를 정의하는 예시 시나리오를 보여줍니다. 실제로는 특정 워크로드 및 조직의 요구사항을 고려하고 이러한 요구사항을 충족하는 컴퓨팅 클래스를 정의해야 합니다. 컴퓨팅 클래스의 모든 옵션에 관한 자세한 설명과 특별한 고려사항은 커스텀 컴퓨팅 클래스 정보를 참고하세요.
이러한 시나리오의 예시는 다음과 같습니다.
- 워크로드의 실행 비용을 최적화하는 것이 목표입니다.
- 워크로드가 내결함성을 갖추고 있고 정상적으로 종료하거나 런타임을 연장할 필요가 없습니다.
- 워크로드를 최적으로 실행하는데 64개 이상의 vCPU가 필요합니다.
- N2 Compute Engine 머신 시리즈로 제한됩니다.
예시 시나리오를 바탕으로 다음을 실행하는 컴퓨팅 클래스를 만들기로 결정합니다.
- vCPU가 최소 64개 이상인 N2 스팟 노드에 우선순위를 지정
- 컴퓨팅 용량과 관계없이 GKE가 N2 스팟 노드로 대체되도록 허용
- 사용 가능한 N2 스팟 노드가 없는 경우 GKE가 주문형 N2 노드를 사용하도록 허용
- 스팟 노드를 다시 사용할 수 있을 때마다 워크로드를 스팟 노드로 이동하도록 GKE에 지시
Autopilot 모드에서 컴퓨팅 클래스 구성
GKE Autopilot에서 컴퓨팅 클래스를 정의하고 이를 클러스터에 배포하고 워크로드에서 해당 컴퓨팅 클래스를 요청합니다. GKE는 라벨 및 taint 적용과 같은 모든 노드 구성 단계를 자동으로 실행합니다.
다음 매니페스트를 compute-class.yaml
로 저장합니다.
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: cost-optimized
spec:
priorities:
- machineFamily: n2
spot: true
minCores: 64
- machineFamily: n2
spot: true
- machineFamily: n2
spot: false
activeMigration:
optimizeRulePriority: true
nodePoolAutoCreation:
enabled: true
Standard 모드에서 컴퓨팅 클래스 구성
GKE Standard 모드 클러스터에서는 컴퓨팅 클래스를 정의한 후 컴퓨팅 클래스 포드가 예상대로 예약되도록 수동 구성을 실행해야 할 수 있습니다. 수동 구성은 다음과 같이 노드 풀이 자동으로 프로비저닝되는지 여부에 따라 다릅니다.
- 노드 자동 프로비저닝으로 관리되는 노드 풀: 수동 구성이 필요하지 않습니다. 노드 자동 프로비저닝은 컴퓨팅 클래스 구성 단계를 자동으로 실행합니다. 자세한 내용은 노드 자동 프로비저닝 및 컴퓨팅 클래스를 참조하세요.
- 수동으로 만든 노드 풀: 수동 구성이 필요합니다. 노드를 특정 컴퓨팅 클래스와 연결하려면 수동으로 생성된 노드 풀에 노드 라벨과 노드 taint를 추가해야 합니다. 자세한 내용은 컴퓨팅 클래스를 사용하기 위해 수동으로 생성된 노드 풀 구성을 참조하세요.
수동으로 생성된 노드 풀에서 컴퓨팅 클래스 사용
이 섹션에서는 수동으로 생성된 노드 풀만 사용하는 클러스터에서 컴퓨팅 클래스를 정의하는 방법을 보여줍니다.
다음 매니페스트를
compute-class.yaml
로 저장합니다.apiVersion: cloud.google.com/v1 kind: ComputeClass metadata: name: cost-optimized spec: priorities: - machineFamily: n2 spot: true minCores: 64 - machineFamily: n2 spot: false activeMigration: optimizeRulePriority: true
스팟 VM을 사용하는 새 자동 확장 노드 풀을 만들고 컴퓨팅 클래스와 연결합니다.
gcloud container node-pools create cost-optimized-pool \ --location=LOCATION \ --cluster=CLUSTER_NAME \ --machine-type=n2-standard-64 \ --spot \ --enable-autoscaling \ --max-nodes=9 \ --node-labels="cloud.google.com/compute-class=cost-optimized" \ --node-taints="cloud.google.com/compute-class=cost-optimized:NoSchedule"
다음을 바꿉니다.
LOCATION
: 클러스터의 위치입니다.CLUSTER_NAME
: 기존 클러스터의 이름입니다.
주문형 VM으로 새 자동 확장 노드 풀을 만들고 컴퓨팅 클래스와 연결합니다.
gcloud container node-pools create on-demand-pool \ --location=LOCATION \ --cluster=CLUSTER_NAME \ --machine-type=n2-standard-64 \ --enable-autoscaling \ --max-nodes=9 \ --num-nodes=0 \ --node-labels="cloud.google.com/compute-class=cost-optimized" \ --node-taints="cloud.google.com/compute-class=cost-optimized:NoSchedule"
이 컴퓨팅 클래스를 요청하는 포드를 배포하고 새 노드를 만들어야 하면 GKE는 cost-optimized-pool
노드 풀에 노드를 만드는 데 우선순위를 둡니다. 새 노드를 만들 수 없는 경우 GKE가 on-demand-pool
노드 풀에 노드를 만듭니다.
수동으로 만든 노드 풀이 커스텀 컴퓨팅 클래스와 상호작용하는 방식에 관한 자세한 내용은 컴퓨팅 클래스 사용을 위해 수동으로 만든 노드 풀 구성을 참고하세요.
자동 프로비저닝된 노드 풀에서 컴퓨팅 클래스 사용
이 섹션에서는 노드 자동 프로비저닝을 사용하는 클러스터에서 컴퓨팅 클래스를 정의하는 방법을 보여줍니다.
다음 매니페스트를 compute-class.yaml
로 저장합니다.
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: cost-optimized
spec:
priorities:
- machineFamily: n2
spot: true
minCores: 64
- machineFamily: n2
spot: true
- machineFamily: n2
spot: false
activeMigration:
optimizeRulePriority: true
nodePoolAutoCreation:
enabled: true
이 컴퓨팅 클래스를 요청하는 포드를 배포하고 새 노드를 만들어야 하는 경우 GKE는 priorities
필드에서 주문 항목에 노드를 만드는 데 우선순위를 둡니다. 필요한 경우 GKE는 컴퓨팅 클래스의 하드웨어 요구사항을 충족하는 새 노드 풀을 만듭니다.
커스텀 컴퓨팅 클래스에서 노드 자동 프로비저닝이 작동하는 방식에 대한 자세한 내용은 노드 자동 프로비저닝 및 컴퓨팅 클래스를 참조하세요.
노드 통합을 위한 자동 확장 임곗값 맞춤설정
기본적으로 GKE는 사용률이 낮은 노드를 삭제하고 사용 가능한 다른 노드로 워크로드를 다시 예약합니다. 다음 예시와 같이 컴퓨팅 클래스 정의에 autoscalingPolicy
필드를 사용하여 노드가 삭제 후보가 된 후 임곗값과 시간을 추가로 맞춤설정할 수 있습니다.
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: cost-optimized
spec:
priorities:
- machineFamily: n2
spot: true
minCores: 64
- machineFamily: n2
spot: true
- machineFamily: n2
spot: false
activeMigration:
optimizeRulePriority: true
autoscalingPolicy:
consolidationDelayMinutes : 5
consolidationThreshold : 70
이 예시에서는 노드가 사용 가능한 CPU 및 메모리 용량의 70% 미만으로 5분 넘게 사용되지 않으면 노드가 삭제 후보가 됩니다. 사용 가능한 매개변수의 목록은 노드 통합을 위한 자동 확장 매개변수 설정을 참고하세요.
클러스터에 컴퓨팅 클래스 배포
컴퓨팅 클래스를 정의한 후 클러스터에 배포합니다.
kubectl apply -f compute-class.yaml
이제 이 컴퓨팅 클래스를 클러스터에서 사용할 수 있습니다. 포드 사양에서 컴퓨팅 클래스를 요청하거나 선택적으로 특정 네임스페이스의 기본 컴퓨팅 클래스로 설정할 수 있습니다.
네임스페이스의 기본 컴퓨팅 클래스 설정
네임스페이스의 기본 컴퓨팅 클래스를 설정하면 GKE는 이 컴퓨팅 클래스를 사용하여 해당 네임스페이스에 배포하는 모든 포드의 노드를 만듭니다. 포드가 다른 컴퓨팅 클래스를 명시적으로 요청하면 포드 수준 요청이 네임스페이스 기본값을 재정의합니다.
특정 네임스페이스의 기본값으로 컴퓨팅 클래스를 설정하려면 다음 단계를 따르세요.
네임스페이스를 만듭니다.
kubectl create namespace cost-optimized-ns
컴퓨팅 클래스를 사용하여 네임스페이스에 라벨을 지정합니다.
kubectl label namespaces cost-optimized-ns \ cloud.google.com/default-compute-class=cost-optimized
워크로드의 컴퓨팅 클래스 요청
워크로드에서 컴퓨팅 클래스를 요청하려면 매니페스트에 해당 컴퓨팅 클래스의 노드 선택기를 추가합니다.
다음 매니페스트를
cc-workload.yaml
로 저장합니다.apiVersion: apps/v1 kind: Deployment metadata: name: custom-workload spec: replicas: 2 selector: matchLabels: app: custom-workload template: metadata: labels: app: custom-workload spec: nodeSelector: cloud.google.com/compute-class: cost-optimized containers: - name: test image: gcr.io/google_containers/pause resources: requests: cpu: 1.5 memory: "4Gi"
워크로드를 배포합니다.
kubectl apply -f cc-workload.yaml
이 워크로드를 배포하면 GKE가 요청된 컴퓨팅 클래스의 노드 taint에 해당하는 포드에 자동으로 톨러레이션(toleration)을 추가합니다. 이러한 톨러레이션(toleration)을 통해 컴퓨팅 클래스를 요청하는 포드만 컴퓨팅 클래스 노드에서 실행됩니다.