쿠버네티스에서 Pod이 특정 조건에서만 실행되도록 제어하는 방법은 매우 중요합니다.
이번 글에서는 Taint & Toleration을 이용한 노드 제어와 Pod이 재시작될 때마다 새로운 ID를 생성하는 방법을 다룹니다.
📌 글에서 다루는 상황들
1️⃣ Taint 및 Toleration을 이용하여 특정 노드에서 실행
2️⃣ Pod이 재시작될 때마다 새로운 ID를 생성해야 하는 경우
각 문제를 실무에서 바로 활용할 수 있도록 Manifest 템플릿과 예상 결과 값을 제공합니다.
1️⃣ Taint 및 Toleration을 이용하여 특정 노드에서 실행
📍 상황 설명
운영팀에서 특정 애플리케이션을 지정된 노드에서만 실행하도록 요구했습니다.
이 애플리케이션은 다른 워크로드와 분리되어 특정 노드에서만 실행되어야 합니다.
• 특정 노드에 Taint를 추가하여 기본적으로 모든 Pod의 실행을 차단합니다.
• Pod에 Toleration을 추가하여 특정 노드에서만 실행되도록 허용합니다.
🛠️ 해결 방법
1. 노드에 Taint를 추가하여 기본적으로 Pod이 실행되지 않도록 설정해야 합니다.
kubectl taint nodes <노드이름> key=value:NoSchedule
• <노드이름>: Taint를 추가할 노드
• NoSchedule: 이 Taint가 적용된 노드에는 허용된 Pod만 실행됨
2. Pod에 Toleration을 추가하여 특정 Taint가 적용된 노드에서도 실행되도록 설정해야 합니다.
✅ 정답 Manifest (Toleration이 적용된 Pod)
apiVersion: v1
kind: Pod
metadata:
name: tainted-pod # Pod의 이름
spec:
tolerations:
- key: "key" # 노드에 설정된 Taint의 키
operator: "Equal"
value: "value" # 노드에 설정된 Taint의 값
effect: "NoSchedule" # 해당 Taint에 대해 실행을 허용
containers:
- name: my-app
image: my-app:latest # 애플리케이션 컨테이너
📌 적용 후 예상 결과 값
1) Taint 추가 확인
kubectl describe node <노드이름> | grep Taints
💡 예상 출력 값
Taints: key=value:NoSchedule
2) Pod 생성 확인
kubectl get pods -o wide
💡 예상 출력 값
NAME READY STATUS RESTARTS AGE NODE
tainted-pod 1/1 Running 0 5s special-node
2️⃣ Pod이 재시작될 때마다 새로운 ID를 생성해야 하는 경우
📍 상황 설명
일부 애플리케이션은 실행될 때마다 고유한 ID를 생성해야 하는 요구 사항이 있습니다.
이러한 경우, Pod이 재시작될 때마다 새로운 ID가 설정되도록 구성해야 합니다.
• Pod의 이름은 random-id-pod이어야 합니다.
• 실행될 때마다 환경 변수로 새로운 UUID를 생성해야 합니다.
🛠️ 해결 방법
1. Pod 실행 시마다 새로운 환경 변수 값을 생성해야 합니다.
• valueFrom.fieldRef.fieldPath를 사용하여 metadata.uid 값을 환경 변수로 전달
2. Pod이 재시작되면 UID가 변경되도록 설정해야 합니다.
• restartPolicy: Always로 설정하여 재시작 시마다 새로운 UID를 받도록 구성
✅ 정답 Manifest (재시작 시 새로운 ID가 적용된 Pod)
apiVersion: v1
kind: Pod
metadata:
name: random-id-pod # Pod의 이름
spec:
restartPolicy: Always # 재시작될 때마다 새로운 환경 변수를 받도록 설정
containers:
- name: my-app
image: my-app:latest # 애플리케이션 컨테이너
env:
- name: INSTANCE_ID
valueFrom:
fieldRef:
fieldPath: metadata.uid # Pod의 UID를 환경 변수로 설정
📌 적용 후 예상 결과 값
1) Pod 생성 확인
kubectl get pods
💡 예상 출력 값
NAME READY STATUS RESTARTS AGE
random-id-pod 1/1 Running 0 5s
2) Pod 내부에서 생성된 ID 확인
kubectl exec -it random-id-pod -- env | grep INSTANCE_ID
💡 예상 출력 값
INSTANCE_ID=a3b2c1d4-e5f6-7890-1234-56789abcdef0
3) Pod 재시작 후 새로운 ID 확인
kubectl delete pod random-id-pod
kubectl apply -f random-id-pod.yaml
kubectl exec -it random-id-pod -- env | grep INSTANCE_ID
💡 예상 출력 값
INSTANCE_ID=b4c3d2e1-f6a5-0987-6543-210fedcba987
'Kubernetes > Kubernetes Best Practices' 카테고리의 다른 글
[Scenario Playbook Ep.7] 🚀 Deployment 편 #2 | Canary & Blue-Green 배포 (0) | 2025.03.15 |
---|---|
[Scenario Playbook Ep.6] 🚀 Deployment 편 #1 | 배포 전략 및 롤링 업데이트 (0) | 2025.03.15 |
[Scenario Playbook Ep.4] 🚀 POD 편 #4 | 스토리지 & 데이터 유지 (0) | 2025.03.15 |
[Scenario Playbook Ep.3] 🚀 POD 편 #3 | 다중 컨테이너 & 초기화 설정 (0) | 2025.03.15 |
[Scenario Playbook Ep.2] 🚀 POD 편 #2 | 리소스 제한 & 특정 노드 실행 (0) | 2025.03.15 |