1. Taint
1.1. Taint란?
Taint의 사전적인 의미는 "얼룩"이다. 이 기능의 목적은 해당 노드에 지정된 역할만 실행하게끔 하는 것이다.
- Taint는 노드에 설정한다
- 노드를 새로 구성할 때 기본 Taint를 설정할 수도 있다.
- Taint를 설정한 노드에는 Pod가 생성되지 않는다.
- 만약 Taint 걸린 노드에 Pod를 스케줄링하려면 Pod에 Toleration 설정을 추가해야 한다.
1.2. Taint의 Effect 종류
노드에 Taint를 설정할 때 어떠한 효과(effect)를 가지게 할지 결정하는 것이다.
1.2.1. NoSchedule
- 해당 노드에 Pod가 생성되지 않는다.
- 기존 실행 중인 Pod는 상관없음.
- Toleration에 따라 스케줄링 될 수 있다.
1.2.2. PreferNoSchedule
Toleration이 없으면 Pod 스케줄링이 안되지만 꼭 그렇지만은 않다.
클러스터에 자원이 부족하면 Taint가 걸려있지만 스케줄링이 될 수도 있다.
1.2.3. NoExecute
Toleration이 없으면 Pod 스케줄링 안된다.
기존에 실행 중인 Pod에도 영향을 준다.
1.3. Taint 명령어
기본적인 Taint 설정 명령어는 다음과 같다.
kubectl taint nodes <노드명> <Taint_이름>=<Taint_Key>:<Taint_Value>
1.3.1. Taint 설정 (role=webserver, 효과는 NoSchedule)
예를 들어, node01 노드에 role이라는 key에 webserver이라는 value를 가지고 있으며 NoSchedule 효과를 가진 Taint를 적용하는 방법은 다음과 같다.
kubectl taint node node01 role=webserver:NoSchedule
예를 들어, node05 노드에 k1이라는 key에 v1이라는 value를 가지고 있으며 NoSchedule 효과를 가진 Taint를 적용하는 방법은 다음과 같다.
kubectl taint nodes node05 k1=v1:NoSchedule
1.3.2. Taint 제거 (role:NoSchedule 제거)
kubectl taint node node01 role:NoSchedule-
1.3.3. Taint 제거 (role 키를 가진 모든 Taint 제거)
kubectl taint node node01 role-
1.3.4. Taint가 걸린 노드 확인
kubectl describe nodes | grep -i taint
2. Toleration
2.1. Toleration이란?
사전적으로는 "용인"이란 뜻이다. 목적은 Taint가 적용된 노드에 배포하기 위함이다. 따라서 Taint와 쌍으로 사용되며, Taint를 노드에 설정했다면 Toleration은 Pod에 설정한다.