1️⃣ 개요
쿠버네티스에서 ReplicaSet은 기본적으로 리소스가 충분한 노드에 자동으로 Pod를 배치합니다.
하지만 특정 노드에서만 실행해야 하는 애플리케이션이 있을 경우, Node Selector를 사용하여 원하는 노드에서만 Pod가 배포되도록 제어할 수 있습니다.
이 기능은 Taints & Tolerations과 다르게, 특정 노드에서만 실행되도록 강제하는 방식으로 활용됩니다.
이번 글에서는 ReplicaSet과 Node Selector를 활용한 특정 노드 배포 전략을 설명하겠습니다. 🚀
2️⃣ Node Selector란?
Node Selector는 특정 노드에서만 Pod를 실행할 수 있도록 제한하는 방법입니다.
• 노드에 특정 라벨을 부여한 후, 해당 라벨을 가진 노드에서만 실행되도록 Pod를 제한
• 간단한 노드 선택 기능을 제공하지만, 조건이 제한적이므로 Affinity와 함께 사용하는 것이 일반적
📌 Node Selector 기본 개념
1️⃣ 특정 노드에 라벨(label)을 추가
2️⃣ ReplicaSet에서 해당 라벨을 가진 노드에서만 실행되도록 설정
3️⃣ Node Selector 설정 방법
✅ 1. 특정 노드에 라벨 추가
먼저, 특정 노드에 라벨을 부여해야 합니다.
📌 예제: worker-node 노드에 disktype=ssd 라벨 추가
kubectl label nodes worker-node disktype=ssd
📌 라벨이 정상적으로 적용되었는지 확인
kubectl get nodes --show-labels
✅ 이제 해당 노드는 disktype=ssd 라벨을 가지게 됩니다.
✅ 2. Node Selector를 사용하여 특정 노드에만 ReplicaSet 배포
Node Selector를 사용하여 지정된 라벨을 가진 노드에서만 실행되도록 설정할 수 있습니다.
📌 Node Selector 적용 예제 (SSD 디스크를 가진 노드에서만 실행)
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: my-replicaset
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
nodeSelector:
disktype: ssd
containers:
- name: my-container
image: nginx
📌 설정 설명
✅ nodeSelector: 지정된 라벨을 가진 노드에서만 Pod 실행 가능
✅ disktype: ssd: disktype=ssd 라벨이 있는 노드에서만 실행됨
4️⃣ Node Selector 활용 사례
🚀 1. 특정 하드웨어에서만 실행되도록 설정
• GPU가 필요한 애플리케이션은 GPU 노드에서만 실행
• 특정 CPU 아키텍처(AMD, ARM, Intel)에서만 실행
📌 예제: GPU가 있는 노드에서만 실행
kubectl label nodes gpu-node hardware=gpu
📌 GPU 노드에서 실행되도록 Node Selector 적용
nodeSelector:
hardware: gpu
✅ 이 설정을 적용하면 일반 노드에서는 실행되지 않고, GPU가 있는 노드에서만 실행됨
🚀 2. 고성능 스토리지가 필요한 애플리케이션 배포
• SSD 디스크가 필요한 애플리케이션을 SSD가 장착된 노드에서만 실행
• IOPS가 중요한 애플리케이션을 고성능 노드에서만 실행
📌 예제: SSD 디스크가 있는 노드에서 실행
kubectl label nodes high-perf-node storage=ssd
📌 SSD 노드에서 실행되도록 설정
nodeSelector:
storage: ssd
✅ 이 설정을 적용하면 HDD가 장착된 노드에서는 실행되지 않음
5️⃣ Node Selector 적용 후 효과 검증
✅ 1. 특정 노드에만 배포되었는지 확인
📌 ReplicaSet의 Pod 배포 상태 확인
kubectl get pods -o wide
📌 각 Pod가 배포된 노드 확인
kubectl get pods -o custom-columns="POD:metadata.name,NODE:spec.nodeName"
✅ Pod가 올바른 노드에서 실행되고 있는지 확인해야 합니다.
✅ 2. Node Selector 변경 후 ReplicaSet 재배포
Node Selector 설정을 변경한 후 ReplicaSet을 다시 적용하면, 기존 Pod가 재배포됩니다.
📌 기존 ReplicaSet 삭제 (Pod도 삭제됨)
kubectl delete replicaset my-replicaset
📌 새로운 설정으로 ReplicaSet 재배포
kubectl apply -f replicaset.yaml
✅ 배포 후 kubectl get pods -o wide를 실행하여 Pod가 정상적으로 특정 노드에 배포되었는지 확인합니다.
6️⃣ Node Selector vs Node Affinity 차이점
Node Selector는 특정 노드에서만 Pod를 실행할 수 있도록 설정하는 간단한 기능이지만, 보다 정교한 조건을 적용하려면 Node Affinity를 사용해야 합니다.
📌 Node Selector vs Node Affinity 비교
기능 | Node Selector | Node Affinity |
설정 방식 | 간단한 key-value 매칭 | 다양한 연산자와 조건 설정 가능 |
운영 유연성 | 제한적 (오직 일치 여부만 판단) | 특정 조건에 따라 우선순위 적용 가능 |
적용 대상 | 단순한 노드 선택 | 특정 노드 선호 또는 강제 설정 가능 |
📌 Node Affinity를 활용한 설정 예제
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: disktype
operator: In
values:
- ssd
✅ 보다 유연한 노드 배포 정책을 적용하려면 Node Affinity를 고려하는 것이 좋습니다.
🔥 7️⃣ 결론
✔ Node Selector를 활용하면 특정 노드에서만 ReplicaSet의 Pod를 실행할 수 있음
✔ SSD, GPU, 특정 CPU 아키텍처 등 특정 하드웨어 조건을 가진 노드에서만 실행되도록 설정 가능
✔ 노드에 라벨을 추가한 후, nodeSelector를 사용하여 해당 라벨을 가진 노드에서만 실행되도록 제한 가능
✔ 보다 정교한 조건이 필요하면 Node Selector 대신 Node Affinity를 사용할 수도 있음
✔ Pod가 올바르게 배포되었는지 kubectl get pods -o wide로 확인해야 함
'Kubernetes > Kubernetes Advanced' 카테고리의 다른 글
📌 [Deployment 심화편 #2] Deployment의 동작 원리와 트러블슈팅 (0) | 2025.03.13 |
---|---|
📌 [Deployment 심화편 #1] Deployment의 역할과 실무 활용 방법 (0) | 2025.03.13 |
📌 [ReplicaSet 심화편 #8] ReplicaSet과 Taints & Tolerations: 특정 노드에 Pod 배포 제어 (0) | 2025.03.12 |
📌 [ReplicaSet 심화편 #7] ReplicaSet과 Anti-Affinity: 특정 노드 간 분산 배포 전략 (0) | 2025.03.12 |
📌 [ReplicaSet 심화편 #6] ReplicaSet과 Cluster Autoscaler: 노드 자동 확장과 리소스 최적화 (0) | 2025.03.12 |