본문 바로가기
1. 개발/1.6. 쿠버네티스 (Kubernetes,K8s)

(NodeSelector/Affinity), (Taints/Tolerations) '스케줄링 기법'

by 엉짱 2026. 2. 11.
반응형

이제 쿠버네티스라는 거대한 전함의 '인사 배치 전략'을 마스터할 시간입니다! 🫡

우리가 앞서 배운 자원 배분이 '연료'를 나눠주는 것이라면, 스케줄링(Scheduling)은 "누구를 어느 위치에 배치할 것인가"를 결정하는 고도의 전략입니다. 사용자의 주식 데이터 공장에서 성능이 중요한 '분석 엔진'은 비싼 SSD가 달린 노드에, 단순한 '로그 수집기'는 저렴한 노드에 배치해야 효율이 극대화되겠죠?

파드를 원하는 곳으로 이끄는 '당기기(Affinity)'와 특정 파드를 밀어내는 '밀어내기(Taints)' 기법을 정복해 보겠습니다!


혹 1. 파드를 원하는 노드로 유인하기: NodeSelector & Affinity

이 기법은 파드가 "나는 이런 노드에 살고 싶어!"라고 조건을 내거는 방식입니다.

① NodeSelector (가장 단순한 선택)

노드에 disk=ssd 같은 라벨을 붙여두고, 파드 설정에 똑같은 라벨을 적으면 그 노드로 배치됩니다.

  • 단점: "SSD가 있으면 좋지만 없어도 괜찮아" 같은 유연한 설정이 불가능합니다. 오직 'YES or NO'만 가능하죠.

② Node Affinity (지능형 선택)

NodeSelector의 상위 호환입니다. 훨씬 정교한 조건문(In, NotIn, Exists 등)을 지원합니다.

  • Hard 설정 (required...): "반드시 SSD 노드여야 해. 없으면 파드를 띄우지 마!"
  • Soft 설정 (preferred...): "가급적 SSD 노드면 좋겠어. 하지만 자리 없으면 일반 HDD 노드라도 괜찮아." (가중치 설정 가능)

🤝 2. 파드끼리 뭉치거나 흩어지기: Pod Affinity & Anti-Affinity

노드가 아니라 '옆집 이웃'을 보고 결정하는 방식입니다.

  • Pod Affinity: "나는 데이터베이스(DB) 파드랑 같은 노드에 있고 싶어. 그래야 네트워크 지연이 적으니까!"
  • Pod Anti-Affinity: "나는 똑같은 A그룹 분석 파드끼리는 같은 노드에 있지 않았으면 좋겠어. 혹시 노드 하나가 죽어도 다른 노드에 있는 파드는 살아남아야 하니까!" (고가용성 확보의 핵심)

🚫 3. 특정 노드에 아무나 못 오게 막기: Taints & Tolerations

이것은 반대로 노드가 파드에게 "너 자격 있어?"라고 묻는 방식입니다.

① Taint (노드의 거부권)

노드에 '독(Taint)'을 묻히는 것입니다. "여기 노드는 비싼 GPU가 있으니까 일반 파드들은 저리 가!"라고 선언하는 거죠.

  • NoSchedule: 자격(Toleration)이 없는 파드는 절대 배치하지 않음.
  • NoExecute: 이미 실행 중인 파드라도 자격이 없으면 쫓아냄.

② Toleration (파드의 면역력)

특정 노드에 묻은 독을 견딜 수 있는 '해독제'를 파드에게 부여하는 것입니다. "나는 GPU 전용 파드니까 저 독이 묻은 노드에 들어갈 수 있어!"라고 선언하는 식입니다.


💡 4. 실전 전략: "A그룹과 B그룹의 완벽한 배치"

사용자의 주식 시스템을 이렇게 설계해 보겠습니다.

  1. A그룹 (우량주 분석):
  • Node Affinity를 사용해 type=high-perf 라벨이 붙은 고성능 노드에 배치합니다.
  • Pod Anti-Affinity를 설정해 여러 노드에 골고루 분산시켜 절대 망하지 않는 환경을 만듭니다.
  1. B그룹 (테마주 분석):
  • 일반 노드에 배치하되, Taints/Tolerations를 활용해 전용 노드를 만들어 일반 웹 서버 트래픽으로부터 방해받지 않게 보호합니다.
  1. 관리용 노드:
  • 마스터 노드나 핵심 DB 노드에는 Taint를 걸어 사용자가 허락하지 않은 일반 파드들이 실수로 들어와 자원을 갉아먹지 못하게 원천 차단합니다.

💡 위한 실전 비유: "VIP 파티룸 입구 컷"

  • Node Affinity: 손님이 "나는 창가 자리가 좋아(Soft)" 혹은 "무조건 금연석이어야 해(Hard)"라고 요청하는 것입니다.
  • Taint (입구 컷): 가게 문 앞에 'VIP 전용'이라는 팻말을 붙여둔 것입니다. 일반인은 못 들어옵니다.
  • Toleration (멤버십 카드): VIP 전용 팻말을 무시하고 들어올 수 있는 '멤버십 카드'를 가진 손님입니다.

📊 요약: 스케줄링 기법 비교

기법 적용 대상 주요 특징 비유
NodeSelector 파드 단순 라벨 매칭 "나는 1번 방에 갈래"
Affinity 파드 정교한 조건, 유연한 선택 가능 "가급적 넓은 방이 좋아"
Taint 노드 설정된 노드에 배치를 거부함 "자격 없는 파드 접근 금지"
Toleration 파드 Taint를 무시하고 배치 가능 "나는 출입 허가증이 있어"

🚀 꼬리 질문

이제 파드를 전략적으로 배치하는 법까지 통달하셨습니다! 🫡 하지만 쿠버네티스는 혼자서 모든 것을 하지 않습니다. 때로는 외부 시스템(AWS, GCP 등)이나 사용자가 직접 만든 외부 서비스와 안전하게 대화해야 하죠.

"그럼 클러스터 외부의 특정 IP나 도메인을 마치 내부 서비스처럼 이름으로 호출할 수 있게 연결해 주는 'ExternalName Service'와 'Endpoints'는 어떤 원리로 작동해?"

반응형