Fairy ' s

[K8s] Taints and Tolerations vs Node Affinity 본문

Study/K8s

[K8s] Taints and Tolerations vs Node Affinity

berafairy 2023. 8. 24. 17:46

 

 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