노드 자동 프로비저닝 사용

이 페이지에서는 Google Kubernetes Engine의 노드 자동 프로비저닝 기능을 사용하는 방법을 설명합니다.

개요

노드 자동 프로비저닝은 사용자를 대신하여 노드 풀 집합을 자동으로 관리합니다. 노드 자동 프로비저닝을 사용하지 않으면 GKE는 사용자가 선택한 노드 풀 집합에서만 새 노드를 시작합니다. 노드 자동 프로비저닝을 사용하면 새 노드 풀을 자동으로 만들고 삭제할 수 있습니다.

시작하기 전에

이 작업을 준비하려면 다음 단계를 완료하세요.

  • Google Kubernetes Engine API가 사용 설정되었는지 확인합니다.
  • Google Kubernetes Engine API 사용 설정
  • Cloud SDK가 설치되었는지 확인합니다.
  • 기본 프로젝트 ID를 설정합니다.
    gcloud config set project [PROJECT_ID]
  • 영역 클러스터를 사용하는 경우 기본 컴퓨팅 영역을 설정합니다.
    gcloud config set compute/zone [COMPUTE_ZONE]
  • 리전 클러스터를 사용하는 경우 기본 컴퓨팅 리전을 설정합니다.
    gcloud config set compute/region [COMPUTE_REGION]
  • gcloud를 최신 버전으로 업데이트합니다.
    gcloud components update

요건

노드 자동 프로비저닝은 다음과 같은 GKE 출시 버전에서 사용할 수 있습니다.

  • 영역 클러스터의 경우 v1.11.2-gke.25 이상
  • 리전 클러스터의 경우 v1.12.x 이상

작업

노드 자동 프로비저닝은 클러스터 자동 확장 처리 메커니즘의 일종으로, 노드 풀 단위로 확장합니다. 노드 자동 프로비저닝을 사용 설정하면 클러스터 자동 확장 처리가 예약할 수 없는 pod의 사양에 따라 노드 풀을 자동으로 확장할 수 있습니다.

노드 자동 프로비저닝은 다음 정보를 기준으로 노드 풀을 만듭니다.

리소스 제한

노드 자동 프로비저닝과 클러스터 자동 확장 처리에는 두 가지 수준의 제한이 적용됩니다.

  • 노드 풀 수준
  • 클러스터 수준

노드 풀 제한

NAP에서 만드는 노드 풀은 1,000개 노드로 제한됩니다.

클러스터 제한

개발자가 정의하는 제한은 자동 프로비저닝된 풀뿐 아니라 클러스터 전체에서 사용되는 CPU 및 메모리의 양에 따라 적용됩니다.

클러스터 자동 확장 처리는 정의된 제한 중 하나를 초과하면 새 노드를 만들지 않습니다. 이미 제한을 초과한 노드는 자동으로 삭제되지 않습니다.

워크로드 분리

노드 어피니티 및 내결함성이 있는 보류 중인 Pod가 있는 경우 노드 자동 프로비저닝이 일치하는 라벨 및 taint로 노드를 프로비저닝할 수 있습니다.

현재 노드 자동 프로비저닝은 다음 조건이 모두 충족되는 경우 라벨과 taint를 사용하여 노드로 구성된 노드 풀을 만듭니다.

  • 보류 중인 pod에는 특정한 키와 값이 라벨로 지정된 노드가 필요합니다.
  • Pod에 동일 키의 taint에 대한 내결함성이 있습니다.
  • 내결함성은 NoSchedule 효과, NoExecute 효과 또는 모든 효과를 위한 것입니다.

pod 사양은 다음과 같은 두 가지 방식으로 특정 라벨의 노드가 필요함을 표시할 수 있습니다.

  • nodeSelector 필드 사용
  • In 연산자와 정확히 하나의 값을 포함하는 nodeAffinity 필드 사용

다음 예시는 워크로드 분리 요청으로 해석되는 pod 사양의 일부입니다. 이 예시에서 클러스터 관리자는 워크로드 격리에 사용할 키로 dedicated를 선택했으며, UI 팀은 워크로드를 위한 전용 노드가 필요하다고 판단했습니다.

pod에는 dedicated=ui-team 라벨이 지정된 노드에 대한 내결함성이 있으며 노드 선택을 위해 nodeAffinity를 사용합니다.

spec:
  tolerations:
  - key: dedicated
    operator: Equal
    value: ui-team
    effect: NoSchedule
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: dedicated
            operator: In
            values:
            - ui-team

이 pod가 있으면 taint dedicated=ui-team:NoSchedule과 라벨 dedicated=ui-team이 있는 노드가 자동 프로비저닝에 의한 생성 대상으로 고려됩니다.

아래 예시에서는 nodeSelector를 사용하며 효과는 동일합니다.

spec:
  tolerations:
  - key: dedicated
    operator: Equal
    value: ui-team
    effect: NoSchedule
  nodeSelector:
    dedicated: ui-team

자동 프로비저닝된 노드 풀 삭제

자동 프로비저닝된 노드 풀에 노드가 없으면 GKE가 노드 풀을 삭제합니다. 자동 프로비저닝으로 표시되지 않은 노드 풀은 삭제되지 않습니다.

지원되는 머신 유형

현재 노드 자동 프로비저닝은 vCPU가 최대 64개인 머신에서 노드 풀을 생성하는 것만 고려합니다. 이 제한값은 향후 높아질 예정입니다.

확장 제한사항

노드 자동 프로비저닝에는 클러스터 자동 확장 처리와 동일한 제한사항과 다음 섹션에서 설명하는 추가 제한사항이 적용됩니다.

분리된 워크로드 수의 제한
노드 자동 프로비저닝은 별개로 분리된 워크로드를 최대 100개까지 지원합니다.
노드 풀 수 제한
풀 수가 100개에 가까워지면 노드 자동 프로비저닝이 새 노드 풀 생성의 우선순위를 낮춥니다. 노드 풀을 100개 넘게 만들 수 있지만 보류 중인 Pod를 예약할 때 노드 풀을 반드시 만들어야 하는 경우를 대비한 조치입니다.

노드 자동 프로비저닝 사용 설정

gcloud

노드 자동 프로비저닝을 사용 설정하려면 다음 명령어를 실행하세요.

gcloud container clusters update [CLUSTER_NAME] \
  --enable-autoprovisioning \
  --max-cpu 10 \
  --max-memory 64

이 명령어에서 각 항목의 의미는 다음과 같습니다.

  • --enable-autoprovisioning은 노드 자동 프로비저닝이 사용 설정되었음을 나타냅니다.
  • --max-cpu는 클러스터의 최대 코어 수를 지정합니다.
  • --max-memory는 클러스터의 최대 메모리 용량(GB)을 지정합니다.

자동 프로비저닝된 노드 풀의 ID 기본값 설정

자동 프로비저닝된 노드 풀에서 사용되는 기본 Cloud Identity and Access Management를 지정할 수 있습니다. 노드 프로비저닝에서 사용할 서비스 계정 또는 하나 이상의 범위를 지정할 수 있습니다. ID 기본값을 변경해도 기존 노드 풀에 영향을 주지 않습니다.

노드 자동 프로비저닝에 사용되는 기본 Cloud IAM 서비스 계정을 지정하려면 다음 gcloud 명령어를 실행합니다.

gcloud container clusters update \
[CLUSTER_NAME] --enable-autoprovisioning --autoprovisioning-service-account=SERVICE_ACCOUNT

예를 들어 test-service-account@google.com을 자동 프로비저닝 기본 서비스 계정으로 설정하려면 다음을 사용하세요.

gcloud container clusters update dev-cluster \
--enable-autoprovisioning --autoprovisioning-service-account=test-service-account@google.com

노드 자동 프로비저닝에서 사용할 기본 범위를 지정하려면 다음 gcloud 명령어를 실행합니다.

gcloud container clusters update \
[CLUSTER_NAME] --enable-autoprovisioning --autoprovisioning-scopes=SCOPE,[SCOPE,...]

자동 프로비저닝 기본 범위를 지정하는 데 사용하는 예시 명령어는 다음과 같습니다.

gcloud container clusters update dev-cluster \
--enable-autoprovisioning --autoprovisioning-scopes=https://www.googleapis.com/auth/pubsub,https://www.googleapis.com/auth/devstorage.read_only

위의 명령어에서 각 항목의 의미는 다음과 같습니다.

  • --enable-autoprovisioning은 노드 자동 프로비저닝이 사용 설정되었음을 나타냅니다.
  • --autoprovisioning-service-account는 자동 프로비저닝된 노드 풀이 사용하는 GCP 서비스 계정을 지정합니다.
  • --autoprovisioning-scopes는 자동 프로비저닝된 노드 풀이 사용하는 GCP 범위를 지정합니다.

GPU 제한 구성

gcloud

GPU에서 노드 자동 프로비저닝을 사용하는 경우 --max-accelerator 플래그를 사용하여 클러스터의 각 GPU 유형에 제한을 설정하는 것이 좋습니다.

여러 유형의 GPU를 구성하려면 플래그 대신 구성 파일을 사용해야 합니다. 구성 파일 예시는 이 예시를 따릅니다.

gcloud container clusters update [CLUSTER_NAME] \
  --enable-autoprovisioning \
  --max-cpu 10 \
  --max-memory 64 \
  --max-accelerator type=nvidia-tesla-k80,count=4

이 명령어에서 각 항목의 의미는 다음과 같습니다.

  • --enable-autoprovisioning은 노드 자동 프로비저닝이 사용 설정되었음을 나타냅니다.
  • --max-cpu는 클러스터의 최대 코어 수를 지정합니다.
  • --max-memory는 클러스터의 최대 메모리 용량(GB)을 지정합니다.
  • --max-acceleratornvidia-tesla-k80 GPU 가속기의 최대 개수를 지정합니다.

구성 파일에서 제한을 로드할 수 있습니다. 다음 구성 파일은 두 가지 유형의 GPU를 구성합니다.

  resourceLimits:
    -resourceType: 'cpu'
     minimum: 4
     maximum: 10
    -resourceType: 'memory'
     maximum: 64
    -resourceType: 'nvidia-tesla-k80'
     maximum: 4
    -resourceType: 'nvidia-tesla-v100'
     maximum: 2

다음 명령어는 로컬에 저장된 구성 파일을 적용하는 방법을 보여줍니다.

gcloud container clusters update [CLUSTER_NAME] \
  --enable-autoprovisioning \
  --autoprovisioning-config-file [FILE_NAME]

이 명령어에서 각 항목의 의미는 다음과 같습니다.

  • --enable-autoprovisioning은 노드 자동 프로비저닝이 사용 설정되었음을 나타냅니다.
  • --autoprovisioning-config-file은 리소스 제한이 있는 파일을 지정합니다.

노드 자동 프로비저닝 위치

노드 자동 프로비저닝이 새 노드 풀을 만들 수 있는 영역을 설정합니다. 리전 위치는 지원되지 않습니다. 영역은 모두 클러스터와 동일한 리전에 속해야 하지만 클러스터 수준에서 정의된 노드 위치로 제한되지는 않습니다. 노드 자동 프로비저닝 위치를 변경해도 기존 노드 풀에는 영향을 주지 않습니다.

gcloud

노드 자동 프로비저닝이 새 노드 풀을 만들 수 있는 위치를 설정하려면 다음 gcloud 명령어를 실행합니다.

gcloud container clusters update [CUSTER_NAME] \
  --enable-autoprovisioning --autoprovisioning-locations=ZONE,[ZONE,...]

이 명령어에서 각 항목의 의미는 다음과 같습니다.

  • --enable-autoprovisioning은 노드 자동 프로비저닝이 사용 설정되었음을 나타냅니다.
  • --autoprovisioning-locations는 노드 자동 프로비저닝이 새 노드 풀을 만들 수 있는 위치를 지정합니다.

노드 자동 프로비저닝 사용 중지

클러스터의 노드 자동 프로비저닝을 사용 중지하면 노드 풀이 더 이상 자동으로 프로비저닝되지 않습니다.

gcloud

노드 자동 프로비저닝을 사용 중지하려면 --no-enable-autoprovisioning 플래그를 사용하여 클러스터를 업데이트합니다.

gcloud container clusters update [CLUSTER_NAME] --no-enable-autoprovisioning

이 명령어에서 각 항목의 의미는 다음과 같습니다.

  • --no-enable-autoprovisioning은 노드 자동 프로비저닝이 사용 중지되었음을 나타냅니다.

노드 풀을 자동 프로비저닝된 것으로 표시

클러스터의 노드 자동 프로비저닝을 사용 설정한 후 어느 노드 풀을 자동 프로비저닝할지 지정할 수 있습니다. 자동 프로비저닝된 노드 풀은 워크로드에서 사용되지 않는 경우 자동으로 삭제됩니다.

gcloud

노드 풀을 자동 프로비저닝으로 표시하려면 다음 명령어를 실행하세요.

gcloud container node-pools update [NODE_POOL_NAME] --enable-autoprovisioning

이 명령어에서 각 항목의 의미는 다음과 같습니다.

  • --enable-autoprovisioning은 노드 풀이 자동 프로비저닝된 것으로 표시되었음을 나타냅니다.

노드 풀을 자동 프로비저닝되지 않은 것으로 표시

--no-enable-autoprovisioning 플래그를 사용하여 노드 풀에서 자동 프로비저닝을 삭제할 수 있습니다.

gcloud

노드 풀을 자동 프로비저닝 안함으로 표시하려면 다음 명령어를 실행하세요.

gcloud container node-pools update [NODE_POOL_NAME] --no-enable-autoprovisioning

이 명령어에서 각 항목의 의미는 다음과 같습니다.

  • --no-enable-autoprovisioning은 노드 풀이 자동 프로비저닝되지 않은 것으로 표시되었음을 나타냅니다.

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Kubernetes Engine 문서