본문 바로가기
[GPUaaS]/TensorFlow

[GPU 타입] 신규 라벨 NodePool 등록 (라벨 + Taint + Affinity 세트)

by METAVERSE STORY 2026. 1. 26.
반응형

 

 

kubectl label node … 는 “이미 존재하는 노드”에만 수동 적용이라
👉 오토스케일링으로 새로 뜨는 노드에는 절대 자동 적용 안 됨

 


1️⃣ 원칙 한 줄 요약

GPU 타입 라벨은 Node가 아니라 NodePool / AutoScalingGroup에 붙인다


2️⃣ Managed Kubernetes (정답 루트)

✅ NCP / EKS / GKE 공통 개념

 
Node Pool
 ├─ 인스턴스 타입: A100
 ├─ 오토스케일링
 └─ 공통 라벨 (nodeLabels)
 
 
 

👉 새 노드가 생길 때 kubelet 시작 시 자동 부착


🔹 NCP Kubernetes (GPU 노드풀)

콘솔 / API 설정 개념

 
nodeLabels:
  gpu.vendor: nvidia
  gpu.model: A100
  gpu.mem: 80gb
  gpu.pool: train
 
 
 

👉 오토스케일링으로 생성되는 모든 노드에 자동 적용

📌 이게 실무 정답

 

 


🔹 AWS EKS (참고)

 
managedNodeGroups:
- name: gpu-a100
  labels:
    gpu.vendor: nvidia
    gpu.model: A100
 
 
 

🔹 GKE

 
--node-labels=gpu.model=A100,gpu.pool=train
 
 
 

3️⃣ 온프레미스 / kubeadm 클러스터

여기서는 부트스트랩 단계에서 박아야 함


방법 ① kubelet extra args (정석)

 
--node-labels=gpu.vendor=nvidia,gpu.model=A100,gpu.mem=80gb

kubeadm 예시

 
kind: InitConfiguration
nodeRegistration:
  kubeletExtraArgs:
    node-labels: "gpu.vendor=nvidia,gpu.model=A100,gpu.mem=80gb"
 
 
 

👉 노드 재부팅 / 재가입해도 유지됨


방법 ② Cluster Autoscaler + Launch Script

 
#!/bin/bash
kubeadm join ...
kubectl label node $(hostname) gpu.model=A100
 
 
 

❌ 비추천
(타이밍 이슈, race condition)

 

 

 


4️⃣ 절대 비추천 패턴 🚫

방법 이유
kubectl 수동 라벨 오토스케일링 깨짐
Admission Webhook 노드엔 적용 안 됨
Pod 기반 라벨링 의미 없음
DaemonSet 라벨링 권한/순서 문제

5️⃣ GPU 타입 분리의 “완성형” 구조

 
NodePool: gpu-a100-train
 ├─ labels:
 │   ├─ gpu.model=A100
 │   ├─ gpu.mem=80gb
 │   └─ gpu.pool=train
 ├─ taints:
 │   └─ gpu=true:NoSchedule
 └─ autoscaling: enabled
 
 
 
 

Pod (TFJob):

 
affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
      - matchExpressions:
        - key: gpu.model
          operator: In
          values: [A100]
tolerations:
- key: gpu
  operator: Equal
  value: "true"
  effect: NoSchedule
 
 
 
 

👉 라벨 + Taint + Affinity 삼종 세트

 

 

 


6️⃣ 검증 방법 (운영 필수)

 
# 새로 뜬 노드 확인
kubectl get node --show-labels | grep gpu.model

# TFJob Pod 배치 확인
kubectl get pod -n ml -o wide
 
 
 

🔥 최종 결론

오토스케일링 환경에서 GPU 라벨을 kubectl로 직접 붙이는 건 “임시 처방”일 뿐이고,
정답은 NodePool / ASG 레벨에서 선언하는 것이다.

 

 

반응형

댓글