Fairy ' s
[K8s] Taints and Tolerations vs Node Affinity 본문
taint와 toleration을 이용해 blue, red, green 노드에 각각 색에 맞는 파드만 배치되도록 하려면 어떻게 해야할까? 노드에 taint를 색에 맞게 작용하고, 각 색상을 허용하도록 파드에 toleration을 설정하면 알맞는 toleration을 가진 파드만 수용할 수 있다. 하지만, taint와 toleration를 적용해도, 파드가 같은 색 노드에만 배치된다고 보장할 순 없다. 이 말은 즉, red 파드는 taint와 toleration 세트가 없는 다른 노드 중 하나에 배치될 수도 있다.
Node Affinity를 이용하면 이 문제를 해결할 수 있다. Node Affinity로 알맞는 색상으로 노드에 label을 지정하고, Node Selector를 설정해서 파드를 노드에 연결하게 되면, 파드는 맞는 노드로 이동할 수 있게 된다. 하지만, 다른 파드가 색이 있는 노드에 배치되지 않는다고 보장할 수도 없다.
$ kubectl taint nodes blue color=blue:NoSchedule
# blue-pod-taint.yaml
apiVersion: v1
kind: Pod
metadata:
name: blue
spec:
containers:
- name: blue
image: nginx
tolerations:
- key: color
operator: Equal
value: blue
effect: NoSchedule
# blue-pod-affinity.yaml
apiVersion: v1
kind: Pod
metadata:
name: blue
spec:
containers:
- name: blue
image: nginx
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: color
operator: In
values:
- blue
taint & toleration 그리고 Node Affinity 규칙을 함께 사용해 특정 파드에 대한 노드를 완전 전용 노드로 설정할 수 있다. 먼저 taint & toleration을 사용해 다른 파드가 노드에 배치되지 않도록 한 다음, Node Affinity를 사용해 파드가 다른 노드에 배치되지 않도록 한다.
# taint & toleration + Node Affinity
# blue-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: blue
spec:
containers:
- name: blue
image: nginx
tolerations:
- key: color
operator: Equal
value: blue
effect: NoSchedule
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: color
operator: In
values:
- blue
$ kubectl apply -f blue-pod.yaml
'Study > K8s' 카테고리의 다른 글
[K8s] 리소스 요구사항 (0) | 2023.08.24 |
---|---|
[K8s] Node Selectors & Affinity (0) | 2023.08.23 |
[K8s] Taints and Tolerations (0) | 2023.08.17 |
[K8s] Labels & Selectors (0) | 2023.08.14 |
[K8s] Scheduling (0) | 2023.08.10 |
Comments