📌 1. Taints(테인트)와 Tolerations(톨러레이션)의 개념
Kubernetes에서 Taints(테인트) 와 Tolerations(톨러레이션) 은 어떤 Pod이 특정 Node에서 실행될 수 있도록 제한하거나 허용하는 기능을 제공한다.
- Taint (테인트):
- 노드(Node)에 설정됨
- 특정 Pod이 해당 노드에서 실행되지 않도록 제한하는 역할.
- 🛑 "이 노드에서는 특정 Pod을 받지 않겠다!"
- Toleration (톨러레이션):
- Pod에 설정됨
- 특정 노드의 Taint를 무시하고 해당 노드에서 실행될 수 있도록 허용하는 역할.
- ✅ "나는 이 노드에서 실행될 수 있어!"
Taints와 Tolerations의 필요성
특정 Pod가 실행되기 위해 필요한 리소스들을 가지고 있는 Node가 있을 때,
Pod가 Node에 스케줄링 되기 위해서 다른 Pod를 제한시킬 필요가 있는데 이때 사용.
Taint 적용
kubectl taint nodes <node-name> <key=value>:<taint-effect>
taint-effect: Taint가 적용된 Node에 스케줄링될 때 Tolerance를 가지고 있지 않는 Pod에 대한 처리
Taint 비활성화
적용 명령어에 - 하이픈을 추가하여 제거한다.
kubectl taint nodes <node-name> <key=value>:<taint-effect>-
📌 3. Taint 효과 유형 (Effect)
Kubernetes에서 Taint는 세 가지 효과(Effect) 를 가질 수 있다.
Taint Effect 설명
NoSchedule | ❌ Toleration이 없는 Pod은 해당 노드에 스케줄링되지 않음 |
PreferNoSchedule | 🚧 Toleration이 없는 Pod을 스케줄링하지 않으려 하지만, 반드시 차단하지는 않음 |
NoExecute | 🔥 Toleration이 없는 Pod은 즉시 제거(Eviction)됨 |
Toleration 적용
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
spec:
containers:
- name: nginx-container
image: nginx
tolerations:
- key: "app"
operator: "Equal"
value: "my-app"
effect: "NoSchedule"
Taint와 Toleration의 한계
Taint를 통해 특정 파드를 제외한 다른 파드들이 배치되지 못하도록 설정할 수 있지만,
해당 파드가 노드에 배치될 수 있도록 강제하지는 못한다.
즉 스케줄링 될 때 파드가 다른 노드에 배치될 수도 있다.
따라서 이를 강제하기 위해 Node Affinity를 추가할 수 있다.
Master Node
쿠버네티스의 Master Node는 클러스터를 관리하는 핵심적인 역할을 담당하고 있다.
따라서 일반적인 Pod가 배치되지 않도록 Taint가 기본적으로 설정되어있다.
애플리케이션 워크로드가 실행되면 Node의 리소스가 부족해져 쿠버네티스 관리 프로세스인 API Server, Scheduler, Controller 등의 성능이 저하될 위험이 있다.
Taint확인방법
kubectl describe node master-node | grep Taint
node-role.kubernetes.io/control-plane:NoSchedule
'Kubernetes' 카테고리의 다른 글
[k8s] Node Selector (0) | 2025.02.05 |
---|---|
[k8s] Taint and Toleration 개념 (0) | 2025.02.05 |
[k8s] Lables&Selectors 개념 (0) | 2025.02.05 |
[k8s] Scheduling, Binding 개념 (0) | 2025.02.04 |
[k8s] NameSpace 개념 (0) | 2025.01.31 |