Kubernetes/Kubernetes Best Practices

[Scenario Playbook - 심화편 | Medium Level #5] Taint 및 Toleration을 활용한 특정 노드 할당 전략

ygtoken 2025. 3. 16. 18:57
728x90

 

쿠버네티스에서는 일부 노드를 특정 애플리케이션에만 할당하거나, 특정 워크로드가 특정 노드에서만 실행되도록 제한할 필요가 있습니다.

이를 위해 Taint 및 Toleration을 활용하여 특정 노드에서만 Pod이 실행되도록 설정하는 방법을 다룹니다.

 


📌 글에서 다루는 상황들

 

1. Taint를 설정하여 특정 노드에서만 특정 Pod이 실행되도록 제한하는 방법

2. Toleration을 추가하여 특정 Pod이 Taint가 적용된 노드에서 실행되도록 허용하는 방법

3. kubectl을 활용한 Taint 및 Toleration 설정 검증 및 적용 상태 확인

 

각 문제를 실무에서 바로 활용할 수 있도록 Manifest 템플릿과 예상 결과 값을 제공합니다.

 


1️⃣ Taint를 설정하여 특정 노드에서만 특정 Pod이 실행되도록 제한하는 방법

 

❓ 문제 상황

 

운영팀에서 일반적인 애플리케이션이 특정 노드에서 실행되지 않도록 제한하고, 오직 특정 워크로드만 해당 노드에서 실행되도록 설정해야 합니다.

이를 위해 Taint를 설정하여 기본적으로 해당 노드에서 실행할 수 없는 상태로 만들고, 특정 애플리케이션만 허용해야 합니다.

대상 노드: node-special

Taint 키: special-node

Taint 값: true

Taint 효과: NoSchedule (해당 노드에 Toleration이 없는 Pod은 스케줄링되지 않음)

 

✅ 어떻게 해결할 수 있을까요?

 


🛠️ 해결 방법

 

1. kubectl taint 명령어를 사용하여 특정 노드에 Taint를 추가합니다.

 

2. kubectl get nodes 명령어를 사용하여 Taint가 정상적으로 적용되었는지 확인합니다.

 


✅ Taint 설정을 위한 명령어 실행

 

🔹 특정 노드에 Taint 추가

kubectl taint nodes node-special special-node=true:NoSchedule

 

💡 예상 출력 값

node/node-special tainted

 

🔹 노드의 Taint 확인

kubectl describe node node-special | grep Taints

 

💡 예상 출력 값

Taints: special-node=true:NoSchedule

이제 node-special 노드에는 Toleration이 없는 Pod이 스케줄링되지 않음

 


2️⃣ Toleration을 추가하여 특정 Pod이 Taint가 적용된 노드에서 실행되도록 허용하는 방법

 

❓ 문제 상황

 

운영팀에서 특정 Pod을 node-special 노드에서 실행해야 하지만, 해당 노드는 NoSchedule Taint가 설정되어 있어 기본적으로 배포되지 않습니다.

이를 해결하기 위해 Pod에 Toleration을 추가하여 Tainted 노드에서도 실행되도록 설정해야 합니다.

Pod 이름: special-app

Toleration 키: special-node

Toleration 값: true

 

✅ 어떻게 해결할 수 있을까요?

 


🛠️ 해결 방법

 

1. Toleration을 Pod의 spec에 추가하여 Tainted 노드에서도 실행되도록 설정합니다.

 

2. kubectl describe pod 명령어를 사용하여 Pod이 정상적으로 실행되었는지 확인합니다.

 


✅ 정답 Manifest (Toleration 설정)

apiVersion: v1
kind: Pod
metadata:
  name: special-app
spec:
  tolerations:
  - key: "special-node"
    operator: "Equal"
    value: "true"
    effect: "NoSchedule"
  containers:
  - name: special-container
    image: nginx

 

 


📌 적용 후 예상 결과 값

 

1. Pod 배포 후 스케줄링 상태 확인

kubectl get pods -o wide

 

💡 예상 출력 값

NAME           READY   STATUS    NODE          AGE
special-app    1/1     Running   node-special  10s

Toleration이 적용된 Pod이 Tainted 노드에서 정상적으로 실행됨

 


3️⃣ kubectl을 활용한 Taint 및 Toleration 설정 검증 및 적용 상태 확인

 

❓ 문제 상황

 

운영팀에서 현재 클러스터에서 어떤 노드에 Taint가 적용되었는지, 특정 Pod이 적절히 배포되었는지 확인해야 합니다.

kubectl 명령어를 활용하여 Taint 및 Toleration 설정 상태를 점검해야 합니다.

 

✅ 어떻게 해결할 수 있을까요?

 


🛠️ 해결 방법

 

1. kubectl describe nodes 명령어를 사용하여 Taint가 올바르게 설정되었는지 확인합니다.

 

2. kubectl get pods 명령어를 활용하여 특정 Pod이 올바른 노드에서 실행되고 있는지 확인합니다.

 


✅ Taint 및 Toleration 설정 검증 명령어

 

🔹 클러스터 내 모든 노드의 Taint 상태 확인

kubectl get nodes -o json | jq '.items[].spec.taints'

 

💡 예상 출력 값 (Taint가 설정된 노드)

[
  {
    "effect": "NoSchedule",
    "key": "special-node",
    "value": "true"
  }
]

 

🔹 특정 Pod이 Tainted 노드에서 실행되고 있는지 확인

kubectl get pod special-app -o wide

 

💡 예상 출력 값

NAME           READY   STATUS    NODE          AGE
special-app    1/1     Running   node-special  20s

Taint 및 Toleration이 올바르게 적용되었으며, 특정 Pod이 지정된 노드에서 실행됨

 

728x90