이 페이지에서는 표준 Google Kubernetes Engine(GKE) 클러스터에서 노드 자동 프로비저닝이 작동하는 방식을 설명합니다. 노드 자동 프로비저닝을 사용하면 노드가 워크로드 요구사항에 맞게 자동으로 확장됩니다.
Autopilot 클러스터를 사용하면 GKE가 노드 확장 및 프로비저닝을 자동으로 관리하므로 노드를 수동으로 프로비저닝하거나 노드 풀을 관리할 필요가 없습니다.
노드 자동 프로비저닝을 사용하는 이유
노드 자동 프로비저닝은 사용자를 대신하여 노드 풀 집합을 자동으로 관리하고 확장합니다. 노드 자동 프로비저닝이 없으면 GKE 클러스터 자동 확장 처리는 사용자가 만든 노드 풀에서만 노드를 만듭니다. 노드 자동 프로비저닝을 사용하는 경우에는 GKE가 노드 풀을 자동으로 만들고 삭제합니다.
지원되지 않는 기능
노드 자동 프로비저닝은 다음 기능을 사용하는 노드 풀을 create 않습니다. 하지만 클러스터 자동 확장 처리는 다음 기능을 사용하여 기존 노드 풀의 노드를 확장합니다.
- GKE Sandbox.
- Windows 운영체제
- 예약 어피니티 제어
- 로컬 PersistentVolumes 자동 확장
- 임시 스토리지로 로컬 SSD를 사용하여 노드 자동 프로비저닝
- 변경된 필터를 사용하는 커스텀 예약을 통한 자동 프로비저닝.
- 동시 멀티 스레딩(SMT) 구성
노드 자동 프로비저닝 작동 방식
노드 자동 프로비저닝은 클러스터 자동 확장 처리의 메커니즘으로, 기존 노드 풀만 확장합니다. 노드 자동 프로비저닝을 사용 설정하면 클러스터 자동 확장 처리가 예약할 수 없는 포드의 사양에 따라 노드 풀을 자동으로 만들 수 있습니다.
노드 자동 프로비저닝은 다음 정보를 기준으로 노드 풀을 만듭니다.
- CPU, 메모리, 임시 스토리지 리소스 요청
- GPU 요청
- 보류 중인 포드의 노드 어피니티 및 라벨 선택기
- 보류 중인 포드의 노드 테인트 및 톨러레이션(toleration)
리소스 한도
노드 자동 프로비저닝과 클러스터 자동 확장 처리에는 다음 수준의 제한이 적용됩니다.
- 노드 풀 수준: 자동 프로비저닝 노드 풀은 노드 1000개로 제한됩니다.
- 클러스터 수준:
- 사용자가 정의한 모든 자동 프로비저닝 한도는 자동 프로비저닝된 풀뿐만 아니라 모든 노드 풀에서 사용되는 총 CPU 및 메모리 리소스에 따라 적용됩니다.
- 클러스터 자동 확장 처리는 정의된 한도 중 하나를 초과하면 새 노드를 만들지 않습니다. 이미 한도를 초과한 경우에는 GKE가 노드를 삭제하지 않습니다.
워크로드 분리
노드 어피니티 및 내결함성이 있는 보류 중인 포드가 있는 경우 노드 자동 프로비저닝은 일치하는 라벨과 taint로 노드를 프로비저닝할 수 있습니다.
노드 자동 프로비저닝은 다음 조건이 모두 충족되는 경우 라벨과 taint를 사용하여 노드 풀을 만들 수 있습니다.
- 보류 중인 포드에는 특정 라벨 키와 값이 있는 노드가 필요합니다.
- 포드에는 키가 동일한 taint에 대한 내결함성이 있습니다.
- 톨러레이션(toleration)은
NoSchedule
효과,NoExecute
효과 또는 모든 효과를 위한 것입니다.
자세한 내용은 GKE에서 워크로드 분리 구성을 참조하세요.
자동 프로비저닝된 노드 풀 삭제
자동 프로비저닝된 노드 풀에 노드가 없으면 GKE가 노드 풀을 삭제합니다. GKE는 자동 프로비저닝되지 않는 노드 풀을 삭제하지 않습니다.
지원되는 머신 유형
노드 자동 프로비저닝은 클러스터의 포드 요구사항을 확인하여 해당 포드에 가장 적합한 노드 유형을 결정합니다.
기본적으로 GKE는 다음 조건이 적용되지 않는 한 E2 머신 시리즈를 사용합니다.
- 워크로드가 E2 머신 시리즈에서 제공되지 않는 기능을 요청하는 경우. 예를 들어 워크로드에서 GPU가 요청될 경우 N1 머신 시리즈가 새 노드 풀에 사용됩니다.
- 워크로드가 TPU 리소스를 요청합니다. TPU에 대한 자세한 내용은 Cloud TPU 소개를 참조하세요.
- 워크로드가
machine-family
라벨을 사용하는 경우. 자세한 내용은 커스텀 머신 계열 사용을 참조하세요.
포드가 GPU를 요청하면 노드 자동 프로비저닝은 포드가 요청하는 GPU 수를 지원할 만큼 충분히 큰 머신 유형을 할당합니다. GPU 수는 노드가 가질 수 있는 CPU와 메모리를 제한합니다. 자세한 내용은 GPU 플랫폼을 참조하세요.
지원되는 노드 이미지
노드 자동 프로비저닝은 다음 노드 이미지 중 하나를 사용하여 노드 풀을 만듭니다.
- Container-Optimized OS(
cos_containerd
). - Ubuntu(
ubuntu_containerd
)
지원되는 머신러닝 가속기
노드 자동 프로비저닝은 GPU 및 Cloud TPU와 같은 하드웨어 가속기로 노드 풀을 만들 수 있습니다. 노드 자동 프로비저닝은 GKE 버전 1.28 이상에서 TPU를 지원합니다.
GPU
포드가 GPU를 요청하면 노드 자동 프로비저닝은 포드가 요청하는 GPU 수를 지원할 만큼 충분히 큰 머신 유형을 할당합니다. GPU 수는 노드가 가질 수 있는 CPU와 메모리를 제한합니다. 자세한 내용은 GPU 플랫폼을 참조하세요.
Cloud TPU
GKE는 Tensor Processing Unit(TPU)을 지원하여 머신러닝 워크로드를 가속화합니다. 단일 호스트 TPU 슬라이스 노드 풀과 멀티 호스트 TPU 슬라이스 노드 풀 모두 자동 확장 및 자동 프로비저닝을 지원합니다.
GKE 클러스터에서 --enable-autoprovisioning
플래그를 사용하면 GKE는 대기 중인 워크로드의 요구사항을 충족하는 TPU 버전 및 토폴로지를 사용하여 단일 호스트 또는 멀티 호스트 TPU 슬라이스 노드 풀을 만들거나 삭제합니다.
--enable-autoscaling
을 사용하는 경우 GKE는 다음과 같이 해당 유형을 기준으로 노드 풀을 확장합니다.
단일 호스트 TPU 슬라이스 노드 풀: GKE는 기존 노드 풀에서 TPU 노드를 추가하거나 삭제합니다. 노드 풀은 0부터 --max-nodes 및 --total-max-nodes 플래그에 따라 결정되는 노드 풀의 최대 크기 사이의 TPU 노드 수를 포함할 수 있습니다. 노드 풀이 확장되면 노드 풀에서 모든 TPU 노드의 머신 유형 및 토폴로지는 동일합니다. 단일 호스트 TPU 슬라이스 노드 풀을 만드는 방법에 대한 자세한 내용은 노드 풀 만들기를 참조하세요.
멀티 호스트 TPU 슬라이스 노드 풀: GKE는 노드 풀을 0부터 TPU 토폴로지를 충족하는 데 필요한 노드 수로 원자적으로 수직 확장합니다. 예를 들어, 머신 유형이
ct5lp-hightpu-4t
이고 토폴로지가16x16
인 TPU 노드 풀의 경우, 노드 풀에는 64개의 노드가 포함됩니다. GKE 자동 확장 처리는 이 노드 풀에 노드가 정확히 0개 또는 64개 있도록 합니다. 축소하면 GKE는 예약된 모든 포드를 제거하고 전체 노드 풀을 0으로 드레이닝합니다. 멀티 호스트 TPU 슬라이스 노드 풀을 만드는 방법에 대한 자세한 내용은 노드 풀 만들기를 참조하세요.
특정 TPU 슬라이스에 실행 중이거나 예약 대기 중인 포드가 없으면 GKE는 노드 풀을 축소합니다. 멀티 호스트 TPU 슬라이스 노드 풀은 원자적으로 축소됩니다. 단일 호스트 TPU 슬라이스 노드 풀은 개별 단일 호스트 TPU 슬라이스를 삭제하여 축소됩니다.
TPU를 사용하여 노드 자동 프로비저닝을 사용 설정하면 GKE가 포드 요청에 정의된 값을 기준으로 확장 결정을 내립니다. 다음 매니페스트는 2x2x2
토폴로지와 2개의 ct4p-hightpu-4t
머신이 있는 TPU v4 슬라이스가 포함된 노드 풀 한 개로 구성된 배포 사양의 예시입니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: tpu-workload
labels:
app: tpu-workload
spec:
replicas: 2
selector:
matchLabels:
app: nginx-tpu
template:
metadata:
labels:
app: nginx-tpu
spec:
nodeSelector:
cloud.google.com/gke-tpu-accelerator: tpu-v4-podslice
cloud.google.com/gke-tpu-topology: 2x2x2
cloud.google.com/reservation-name: my-reservation
containers:
- name: nginx
image: nginx:1.14.2
resources:
requests:
google.com/tpu: 4
limits:
google.com/tpu: 4
ports:
- containerPort: 80
각 항목의 의미는 다음과 같습니다.
cloud.google.com/gke-tpu-accelerator
: TPU 버전 및 유형입니다. 예를 들어 TPU v4와tpu-v4-podslice
또는 TPU v5e와tpu-v5-lite-podslice
입니다.cloud.google.com/gke-tpu-topology
: TPU 슬라이스 내의 TPU 칩의 수와 물리적 배열입니다. 노드 풀을 만들고 노드 자동 프로비저닝을 사용 설정할 때 TPU 토폴로지를 선택합니다. Cloud TPU 토폴로지에 대한 자세한 내용은 TPU 구성을 참조하세요.limit.google.com/tpu
: TPU VM의 TPU 칩 수입니다. 대부분의 구성에는 올바른 값이 하나만 있습니다. 하지만2x4
토폴로지 구성의tpu-v5-lite-podslice
는 다음과 같습니다.google.com/tpu = 8
을 지정하면 노드 자동 프로비저닝이 단일ct5lp-hightpu-8t
머신을 추가하는 단일 호스트 TPU 슬라이스 노드 풀을 확장합니다.google.com/tpu = 4
를 지정하면 노드 자동 프로비저닝이 2개의ct5lp-hightpu-4t
머신이 있는 멀티 호스트 TPU 슬라이스 노드 풀을 만듭니다.
cloud.google.com/reservation-name
: 워크로드에서 사용하는 예약의 이름. 생략하면 워크로드에서 예약을 사용하지 않습니다.
tpu-v4-podslice
를 설정하면 노드 자동 프로비저닝은 다음과 같은 결정을 내립니다.
포드 매니페스트에 설정된 값 | 노드 자동 프로비저닝에 의해 결정됨 | |||
---|---|---|---|---|
gke-tpu-topology |
limit.google.com/tpu |
노드 풀 유형 | 노드 풀 크기 | 머신 유형 |
2x2x1 | 4 | 단일 호스트 TPU 슬라이스 | 유연성 | ct4p-hightpu-4t |
{A}x{B}x{C} | 4 | 멀티 호스트 TPU 슬라이스 | {A}x{B}x{C}/4 | ct4p-hightpu-4t |
{A}x{B}x{C}의 제품은 노드 풀의 칩 수를 정의합니다. 예를 들어 4x4x4
와 같은 조합을 사용하여 64개 칩의 작은 토폴로지를 정의할 수 있습니다. 64개 칩보다 큰 토폴로지를 사용하는 경우 {A}, {B}, {C}에 할당하는 값은 다음 조건을 충족해야 합니다.
- {A}, {B}, {C}는 모두 4 이하이거나 4의 배수입니다.
- 지원되는 가장 큰 토폴로지는
12x16x16
입니다. - 할당된 값은 A ≤ B ≤ C 패턴을 유지합니다. 예를 들어 작은 토폴로지의 경우
2x2x4
또는2x4x4
입니다.
tpu-v5-lite-podslice
를 설정하면 노드 자동 프로비저닝은 다음과 같은 결정을 내립니다.
포드 매니페스트에 설정된 값 | 노드 자동 프로비저닝에 의해 결정됨 | |||
---|---|---|---|---|
gke-tpu-topology |
limit.google.com/tpu |
노드 풀 유형 | 노드 풀 크기 | 머신 유형 |
1x1 | 1 | 단일 호스트 TPU 슬라이스 | 유연성 | ct5lp-hightpu-1t |
2x2 | 4 | 단일 호스트 TPU 슬라이스 | 유연성 | ct5lp-hightpu-4t |
2x4 | 8 | 단일 호스트 TPU 슬라이스 | 유연성 | ct5lp-hightpu-8t |
2x41 | 4 | 멀티 호스트 TPU 슬라이스 | 2 (8/4) | ct5lp-hightpu-4t |
4x4 | 4 | 멀티 호스트 TPU 슬라이스 | 4 (16/4) | ct5lp-hightpu-4t |
4x8 | 4 | 멀티 호스트 TPU 슬라이스 | 8 (32/4) | ct5lp-hightpu-4t |
4x8 | 4 | 멀티 호스트 TPU 슬라이스 | 16 (32/4) | ct5lp-hightpu-4t |
8x8 | 4 | 멀티 호스트 TPU 슬라이스 | 16 (64/4) | ct5lp-hightpu-4t |
8x16 | 4 | 멀티 호스트 TPU 슬라이스 | 32 (128/4) | ct5lp-hightpu-4t |
16x16 | 4 | 멀티 호스트 TPU 슬라이스 | 64 (256/4) | ct5lp-hightpu-4t |
-
머신 유형이
google.com/tpu
한도 필드에 정의된 값에 따라 달라지는 특수한 경우입니다. ↩
가속기 유형을 tpu-v5-lite-device
로 설정하면 노드 자동 프로비저닝에서 다음 결정을 내립니다.
포드 매니페스트에 설정된 값 | 노드 자동 프로비저닝에 의해 결정됨 | |||
---|---|---|---|---|
gke-tpu-topology |
limit.google.com/tpu |
노드 풀 유형 | 노드 풀 크기 | 머신 유형 |
1x1 | 1 | 단일 호스트 TPU 슬라이스 | 유연성 | ct5l-hightpu-1t |
2x2 | 4 | 단일 호스트 TPU 슬라이스 | 유연성 | ct5l-hightpu-4t |
2x4 | 8 | 단일 호스트 TPU 슬라이스 | 유연성 | ct5l-hightpu-8t |
노드 자동 프로비저닝을 설정하는 방법을 알아보려면 TPU 구성을 참조하세요.
스팟 VM 지원
노드 자동 프로비저닝은 스팟 VM에 기반한 노드 풀 만들기를 지원합니다.
스팟 VM 기반의 노드 풀을 만드는 것은 cloud.google.com/gke-spot="true":NoSchedule
taint에 대한 톨러레이션(toleration)이 있고 예약할 수 없는 포드가 존재하는 경우에만 고려됩니다. taint는 스팟 VM에 기반한 자동 프로비저닝된 노드 풀의 노드에 자동으로 적용됩니다.
cloud.google.com/gke-spot="true"
또는 cloud.google.com/gke-provisioning=spot
(GKE 버전 1.25.5-gke.2500 이상을 실행하는 노드의 경우) 노드 라벨에 대해 nodeSelector
또는 노드 어피니티 규칙과 톨러레이션(toleration) 사용을 결합하여 워크로드가 스팟 VM 기반 노드 풀에서만 실행되도록 합니다.
임시 스토리지를 요청하는 포드 지원
포드가 임시 스토리지를 요청할 때 노드 자동 프로비저닝은 노드 풀 만들기를 지원합니다. 노드 풀에 프로비저닝된 부팅 디스크의 크기는 자동 프로비저닝된 모든 새로운 노드 풀에 대해 일정합니다. 부팅 디스크 크기를 맞춤설정할 수 있습니다.
기본값은 100GiB입니다. 로컬 SSD에서 지원되는 임시 스토리지는 지원되지 않습니다.
노드 자동 프로비저닝은 지정된 부팅 디스크가 포함된 노드의 할당 가능한 임시 스토리지가 보류 중인 포드의 임시 스토리지 요청보다 크거나 같은 경우에만 노드 풀을 프로비저닝합니다. 임시 스토리지 요청이 할당 가능한 것보다 크면 노드 자동 프로비저닝이 노드 풀을 프로비저닝하지 않습니다. 노드의 디스크 크기는 보류 중인 포드의 임시 스토리지 요청을 기준으로 동적으로 구성되지 않습니다.
확장 제한사항
노드 자동 프로비저닝에는 클러스터 자동 확장 처리와 동일한 제한사항뿐 아니라 다음과 같은 추가 제한사항이 있습니다.
- 분리된 워크로드 수 제한
- 노드 자동 프로비저닝은 별개로 분리된 워크로드를 최대 100개까지 지원합니다.
- 노드 풀 수 제한
- 클러스터의 풀 수가 100개에 가까워지면 노드 자동 프로비저닝은 새 노드 풀 생성의 우선순위를 낮춥니다. 노드 풀을 100개 이상 만들 수 있지만 보류 중인 포드를 예약할 때 노드 풀을 반드시 만들어야 하는 경우를 대비한 조치입니다.