기본적으로 포드에 컴퓨팅 클래스 적용


이 페이지에서는 컴퓨팅 클래스를 명시적으로 선택하지 않는 Google Kubernetes Engine (GKE) 포드에 기본적으로 컴퓨팅 클래스를 적용하는 방법을 보여줍니다. 이 페이지에는 네임스페이스 및 전체 클러스터에서 컴퓨팅 클래스를 기본값으로 설정하는 방법이 나와 있습니다. 이 안내는 개별 워크로드 및 노드 구성으로 인해 발생하는 수동 오버헤드를 줄이려는 클러스터 관리자를 대상으로 합니다.

이 페이지를 읽기 전에 커스텀 컴퓨팅 클래스를 숙지하세요.

기본 컴퓨팅 클래스 정보

기본 컴퓨팅 클래스를 갖도록 GKE 클러스터 또는 특정 네임스페이스를 구성할 수 있습니다. 구성한 기본 클래스는 다른 컴퓨팅 클래스를 선택하지 않는 해당 클러스터 또는 네임스페이스의 모든 포드에 적용됩니다. 컴퓨팅 클래스를 선택하지 않는 포드를 배포하면 GKE는 다음 순서로 기본 컴퓨팅 클래스를 적용합니다.

  1. 네임스페이스에 기본 컴퓨팅 클래스가 있는 경우 GKE는 해당 컴퓨팅 클래스를 선택하도록 포드 사양을 수정합니다.
  2. 네임스페이스에 기본 컴퓨팅 클래스가 없으면 클러스터 수준 기본 클래스가 적용됩니다. GKE는 포드 사양을 수정하지 않습니다.

시작하기 전에

시작하기 전에 다음 태스크를 수행했는지 확인합니다.

  • Google Kubernetes Engine API를 사용 설정합니다.
  • Google Kubernetes Engine API 사용 설정
  • 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화하세요. 이전에 gcloud CLI를 설치한 경우 gcloud components update를 실행하여 최신 버전을 가져옵니다.

요구사항

  • 컴퓨팅 클래스를 클러스터 수준 기본값으로 설정하려면 클러스터가 GKE 버전 1.33.1-gke.1744000 이상을 실행해야 합니다.
  • DaemonSet이 아닌 Pod에만 컴퓨팅 클래스를 네임스페이스 수준 기본값으로 설정하려면 클러스터가 GKE 버전 1.33.1-gke.1788000 이상을 실행해야 합니다.

필수 역할 및 권한

클러스터 또는 네임스페이스 수준 기본 컴퓨팅 클래스를 구성하는 데 필요한 권한을 얻으려면 관리자에게 Google Cloud 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.

역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

이러한 사전 정의된 역할에는 클러스터 또는 네임스페이스 수준 기본 컴퓨팅 클래스를 구성하는 데 필요한 권한이 포함되어 있습니다. 필요한 정확한 권한을 보려면 필수 권한 섹션을 펼치세요.

필수 권한

클러스터 또는 네임스페이스 수준 기본 컴퓨팅 클래스를 구성하려면 다음 권한이 필요합니다.

  • 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에서 해당 노드 풀을 확장할 수 있습니다. 하지만 기본 클러스터 수준 컴퓨팅 클래스를 사용하는 데 이 수동 구성이 필요한 것은 아닙니다.

  1. 클러스터의 클러스터 수준 기본 컴퓨팅 클래스를 설정하려면 --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 클러스터를 만들 때 이 플래그를 지정할 수도 있습니다.

  2. 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 컴퓨팅 클래스를 구성할 수 있습니다.

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

    kubectl apply -f PATH_TO_MANIFEST
    

    PATH_TO_MANIFEST를 컴퓨팅 클래스의 매니페스트 경로로 바꿉니다.

클러스터 수준 기본 컴퓨팅 클래스를 설정하면 GKE는 다음 요구사항을 모두 충족하는 노드 풀을 확장합니다.

  • 노드 구성은 default 컴퓨팅 클래스의 구성과 동일합니다.
  • 노드 풀에 다른 컴퓨팅 클래스의 taint 또는 라벨이 없습니다. GKE는 default 컴퓨팅 클래스의 taint와 라벨이 있는 노드 풀을 확장할 수 있습니다.

예를 들어 default 컴퓨팅 클래스가 N4 머신 시리즈를 지정하는 경우 GKE는 N4 인스턴스를 사용하고 다른 컴퓨팅 클래스의 테인트나 라벨이 없는 기존 노드 풀을 확장할 수 있습니다.

기본 컴퓨팅 클래스 동작 확인

네임스페이스 또는 클러스터에 설정한 기본 컴퓨팅 클래스가 예상대로 작동하는지 확인하려면 다음 단계를 따르세요.

  1. 다음 배포 예를 검토하세요.

    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

    이 배포는 컴퓨팅 클래스를 명시적으로 요청하지 않습니다.

  2. 배포를 만듭니다.

    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에서 포드를 실행하기 위해 새 노드를 만드는 데 시간이 걸릴 수 있습니다.

  3. 예시 배포에서 포드를 실행하는 노드를 식별합니다.

    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>
    
  4. 노드 라벨을 가져옵니다.

    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 라벨이 없을 수 있습니다.
    • 네임스페이스 수준 기본 컴퓨팅 클래스: 네임스페이스 기본값으로 구성한 컴퓨팅 클래스의 이름입니다.

기본 컴퓨팅 클래스 사용 중지

네임스페이스 또는 클러스터에서 기본 컴퓨팅 클래스를 사용 중지하려면 다음 중 하나를 실행하세요.

  • 모든 포드에 대해 네임스페이스 수준 기본 컴퓨팅 클래스를 사용 중지하려면 네임스페이스에서 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
    

다음 단계