Taint 와 Tolerations 은 어떤 파드가 특정 노드를 사용할 수 있는지를 제한하고자 사용한다
📌 Taint
- 테인트는 일반적으로 어떤 파드가 해당 노드에 스케줄링되지 못하게 하는 역할을 합니다.
- 특정 테인트가 있는 노드에는 일치하는 톨러레이션을 가진 파드만 스케줄링됩니다.
📌 Tolerations
- 파드가 어떤 특정 노드에 스케줄링될 수 있도록 하는 설정입니다.
- 톨러레이션은 파드의 스펙(spec)에서 설정되며, 파드의 정의에 어떤 노드 테인트를 허용할지를 지정합니다.
🔖 간단한 예시
- 특정 노드에는 GPU가 있다 (테인트가 부여됨)
- 파드는 GPU를 필요로 하는데, 특정 노드에만 스케줄링하고 싶다
이때, 해당 파드의 정의에 특정 톨러레이션을 추가하여, GPU가 있는 노드에도 스케줄링되게 할 수 있다.
이는 파드가 특정 테인트를 허용하도록 만드는 것
📝 Node 에 Taint 설정 추가
kubectl taint node [node-name] key=value:NoSchedule | PreferNoSchedule | NoExcute
🔍 Taint의 Effect 종류
- NoSchedule : 지정된 노드에 스케줄링되지 않도록 막습니다. 이는 특정 노드에 파드가 실행되지 않도록 강제하는 데 사용됩니다.
- PreferNoSchedule : 특정 노드에 스케줄링되지 않는 것이 좋지만, 필수적이지는 않을 때 사용됩니다. 다른 노드에 스케줄링하는 것이 가능하지만 지정된 노드가 가능한 경우 사용합니다.
- NoExcute : 파드가 실행되고 있는 상태에서도 해당 노드의 상태가 변경되면 파드를 제거하도록 지시합니다. 주로 노드에 문제가 발생하거나 조건이 변화했을 때 사용됩니다.
📝 Pod 에 Tolerations 설정 추가
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
tolerations:
- key: "example-key"
operator: "Exists"
effect: "NoSchedule"