[kubernetes] 노드를 보호하는 자물쇠와 열쇠 (Taints, Toleration)

vinca·2023년 12월 14일
0

☸️ kubernetes

목록 보기
22/35

Introduction

파드가 스케쥴링될 때 어떤 노드에 배치될 것인지 결정 된다.

이 때 해당 파드의 deploy를 막는 자물쇠인 Taints와 이를 허용하는 Toleration에 대해서 알아보자.

마스터 노드의 Taints

지금까지 파드를 배포하면 당연하게도 워커노드 중 일부에 파드가 배포되었다.
마스터 노드에는 파드가 배포되지 않았을까?

이는 마스터 노드에 스케쥴링하지 않도록 하는 Taints가 걸려있기 때문이다.
따라서 이를 열기(허용하기) 위해서는 Tolerations쪽에 똑같은 형식의 열쇠가 필요하다.

effect와 key로 구성이 되어있는데, 각각의 조건의 의미는 다음과 같다.

조건

예시

해당 조건을 바탕으로 마스터 노드의 예시를 살펴보자.

  • effectNoschedule이므로 스케쥴 하지 않고,
  • Key를 기준으로 일치하는지 확인하며
  • Operator로 이러한 Key가 "완전히 동일한가"를(Equal) 기준으로 판단한다.
    (기본값 Equal)

이제 이를 데몬셋 형태의 파드를 배포할 때, 이러한 Taint를 뚫어줄 수 있는 열쇠Tolerations 파라미터를 추가하여 배포해 보자.


실습

마스터 노드 - Taints

마스터 노드의 Taints를 확인해 보자.

k get node m-k8s -o yaml | grep -i taints -F5
  • | : 앞 명령의 출력을 다음 명령의 입력으로 전달
  • grep : 검색
  • -i : 대소문자를 구분하지 않도록 설정.
  • taints -F3 : 는 "taints" 단어를 찾고, 위로 3줄 아래로 3줄을 출력

실제로 effect: NoSchedulekey: node-role.kubernetes.io/master
taints로 걸려있는 것을 확인할 수 있다.

데몬셋 파드 - Tolerations

데몬셋을 배포되는 파드 쪽의 Tolerations를 살펴 보자.

cat _Lecture_k8s_learning.kit/ch6/6.7/daemonset-w-tolerations.yaml | grep -i tolerations: -F3

결과

마스터 노드에 파드가 배포되는 것을 확인할 수 있다.


Taints 추가 방법

워커노드에 Taints 추가

Taints를 추가해보자.

k taint node w3-k8s DB=customer-info:NoSchedule

key=value 형식으로 Taints가 워커노드 3번에 추가된 것을 확인할 수 있다.

이를 여는 Tolerations

다음과 같이 테인트와 똑같은 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":[]}}'
profile
붉은 배 오색 딱다구리 개발자 🦃Cloud & DevOps

0개의 댓글