이 페이지에서는 컴퓨팅 클래스를 명시적으로 선택하지 않는 Google Kubernetes Engine (GKE) 포드에 기본적으로 컴퓨팅 클래스를 적용하는 방법을 보여줍니다. 이 페이지에는 네임스페이스 및 전체 클러스터에서 컴퓨팅 클래스를 기본값으로 설정하는 방법이 나와 있습니다. 이 안내는 개별 워크로드 및 노드 구성으로 인해 발생하는 수동 오버헤드를 줄이려는 클러스터 관리자를 대상으로 합니다.
이 페이지를 읽기 전에 커스텀 컴퓨팅 클래스를 숙지하세요.
기본 컴퓨팅 클래스 정보
기본 컴퓨팅 클래스를 갖도록 GKE 클러스터 또는 특정 네임스페이스를 구성할 수 있습니다. 구성한 기본 클래스는 다른 컴퓨팅 클래스를 선택하지 않는 해당 클러스터 또는 네임스페이스의 모든 포드에 적용됩니다. 컴퓨팅 클래스를 선택하지 않는 포드를 배포하면 GKE는 다음 순서로 기본 컴퓨팅 클래스를 적용합니다.
- 네임스페이스에 기본 컴퓨팅 클래스가 있는 경우 GKE는 해당 컴퓨팅 클래스를 선택하도록 포드 사양을 수정합니다.
- 네임스페이스에 기본 컴퓨팅 클래스가 없으면 클러스터 수준 기본 클래스가 적용됩니다. GKE는 포드 사양을 수정하지 않습니다.
시작하기 전에
시작하기 전에 다음 태스크를 수행했는지 확인합니다.
- Google Kubernetes Engine API를 사용 설정합니다. Google Kubernetes Engine API 사용 설정
- 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화하세요. 이전에 gcloud CLI를 설치한 경우
gcloud components update
를 실행하여 최신 버전을 가져옵니다.
클러스터 또는 네임스페이스 수준에서 기본 컴퓨팅 클래스 설정을 지원하는 버전을 실행하는 GKE Autopilot 또는 Standard 클러스터가 있어야 합니다. 자세한 내용은 요구사항 섹션을 참고하세요.
Standard 클러스터의 경우 노드 자동 프로비저닝 또는 클러스터 자동 확장 처리를 사용 설정합니다.
네임스페이스의 기본값으로 커스텀 컴퓨팅 클래스를 설정하려면 커스텀 컴퓨팅 클래스를 배포하세요.
요구사항
- 컴퓨팅 클래스를 클러스터 수준 기본값으로 설정하려면 클러스터가 GKE 버전 1.33.1-gke.1744000 이상을 실행해야 합니다.
- DaemonSet이 아닌 Pod에만 컴퓨팅 클래스를 네임스페이스 수준 기본값으로 설정하려면 클러스터가 GKE 버전 1.33.1-gke.1788000 이상을 실행해야 합니다.
필수 역할 및 권한
클러스터 또는 네임스페이스 수준 기본 컴퓨팅 클래스를 구성하는 데 필요한 권한을 얻으려면 관리자에게 Google Cloud 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.
-
Kubernetes Engine 개발자 (
roles/container.developer
) -
클러스터 수준 기본 컴퓨팅 클래스 업데이트:
Kubernetes Engine 클러스터 관리자 (
roles/container.clusterAdmin
)
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
이러한 사전 정의된 역할에는 클러스터 또는 네임스페이스 수준 기본 컴퓨팅 클래스를 구성하는 데 필요한 권한이 포함되어 있습니다. 필요한 정확한 권한을 보려면 필수 권한 섹션을 펼치세요.
필수 권한
클러스터 또는 네임스페이스 수준 기본 컴퓨팅 클래스를 구성하려면 다음 권한이 필요합니다.
-
container.customResourceDefinitions.create
-
container.customResourceDefinitions.update
-
container.customResourceDefinitions.get
-
container.customResourceDefinitions.list
-
container.namespaces.get
-
container.namespaces.list
-
container.pods.get
-
container.nodes.get
-
container.nodes.list
-
container.deployments.create
-
container.deployments.get
-
네임스페이스에 라벨을 추가합니다.
container.namespaces.update
-
클러스터 수준 기본 컴퓨팅 클래스를 사용 설정합니다.
container.clusters.update
커스텀 역할이나 다른 사전 정의된 역할을 사용하여 이 권한을 부여받을 수도 있습니다.
네임스페이스의 기본 컴퓨팅 클래스 구성
클러스터의 Kubernetes 네임스페이스에 기본값으로 사용할 컴퓨팅 클래스의 이름을 주석으로 달 수 있습니다. 해당 네임스페이스에 배포된 포드가 아직 컴퓨팅 클래스를 선택하지 않은 경우 GKE는 네임스페이스에서 기본 클래스를 선택하도록 포드 사양을 수정합니다. 맞춤 또는 기본 제공 컴퓨팅 클래스를 기본값으로 설정할 수 있습니다.
기본적으로 네임스페이스의 모든 포드에 컴퓨팅 클래스를 적용하려면 해당 네임스페이스에
cloud.google.com/default-compute-class
라벨을 추가하세요.kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class=COMPUTECLASS_NAME
다음을 바꿉니다.
NAMESPACE_NAME
: 업데이트할 네임스페이스의 이름입니다.COMPUTECLASS_NAME
: 네임스페이스의 기본값으로 설정할 컴퓨팅 클래스의 이름입니다.
다음 오류 메시지와 함께 명령어가 실패하면 네임스페이스에 이미 기본 컴퓨팅 클래스가 있는 것입니다.
error: 'cloud.google.com/default-compute-class' already has a value, and --overwrite is false
이 오류를 해결하려면 네임스페이스의 기본 컴퓨팅 클래스를 업데이트하세요.
기본적으로 네임스페이스의 모든 비 DaemonSet 포드에 컴퓨팅 클래스를 적용하려면 해당 네임스페이스에
cloud.google.com/default-compute-class-non-daemonset
라벨을 추가하세요.kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class-non-daemonset=COMPUTECLASS_NAME
다음 오류 메시지가 표시되고 명령어가 실패하면 네임스페이스에 이미 DaemonSet이 아닌 포드의 기본 컴퓨팅 클래스가 있는 것입니다.
error: 'cloud.google.com/default-compute-class-non-daemonset' already has a value, and --overwrite is false
이 오류를 해결하려면 네임스페이스의 기본 컴퓨팅 클래스를 업데이트하세요.
네임스페이스에서 기존 기본 컴퓨팅 클래스 업데이트
네임스페이스의 기존 기본 컴퓨팅 클래스를 덮어쓰려면 다음 명령어 중 하나를 실행합니다.
네임스페이스의 모든 포드에 대한 기본 컴퓨팅 클래스를 업데이트합니다.
kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class=COMPUTECLASS_NAME \ --overwrite
다음을 바꿉니다.
NAMESPACE_NAME
: 업데이트할 네임스페이스의 이름입니다.COMPUTECLASS_NAME
: 네임스페이스의 새 기본값으로 설정할 컴퓨팅 클래스의 이름입니다.
네임스페이스에서 DaemonSet이 아닌 포드의 기본 컴퓨팅 클래스를 덮어씁니다.
kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class-non-daemonset=COMPUTECLASS_NAME \ --overwrite
클러스터의 기본 컴퓨팅 클래스 구성
이 섹션에서는 컴퓨팅 클래스를 클러스터의 기본값으로 설정하는 방법을 보여줍니다. 클러스터 수준 기본 컴퓨팅 클래스의 경우 클러스터의 기존 노드 풀에 노드 taint와 노드 라벨을 수동으로 지정하지 마세요.
GKE는 컴퓨팅 클래스에 대한 노드 taint가 있는 노드 풀을 확장하지 않습니다. default
컴퓨팅 클래스의 라벨을 수동으로 추가하면 GKE에서 해당 노드 풀을 확장할 수 있습니다. 하지만 기본 클러스터 수준 컴퓨팅 클래스를 사용하는 데 이 수동 구성이 필요한 것은 아닙니다.
클러스터의 클러스터 수준 기본 컴퓨팅 클래스를 설정하려면
--enable-default-compute-class
플래그와 함께gcloud container clusters update
명령어를 실행합니다.gcloud container clusters update CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --enable-default-compute-class
다음을 바꿉니다.
CLUSTER_NAME
: 클러스터 이름입니다.CONTROL_PLANE_LOCATION
: 클러스터 컨트롤 플레인의 위치입니다(예:us-central1
).
Autopilot 또는 Standard 클러스터를 만들 때 이 플래그를 지정할 수도 있습니다.
default
이라는ComputeClass
를 정의하는 다음 매니페스트를 저장합니다.apiVersion: cloud.google.com/v1 kind: ComputeClass metadata: name: default spec: priorities: - machineFamily: n4 - machineFamily: n2 whenUnsatisfiable: ScaleUpAnyway nodePoolAutoCreation: enabled: true
이 예시 매니페스트는 N4 인스턴스를 사용하는 노드를 요청합니다. N4 인스턴스를 사용할 수 없는 경우 컴퓨팅 클래스는 대신 N2 인스턴스를 요청합니다. ComputeClass CustomResourceDefinition에서 사용 가능한 필드를 사용하여
default
컴퓨팅 클래스를 구성할 수 있습니다.매니페스트를 클러스터에 적용합니다.
kubectl apply -f PATH_TO_MANIFEST
PATH_TO_MANIFEST
를 컴퓨팅 클래스의 매니페스트 경로로 바꿉니다.
클러스터 수준 기본 컴퓨팅 클래스를 설정하면 GKE는 다음 요구사항을 모두 충족하는 노드 풀을 확장합니다.
- 노드 구성은
default
컴퓨팅 클래스의 구성과 동일합니다. - 노드 풀에 다른 컴퓨팅 클래스의 taint 또는 라벨이 없습니다.
GKE는
default
컴퓨팅 클래스의 taint와 라벨이 있는 노드 풀을 확장할 수 있습니다.
예를 들어 default
컴퓨팅 클래스가 N4 머신 시리즈를 지정하는 경우 GKE는 N4 인스턴스를 사용하고 다른 컴퓨팅 클래스의 테인트나 라벨이 없는 기존 노드 풀을 확장할 수 있습니다.
기본 컴퓨팅 클래스 동작 확인
네임스페이스 또는 클러스터에 설정한 기본 컴퓨팅 클래스가 예상대로 작동하는지 확인하려면 다음 단계를 따르세요.
다음 배포 예를 검토하세요.
이 배포는 컴퓨팅 클래스를 명시적으로 요청하지 않습니다.
배포를 만듭니다.
kubectl apply --namespace=NAMESPACE_NAME \ -f https://raw.githubusercontent.com/GoogleCloudPlatform/kubernetes-engine-samples/refs/heads/main/quickstarts/hello-app/manifests/helloweb-deployment.yaml
확인하려는 내용에 따라
NAMESPACE_NAME
를 다음 중 하나로 바꿉니다.- 기본 컴퓨팅 클래스가 있는 네임스페이스의 이름입니다.
- 기본 컴퓨팅 클래스가 없는 네임스페이스의 이름입니다.
GKE에서 포드를 실행하기 위해 새 노드를 만드는 데 시간이 걸릴 수 있습니다.
예시 배포에서 포드를 실행하는 노드를 식별합니다.
kubectl get pods --namespace=NAMESPACE_NAME \ --selector=app=hello -o=wide
출력은 다음과 비슷합니다.
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES helloweb-7795fbf856-58n5l 1/1 Running 0 9m21s 10.52.2.3 gke-cluster-1-nap-n2-highcpu-2-3muqi8-f213e529-rx7d <none> <none>
노드 라벨을 가져옵니다.
kubectl get node NODE_NAME --show-labels \ | grep "cloud.google.com/compute-class"
NODE_NAME
을 이전 단계의 출력에 있는 노드 이름으로 바꿉니다.출력은 다음과 비슷합니다.
NODE_NAME Ready <none> 22m v1.32.4-gke.1236007 # lines are omitted from this output cloud.google.com/compute-class=COMPUTECLASS_NAME,cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd
COMPUTECLASS_NAME
의 값은 다음 중 하나입니다.- 클러스터 수준 기본 컴퓨팅 클래스: GKE Autopilot 또는 노드 자동 프로비저닝으로 생성된 노드의 경우
default
기존 수동으로 생성된 노드 풀의 노드에는cloud.google.com/compute-class
라벨이 없을 수 있습니다. - 네임스페이스 수준 기본 컴퓨팅 클래스: 네임스페이스 기본값으로 구성한 컴퓨팅 클래스의 이름입니다.
- 클러스터 수준 기본 컴퓨팅 클래스: GKE Autopilot 또는 노드 자동 프로비저닝으로 생성된 노드의 경우
기본 컴퓨팅 클래스 사용 중지
네임스페이스 또는 클러스터에서 기본 컴퓨팅 클래스를 사용 중지하려면 다음 중 하나를 실행하세요.
모든 포드에 대해 네임스페이스 수준 기본 컴퓨팅 클래스를 사용 중지하려면 네임스페이스에서
cloud.google.com/default-compute-class
라벨을 삭제합니다.kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class-
라벨 키 끝에 있는
-
문자는 Kubernetes API의Namespace
객체에서 해당 키가 있는 라벨을 삭제합니다.DaemonSet이 아닌 포드의 네임스페이스 수준 기본 컴퓨팅 클래스를 사용 중지하려면 네임스페이스에서
cloud.google.com/default-compute-class-non-daemonset
라벨을 삭제하세요.kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class-non-daemonset-
클러스터 수준 기본 컴퓨팅 클래스를 사용 중지하려면
gcloud container clusters update
명령어를--no-enable-default-compute-class
플래그와 함께 사용합니다.gcloud container clusters update CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --no-enable-default-compute-class
다음 단계
- GKE의 커스텀 컴퓨팅 클래스에 대해 자세히 알아보세요.