taint와 toleration을 사용하는 이유

2025. 2. 27. 17:59·🔹Kubernetes
목차
  1. 📌 taint와 toleration이 필요한 이유
  2. 1️⃣ 특정 노드에서만 특정 Pod를 실행하고 싶을 때
  3. 2️⃣ 특정 노드에서 일반 Pod 실행을 막고 싶을 때
  4. 3️⃣ 특정 노드가 유지보수 중이거나 장애 발생 시 Pod 배포를 막고 싶을 때
  5. 📌 결론
728x90
SMALL

쿠버네티스의 API Server + Scheduler는 일반적으로 모든 Worker Node에 적절하게 Pod를 배분하지만,
어떤 경우에는 특정 노드에만 Pod를 배포해야 하거나, 특정 노드를 피해야 하는 경우가 있다.
이때 Taint(오염) 와 Toleration(허용) 을 사용하여 스케줄링을 더 세밀하게 조정한다.


📌 taint와 toleration이 필요한 이유

1️⃣ 특정 노드에서만 특정 Pod를 실행하고 싶을 때

예: GPU가 있는 노드에서만 AI/ML 관련 Pod를 실행하고 싶음.
✅ 해결책: GPU 노드에 taint를 추가하고, GPU가 필요한 Pod만 toleration을 설정하여 해당 노드에서 실행되도록 함.

 
kubectl taint nodes gpu-node gpu=true:NoSchedule
  • 위 명령어를 사용하면 "gpu=true"라는 Taint가 설정된 노드에는 일반 Pod가 배포되지 않음.
  • 대신 GPU를 사용하는 Pod는 Toleration을 추가하여 해당 노드에서 실행되도록 설정함.

GPU 전용 Pod 설정 (Toleration 추가)

apiVersion: v1
kind: Pod
metadata:
  name: gpu-pod
spec:
  tolerations:
  - key: "gpu"
    operator: "Equal"
    value: "true"
    effect: "NoSchedule"
  containers:
  - name: ai-model
    image: tensorflow/tensorflow
  • 이 설정을 하면 "gpu=true"가 있는 노드에서만 실행됨.

2️⃣ 특정 노드에서 일반 Pod 실행을 막고 싶을 때

예: Master Node에서는 일반 애플리케이션이 실행되지 않도록 설정해야 함.
✅ 해결책: Master 노드에 NoSchedule Taint를 추가하면, 일반 Pod는 해당 노드에서 실행되지 않음.

kubectl taint nodes master-node node-role.kubernetes.io/master=:NoSchedule
  • 이렇게 설정하면 일반 Worker Node에서만 Pod가 실행되고, Master Node는 Control Plane 용도로만 사용됨.

3️⃣ 특정 노드가 유지보수 중이거나 장애 발생 시 Pod 배포를 막고 싶을 때

예: 유지보수를 위해 특정 노드에서 Pod를 일시적으로 실행하지 않도록 설정해야 함.
✅ 해결책: 해당 노드에 NoSchedule Taint를 적용하면 유지보수 중인 노드로 Pod가 배포되지 않음.

kubectl taint nodes maintenance-node maintenance=true:NoSchedule
 
  • 해당 노드에 새로운 Pod가 배포되지 않으며, 기존 Pod는 정상적으로 유지됨.

📌 결론

✅ 기본적으로 쿠버네티스 Scheduler는 Worker Node에 자동으로 Pod를 배포하지만,
✅ taint와 toleration을 사용하면 특정 노드에서만 실행되도록 제한하거나, 특정 노드를 피할 수 있음.
✅ GPU, Master Node, 유지보수 중인 노드, 고성능 서버 등에서 유용하게 사용.

👉 즉, taint와 toleration은 쿠버네티스의 기본 스케줄링을 세밀하게 조정하는 기능

LIST

'🔹Kubernetes' 카테고리의 다른 글

Kubernetes v1.30.0 폐쇄망 설치 가이드 (Harbor Registry 연동)  (0) 2025.04.15
쿠버네티스 워크로드 선택 기준  (0) 2025.02.28
Kubernetes 워크로드 리소스들의 특징 및 종속성  (0) 2025.02.25
kubernetes Service vs Ingress 비교  (0) 2025.02.02
MetalLB 설치 (Bare Metal 환경에서 LoadBalancer 사용 가능하게 설정) 및 External IP 설정  (0) 2025.02.02
  1. 📌 taint와 toleration이 필요한 이유
  2. 1️⃣ 특정 노드에서만 특정 Pod를 실행하고 싶을 때
  3. 2️⃣ 특정 노드에서 일반 Pod 실행을 막고 싶을 때
  4. 3️⃣ 특정 노드가 유지보수 중이거나 장애 발생 시 Pod 배포를 막고 싶을 때
  5. 📌 결론
'🔹Kubernetes' 카테고리의 다른 글
  • Kubernetes v1.30.0 폐쇄망 설치 가이드 (Harbor Registry 연동)
  • 쿠버네티스 워크로드 선택 기준
  • Kubernetes 워크로드 리소스들의 특징 및 종속성
  • kubernetes Service vs Ingress 비교
terranbin
terranbin
Studying Computer Science
EngineerStudying Computer Science
  • terranbin
    Engineer
    terranbin
  • 전체
    오늘
    어제
    • 분류 전체보기 (129)
      • ☁️Cloud (42)
        • AWS (38)
        • MS Azure (4)
      • 🐳 Infra (1)
        • System (12)
        • DRBD (3)
      • 🔌Network (8)
      • 🔹Storage (8)
      • 🔹Kubernetes (15)
      • 🔹 DevOps (8)
      • 🔹Study (4)
      • 🔹Install (6)
      • 🔹ETC (2)
      • 🔹PostMan (6)
      • 🔹Openstack (3)
      • 🔹RcloneView (6)
      • 🔹Test (0)
      • 🔹Debug (2)
      • 🔹DBMS (2)
  • 블로그 메뉴

    • 홈
  • 링크

    • sungbin
    • Github
  • 공지사항

  • 인기 글

  • 태그

    SAA
    rcloneview
    ceph
    kubectl
    rocky9
    distributed load testing
    centos7
    S3
    EBS
    OpenStack
    postman
    terraform
    rocky8
    aws dlt
    Google Drive
    설치
    kubernetes
    network
    AWS
    EC2
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
terranbin
taint와 toleration을 사용하는 이유

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.