Kubernetes/Kubernetes Advanced

📌 [ReplicaSet 심화편 #9] ReplicaSet과 Node Selector: 특정 노드에 Pod 배포 전략

ygtoken 2025. 3. 12. 12:44
728x90

 

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로 확인해야 함

728x90