[Kubernetes] Taints & Toleration VS Node Affinity


서론

Taints와 Toleration은 파드가 특정 노드에 접근하는 것을 제한하기 위해 사용하는 기능이다.

그리고 Node Affinity는 파드가 특정 노드에 배치되도록 선호하거나 강제하기 위해 사용하는 기능이다.

이 둘의 기능의 차이점에 대해서 알아본다.

Taint & Toleration VS Node Affinity

파란, 빨강, 초록 파드가 있고 파란, 빨강, 초록 노드가 있다고 가정해보자.

추가적으로 회색(다른) 파드가 2개 있고 회색(다른) 노드도 2개가 있다고 하자.

우리의 목표는 빨간 파드는 빨강 노드에, 파란 파드는 파랑 노드에, 초록 노드는 초록노드에만 전용으로 배포하고 싶다.

다시말해 파란 파드는 파란 노드에 배포하고 싶은 것이다.

그림으로 나타내면 아래와 같다.

목표 달성을 위해 파란, 빨강, 초록 노드와 파드에 Taints, Toleration을 적용시킨다.

그렇게 되면 회색(다른) 노드는 파란, 빨강, 초록 파드에 배포되지 못한다.

즉, 파드가 특정 노드에 접근하는 것을 제한하는 것이다.

  • 파란 파드
    • 빨강 노드, 초록 노드에는 가지 못하고 파란 노드, 회색(다른) 노드에 배포될 수 있다.
  • 빨강 파드
    • 파랑 노드, 초록 노드에는 가지 못하고 빨강 노드, 회색(다른) 노드에 배포될 수 있다.
  • 초록 파드
    • 파랑 노드, 빨강 노드에는 가지 못하고 초록 노드, 회색(다른) 노드에 배포될 수 있다.

다시말해 파란, 빨강, 초록 파드들은 같은 색상끼리의 파란, 빨강, 초록 노드에 배포될 수 있지만 회색(다른) 노드에도 배포될 수 있다.

이것은 우리가 달성하고자 하는 목표가 아니다.

그럼 Taints & Toleration이 아닌 NodeAffinity를 활용해보자.

NodeAffinity를 각 파드와 노드에 적용시켰다.

그랬더니 각 초록, 파란, 빨강 파드는 초록, 파란, 빨강 노드에만 배포되는 것이 보장되었다.

즉, 파드가 특정 노드에 배치되도록 강제한 것이다.

그러나 회색(다른)파드 들은 파란, 빨강 그리고 회색(다른) 노드에도 배포될 수 있게 된다.

이것 또한 우리가 바라는 바가 아니다.

이를 해결하기 위해 Taint, Toleration, Node Affinity를 함께 사용하면 우리의 목표를 달성할 수 있게 된다.

이렇게 되면 Toleration이 없는 회색 파드들이 색상이 있는 파드들에 배포될 수 없게 된다.

Taint, Toleration의 문제였던 색상파드들이 회색 노드에 배포될 수 있는 문제를 해결하기 위해 추가적으로 Node Affinity를 사용하여 자신의 색상의 노드들에 배포되도록 강제하게 되면 해결이 된다.

NodeAffinity의 문제였던 회색 파드들이 색상 노드들로 배포되는 문제점은 Taint, Toleration을 통해 해결이 된다.