Kubernetes/Kubernetes Best Practices

[Scenario Playbook Ep.27] 🚀 DaemonSet 편 #2 | Taint & Toleration을 이용한 특정 노드 실행

ygtoken 2025. 3. 16. 17:46
728x90

 

쿠버네티스에서는 Taint & Toleration을 활용하여 특정 노드에서만 DaemonSet을 실행할 수 있습니다.

이번 글에서는 Taint를 적용하여 특정 노드에서만 DaemonSet이 배포되도록 설정하는 방법을 다룹니다.

 


📌 글에서 다루는 상황들

 

1️⃣ 특정 노드에서만 실행되도록 Taint & Toleration 설정

2️⃣ 특정 노드에서만 실행되는 DaemonSet 배포 검증

 

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

 


1️⃣ 특정 노드에서만 실행되도록 Taint & Toleration 설정

 

❓ 문제 상황

 

운영팀에서 모니터링 에이전트를 특정 노드에서만 실행해야 하는 요구사항이 생겼습니다.

클러스터의 모든 노드가 아니라, 특정 노드에만 Pod이 실행되도록 Taint & Toleration을 적용해야 합니다.

특정 노드에 monitoring-only=true:NoSchedule Taint를 적용해야 합니다.

DaemonSet의 이름은 monitoring-agent이어야 합니다.

tolerations를 사용하여 특정 Taint를 가진 노드에서만 실행되도록 설정해야 합니다.

 

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

 


🛠️ 해결 방법

 

1. 특정 노드에 Taint를 추가하여 기본적으로 모든 Pod이 실행되지 않도록 설정해야 합니다.

monitoring-only=true:NoSchedule을 설정하여 일반적인 Pod 배포를 차단

 

2. DaemonSet의 tolerations를 설정하여 Taint가 적용된 노드에서만 실행되도록 설정해야 합니다.

 


✅ 정답 Manifest (Taint & Toleration을 적용한 DaemonSet 설정)

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: monitoring-agent  # DaemonSet 이름
spec:
  selector:
    matchLabels:
      name: monitoring-agent  # Pod 선택을 위한 레이블
  template:
    metadata:
      labels:
        name: monitoring-agent  # Pod 레이블
    spec:
      tolerations:
      - key: "monitoring-only"
        operator: "Equal"
        value: "true"
        effect: "NoSchedule"  # Taint가 설정된 노드에서만 실행
      containers:
      - name: monitoring
        image: busybox  # 테스트용 컨테이너
        command: ["sh", "-c", "echo Monitoring agent running; sleep 3600"]

 

 


📌 적용 후 예상 결과 값

 

1. 특정 노드에 Taint 추가

kubectl taint nodes worker-node1 monitoring-only=true:NoSchedule

 

💡 예상 출력 값

node/worker-node1 tainted

 

2. DaemonSet 생성 확인

kubectl get daemonset

 

💡 예상 출력 값

NAME               DESIRED   CURRENT   READY   AGE
monitoring-agent   1         1         1       5s

 

3. Pod이 특정 노드에서만 실행되는지 확인

kubectl get pods -o wide

 

💡 예상 출력 값

NAME                      READY   STATUS    NODE         AGE
monitoring-agent-xyz1     1/1     Running   worker-node1  5s

 

4. Taint가 적용되지 않은 노드에서는 실행되지 않는지 확인

kubectl get pods --all-namespaces -o wide | grep monitoring-agent

 

💡 예상 출력 값

monitoring-agent-xyz1     1/1     Running   worker-node1  5s  # 다른 노드에서는 실행되지 않음

 

 


2️⃣ 특정 노드에서만 실행되는 DaemonSet 배포 검증

 

❓ 문제 상황

 

운영팀에서 DaemonSet이 설정한 Taint를 적용한 노드에서만 실행되는지 검증해야 하는 요구사항이 생겼습니다.

이를 위해 새로운 노드를 추가하고 해당 노드에 Taint를 적용한 후 DaemonSet이 올바르게 배포되는지 확인해야 합니다.

 

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

 


🛠️ 해결 방법

 

1. 새로운 노드(worker-node2)에 동일한 Taint를 적용해야 합니다.

monitoring-only=true:NoSchedule Taint를 추가

 

2. 새로운 노드에서 DaemonSet이 자동으로 배포되는지 확인해야 합니다.

 


✅ 검증 과정

1. 새로운 노드에 동일한 Taint 추가

kubectl taint nodes worker-node2 monitoring-only=true:NoSchedule

 

💡 예상 출력 값

node/worker-node2 tainted

 

2. DaemonSet이 새로운 노드에도 배포되었는지 확인

kubectl get pods -o wide

 

💡 예상 출력 값

NAME                      READY   STATUS    NODE         AGE
monitoring-agent-xyz1     1/1     Running   worker-node1  5s
monitoring-agent-abc2     1/1     Running   worker-node2  5s

 

3. Taint가 적용되지 않은 노드에서는 실행되지 않는지 확인

kubectl get pods --all-namespaces -o wide | grep monitoring-agent

 

💡 예상 출력 값

monitoring-agent-xyz1     1/1     Running   worker-node1  5s  
monitoring-agent-abc2     1/1     Running   worker-node2  5s  # Taint가 적용된 노드에서만 실행

 

728x90