본문 바로가기

Infra/Kubernetes

[k8s] Pod Scheduling - Taint, Tolerations 란?

 

Taint 란?

- 특정 Node에 파드가 스케줄되는 것을 제한

Tolerations 란?

- Pod가 특정 Taint가 적용된 노드에서 실행하는 속성

- ex) Platform 속성 pod 배포하기 위해, Service 노드에는 Taint를 설정하여 Tolerations과 Node Affinity(k8s가 pod를 특정 노드에 스케쥴링 하기 위해 사용하는 매커니즘) 설정이 있는 pod만 스케쥴링하고, Platform 노드에는 Taint를 설정하지 않고 일반 pod만 스케쥴링하는 방법

 

-> Node에는 TaintPod에는 Tolerations 설정

Nod Taint 설정

- 카펜터 NodePool 설정 추가 

- Node 매니페스트 확인 가능

 

apiVersion: karpenter.sh/v1beta1
kind: NodePool
metadata:
  node: service
(생략)
   taints:
   - effect: NodeSchedule # PreferNoSchedule, NoExecute
     key: node
     value: service

 

Tolerations, Node Affinity 설정

- 파드 속성에 Tolerations, Node Affinity 설정 추가

apiVersion: apps/v1
kind: Deployment

  tolerations:
  - key: "node"
    value: "service"
    effect: "NodeSchedule"
    
  affinity:
    nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution: # preferredDuringSchedulingIgnoredDuringExecution
    nodeSelectorTerms:
    - matchExpressions:
      - key: node
        operator: In
        values:
        - service