1. 테인트와 톨러레이션 개념
- 노드 스케줄링을 임의로 핸들링하기 위한 방법 중 하나
- 테인트가 설정된 노드에는 톨러레이션이 적용된 파드만 배포 가능
- 테인트는 일종의 '자물쇠' 역할
- 톨러레이션은 자물쇠를 푸는 일종의 '열쇠' 역할
- 착각하기 쉬운 점은 톨러레이션이 적용됐다고 무조건 테인트가 적용된 노드로 배포되는 것은 아니며, 테인트가 적용되지 않은 일반 노드로 배포될 가능성도 존재
- DB 등 보안이 필요한 노드에 테인트를 적용하여 의도치 않은 파드 배포를 방지하는 형태로 활용 가능
2. 테인트 적용
- 테인트 적용
kubectl taint node [노드_이름] [테인트_키]=[테인트_값]:[테인트_효과]
- 테인트 값 확인
kubectl get node [노드_이름] -o yaml | grep -i taint -F5
or
kubectl describe node [노드_이름] | grep -i taint
- 테인트 해제
kubectl taint node [노드_이름] [테인트_키]:[테인트_효과]-
or
kubectl taint node [노드_이름] [테인트_키]-
- 테인트 효과
- NoSchedule : 파드에 톨러레이션이 적용되어 있지 않은 경우 해당 노드에 배포할 수 없음. 톨러레이션을 적용해야만 해당 노드에 배포 가능
- PreferNoSchedule : NoSchedule과 동일하지만, 스케줄러가 판단하기에 할당할 수 있는 노드가 더 이상 없을 경우 어쩔 수 없이 테인트를 무시하고 해당 노드에 배포
- NoExecute : NoSchedule과 동일하지만, 테인트를 적용하기 이전부터 해당 노드에 배포되어 존재하는 파드 중 톨러레이션이 없는 파드를 다른 노드로 내쫓음
3. 톨러레이션 적용
- yaml 파일에 톨러레이션 설정
- 톨러레이션을 적용하지 않은 경우 파드 배포 결과 확인(w2-k8s 노드에 테인트 적용)
- 톨러레이션을 적용한 경우 파드 배포 결과 확인(w2-k8s 노드에 테인트 적용)
4. 참고
- https://www.udemy.com/course/certified-kubernetes-administrator-with-practice-tests/