관리 메뉴

피터의 개발이야기

[kubernetes] taint drain cordon 차이점 본문

Kubernetes/기초공부

[kubernetes] taint drain cordon 차이점

기록하는 백앤드개발자 2023. 5. 31. 06:40
반응형

 

ㅇ taint 

특정 키와 값이 일치하는 Pod만 해당 노드에서 예약되도록 한다.

- 워커노드의 특성에 따른 Pod배치 시에 유용하다.

 

$ kubectl taint nodes <statisticsNodeName> app=statistics:NoSchedule

 예를 들어 통계작업을 하는 Pod의 경우 메모리 사용량이 높기 때문에 메모리에 특화된 WorkNode그룹에 스케줄해야할 필요가 있다.

이런 경우 위와 같이 taint를 적용하여 스케줄링이 가능하다.

 

위에서 추가했던 테인트를 제거하려면, 다음을 실행한다. 명령 끝에 있는 '-'만 유일한 차이점이다.

$ kubectl taint nodes <statisticsNodeName> app=statistics:NoSchedule-

 

ㅇ toleration

-  taint에 대한 관용이다. 그래서 노드에 설정 taint가 다른 Pod Scheduling을 막았지만, Pod에 toleration를 설정하여 해당 노드에 Scheduling을 가능하게 할 수 있다.

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  tolerations:
  - key: "app"
    operator: "Exists"
    value: "statistics"
    effect: "NoSchedule"

- NoSchedule: 이 taint를 허용하지 않는 Pod는 노드에서 예약되지 않는다. 다만, 기존에 있는 Pod는 유지.

- NoExecute: Pod가 이미 노드에서 실행 중인 경우 노드에서 Pod가 제거되고, 스케줄링도 막는다.

 

kube문서: 테인트(Taints)와 톨러레이션(Tolerations)

 

 

ㅇ cordon

특정 노드의 Scheduling Disable

 - cordon을 지정하게 되면 스케줄링을 막아 신규 Pod의 유입을 막는다.

 - 일반적으로 유지관리 또는 업그레이드 기간 중에 사용한다.

 - uncordon으로 다시 스케줄링이 가능한다.

 

$ kubectl cordon <노드명> 
$ kubectl uncordon <노드명>

 

kube문서: cordon

 

 

ㅇ drain

특정 노드의 Pod를 모두삭제하고 Scheduling Disable

이 명령은 API 서버에서 삭제할 수 없는 포드를 제외하고 노드에서 모든 포드를 제거/이동하는 데 사용된다.

일반적으로 Node의 하드웨어 변경작업 시 사용된다.

 

$ kubectl drain <노드 이름>

 

kube문서: Safely Drain a Node

 

반응형
Comments