Maxima's Lab

[Kubernetes] Pod Scheduling (Taints & Tolerations) 개념 및 예제 코드 본문

Kubernetes

[Kubernetes] Pod Scheduling (Taints & Tolerations) 개념 및 예제 코드

Minima 2024. 6. 13. 00:02
728x90
SMALL

안녕하세요, 오늘은 Pod Scheduling을 하는 방법 중에 하나인 Taints와 Tolerations 개념과 예제 코드에 대해서 알아보겠습니다.

 

Taints와 Tolerations는 노드에 특정 Pod가 스케줄링되는 것을 제어하기 위한 메커니즘이며, 특정 노드에 특정 Pod가 배치되지 않도록 하거나, 특정 Pod가 특정 노드에서만 실행되도록 할 때 사용됩니다. Taints와 Tolerations는 함께 작동하여 노드의 리소스를 보다 효율적으로 사용하고, 특정 요구 사항을 가진 Pod의 배치를 제어하는 개념입니다.

 

Taints 개념을 적용하기 위한 형식은 다음과 같습니다.

 

kubectl taint nodes <node-name> key=value:effect

 

  1. key: Taint의 키.
  2. value: Taint의 값.
  3. effect: Taint의 효과로, 노드에 적용되는 Taint의 동작을 정의하며, 3가지로 구성됨
    • NoSchedule: Taint를 허용하지 않는 Pod는 이 노드에 스케줄링되지 않습니다.
    • PreferNoSchedule: Taint를 허용하지 않는 Pod는 가능하면 이 노드에 스케줄링되지 않도록 합니다.
    • NoExecute: Taint를 허용하지 않는 Pod는 즉시 이 노드에서 제거되거나, 처음부터 이 노드에 스케줄링되지 않습니다.

 

Tolerations 개념을 적용하기 위한 형식은 다음과 같습니다.

 

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

 

이를 활용하여 다음과 같이 YAML 파일을 작성할 수 있습니다.

 

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: nginx
  tolerations:
  - key: "key1"
    operator: "Equal"
    value: "value1"
    effect: "NoSchedule"

 

위의 Taints와 Tolerations는 다음과 같은 상황에서 주로 사용하게 됩니다.

 

  1. 특정 노드에만 특정 Pod 스케줄링: 고성능 컴퓨팅을 필요로 하는 WorkLoad를 특정 노드에만 배치함
  2. 노드 유지보수: 노드를 유지보수 모드로 설정하여, 새로운 Pod가 스케줄링되지 않도록 하고, 기존 Pod를 점차 다른 노드로 이동함
  3. 특정 Pod 격리: 테스트 환경의 Pod가 프로덕션 노드에 스케줄링되지 않도록 함

지금까지, Pod Scheduling 방법 중 하나인 Taints와 Tolerations의 개념에 대해서 알아보고 적용하는 예시에 대해서 알아보았습니다.

감사드립니다.

728x90
LIST
Comments