파드가 스케쥴링될 때 어떤 노드에 배치될 것인지 결정 된다.
이 때 해당 파드의 deploy를 막는 자물쇠인 Taints
와 이를 허용하는 Toleration
에 대해서 알아보자.
지금까지 파드를 배포하면 당연하게도 워커노드 중 일부에 파드가 배포되었다.
왜 마스터 노드에는 파드가 배포되지 않았을까?
이는 마스터 노드에 스케쥴링하지 않도록 하는 Taints가 걸려있기 때문이다.
따라서 이를 열기(허용하기) 위해서는 Tolerations
쪽에 똑같은 형식의 열쇠가 필요하다.
effect와 key로 구성이 되어있는데, 각각의 조건의 의미는 다음과 같다.
해당 조건을 바탕으로 마스터 노드의 예시를 살펴보자.
effect
가 Noschedule이므로 스케쥴 하지 않고,Key
를 기준으로 일치하는지 확인하며Operator
로 이러한Key
가 "완전히 동일한가"를(Equal) 기준으로 판단한다.
(기본값 Equal)
이제 이를 데몬셋 형태의 파드를 배포할 때, 이러한 Taint
를 뚫어줄 수 있는 열쇠인 Tolerations
파라미터를 추가하여 배포해 보자.
마스터 노드의 Taints를 확인해 보자.
k get node m-k8s -o yaml | grep -i taints -F5
|
: 앞 명령의 출력을 다음 명령의 입력으로 전달grep
: 검색-i
: 대소문자를 구분하지 않도록 설정.taints -F3
: 는 "taints" 단어를 찾고, 위로 3줄 아래로 3줄을 출력
실제로 effect: NoSchedule
및 key: node-role.kubernetes.io/master
가
taints
로 걸려있는 것을 확인할 수 있다.
데몬셋을 배포되는 파드 쪽의 Tolerations를 살펴 보자.
cat _Lecture_k8s_learning.kit/ch6/6.7/daemonset-w-tolerations.yaml | grep -i tolerations: -F3
마스터 노드에 파드가 배포되는 것을 확인할 수 있다.
Taints를 추가해보자.
k taint node w3-k8s DB=customer-info:NoSchedule
key=value
형식으로 Taints
가 워커노드 3
번에 추가된 것을 확인할 수 있다.
다음과 같이 테인트와 똑같은 Tolerations를 작성해서 파드를 배포해주면 된다.
🧨주의! 1:1 매칭이 아니에요!
Taints
: 🔒자물쇠Tolerations
: 🔑열쇠node
: 🏡집
🔑열쇠
를 들고 있다고 해서🔒자물쇠
가 없는 집에 못 들어가는 것은 아니다. 즉, 자물쇠가 걸려있는 집을 포함해서 모든🏡집
에 다 들어갈 수 있다.
따라서 워커노드 1
, 2
, 3
모든 노드에 다 배포되는 것을 확인할 수 있다.
특정 테인트만 제거하려면 해당 테인트의 키(Key)를 지정하여 제거할 수 있다.
kubectl patch node w1-k8s -p '{"spec":{"taints":[{"key":"key1","effect":"NoExecute"}]}}'
전체 테인트를 제거하는 방법은 다음과 같다.
patch를 통해 노드의 스펙(spec)을 수정하며, 여기서 taints 배열을 비워서 테인트를 제거할 수 있다.
kubectl patch node w1-k8s -p '{"spec":{"taints":[]}}'