home..

Cordon시킨 노드에 Pod 배치하기

Kubernetes schedulepod cordon

TL;DR

노드에 Cordon을 하게되면, 노드에 Taints:  node.kubernetes.io/unschedulable:NoSchedule 를 부여해 스케줄링이 일어나지 않도록 설정합니다.

저 Taint에 대해 Toleration을 똑같이 부여하면 Cordon 된 노드에 Pod를 배치 할 수 있습니다.

Cordon시킨 노드에 Pod 배치하기

이번에 설명드린 팁은 Cordon 된 노드도 일반적인 Taint 와 Toleration 개념의 연장선이기 때문에 Pod를 배치 할 수 있다는 겁니다.

Taint 가 걸려있는 노드는 Pod에 Toleration값을 부여해서 배치가 가능합니다.

Taint & Toleration

Taint (테인트): 노드에 테인트를 적용하면, 해당 노드는 테인트를 용인하지 않는 Pod를 수용하지 않게 됩니다. 즉, 특정 노드가 특정 Pod들 에게 덜 바람직하게 만드는 데 사용됩니다. 테인트는 kubectl taint 명령어를 사용하여 노드에 추가할 수 있습니다.

Toleration (톨러레이션): 톨러레이션은 Pod에 적용되며, 톨러레이션을 가진 Pod는 테인트가 있는 노드에 스케줄링될 수 있습니다. 즉, 특정 테인트를 용인할 수 있는 파드를 지정하는 데 사용됩니다. 톨러레이션은 Pod 스펙(PodSpec)에서 지정할 수 있습니다.

Taint Effect에는 세가지 종류가 있습니다.

  • NoSchedule 이펙트가 있는 무시되지 않은 테인트가 하나 이상 있으면 쿠버네티스는 해당 노드에 Pod를 스케줄하지 않는다.
  • NoSchedule 이펙트가 있는 무시되지 않은 테인트가 없지만 PreferNoSchedule 이펙트가 있는 무시되지 않은 테인트가 하나 이상 있으면 쿠버네티스는 Pod를 노드에 스케쥴하지 않으려고 시도 한다
  • NoExecute 이펙트가 있는 무시되지 않은 테인트가 하나 이상 있으면 Pod가 노드에서 축출되고(노드에서 이미 실행 중인 경우), 노드에서 스케줄되지 않는다(아직 실행되지 않은 경우).

예를들어 노드에 Taint로 두개를 걸었으면

kubectl taint nodes node1 key1=value1:NoSchedule
kubectl taint nodes node1 key1=value1:NoExecute

에 대해서  Pod에는 해당 Toleration들이 있어야 합니다.

tolerations:
- key: "key1"
  operator: "Equal"
  value: "value1"
  effect: "NoSchedule"
- key: "key1"
  operator: "Equal"
  value: "value1"
  effect: "NoExecute"

Cordon 시킨 노드의 Taint

쿠버네티스 노드의 Cordon도 같은 방식으로 이루어집니다.

배포할 deployment에 toleration으로 cordon 명령어를 수행 할 때 추가되는 taint값을 넣으면 강제로 배치할 수 있습니다

tolerations:
- effect: NoSchedule
  key: node.kubernetes.io/unschedulable

예제 yaml파일 첨부합니다


apiVersion: apps/v1
kind: Deployment
metadata:
  name: mont-test
  namespace: test
spec:
  template:
    metadata:
      name: mont-test
      namespace: test
    spec:
      nodeSelector:
        kubernetes.io/hostname: node3
      tolerations:
      - effect: NoSchedule
        key: node.kubernetes.io/unschedulable

해당 방식대로 Toleration 값을 넣고, nodeSelector로 cordon된 노드의 nodename을 넣어주면 pod scheduling이 가능해집니다.

© 2024 mont kim   •  Powered by Soopr   •  Theme  Moonwalk