Taints & Tolerations

zuckerfrei·2023년 6월 26일
0

Kubernetes

목록 보기
20/63

스케줄러가 파드를 특정 노드에 배치시키지 않도록 설정하는 것 ↔ node affinity

공식문서 참조

taint

노드에 설정함

노드에 살충제처럼 뿌려지면 내성을 가진 파드를 제외하고는 접근이 불가능해짐

toleration

파드에 설정함

노드에 뿌려진 taint라는 살충제에 대한 내성을 가져서 무시하게 됨 = 평소처럼 스케줄링 수행


effect

taint살충제를 이겨내지 못하는 나약한 파드를 어떻게 처리할지에 대한 정책

  1. NoSchedule
    • 더이상 나약한 파드를 이 노드에 배치하지 않는다.
    • 기존에 이 노드에 존재하던 나약한 파드에는 적용되지 않음(봐줌ㅋ)
  2. PreferNoSchedule
    • 더이상 나약한 파드를 이 노드에 배치하지 않도록 시도한다.
    • ‘항상’은 아니고,,, 장담할 수는 없다는 의미 → 리소스 부족해지면 여기에도 배치됨
  3. NoExecute
    • 더이상 나약한 파드를 이 노드에 배치하지 않는다.
    • 기존에 이 노드에 존재하는 나약한 파드를 종료(NoSchedule랑은 다르게 안 봐줌)

노드에 taint 적용 방법

kubectl taint nodes 명령어 실행

kubectl taint nodes [node이름] [key]=[value]:[effect]

# effect => NoSchedule | PreferNoSchedule | NoExecute

예시) kubectl taint node node1 app=blue:NoSchedule


  • 노드에 taint 제거 방법 = 명령어 끝에 “-”를 붙인다
kubectl taint nodes [node이름] [key]=[value]:[effect]-
    
# 예시
kubectl taint nodes node1 key1=value1:NoSchedule-

파드에 toleration 적용 방법

yaml파일에 spec.tolerations 작성

예시) kubectl taint node node1 app=blue:NoSchedule 을 견딜 수 있는 파드 생성

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
spec:
  containers:
  - name: nginx-container
    image: nginx
  
  tolerations:
  - key: "app"
    operator: "Equal"
    value: "blue"
    effect: "NoSchedule"
  • spec.tolerations은 반드시 큰따옴표(” “)로 감싸줌

  • spec.tolerations.operator

    • “Equal", “Exists” 2가지 중 택1 가능
    • Equal
      tolerations:
       - key: "key1"
         operator: "Equal"
         value: "value1"
         effect: "NoSchedule"
    • Exists
      value 지정하지 않아야함
      tolerations:
       - key: "key1"
         operator: "Exists"
         effect: "NoSchedule"
profile
무설탕 음료를 좋아합니다

0개의 댓글