Kubernetes Scheduler 완벽 가이드! Pod 배치 결정 알고리즘과 Node 선택 구조 이해하기

Kubernetes Cluster에서 Pod가 실행되기 위해서는 반드시 하나의 Node에 배치되어야 합니다.

하지만 Kubernetes는 아무 Node에나 Pod를 실행하지 않습니다.

Scheduler가 Cluster 전체 상태를 분석하고 가장 적합한 Node를 선택합니다.

예:

Pod 생성 요청

Scheduler 분석

Node Resource 확인

조건 검사

최적 Node 선택

Pod 실행

Kubernetes Scheduler는 단순한 배치 기능이 아니라 Resource, Network, Affinity, Priority 등을 고려하는 핵심 Component입니다.

구성 요소역할
SchedulerPod 배치 결정
Node ResourceCPU·Memory 확인
Affinity배치 조건
Taint/Toleration배치 제한
Priority중요도 관리

Scheduler 구조를 이해하면 Pending Pod 문제를 해결하고 Production 환경에서 효율적인 Cluster 운영이 가능합니다.

Kubernetes Scheduler가 필요한 이유

Kubernetes에서는 Application과 Server를 직접 연결하지 않습니다.

기존 방식:

Application

특정 Server 지정

Kubernetes:

Application

Scheduler

적합한 Node 선택

이 구조를 통해 Infrastructure 변화에도 자동으로 대응할 수 있습니다.

Kubernetes Scheduler 동작 과정

Pod 배치는 두 단계로 진행됩니다.

1단계: Filtering

실행 가능한 Node를 찾습니다.

검사:

  • CPU 가능 여부
  • Memory 가능 여부
  • Node 조건
  • Taint 조건

결과:

실행 가능한 Node 목록 생성

2단계: Scoring

가능한 Node 중 가장 적합한 Node를 선택합니다.

평가:

  • Resource 균형
  • Affinity 조건
  • 비용
  • 위치

최종 Node 결정

이 과정을 통해 Pod가 배치됩니다.

Kubernetes Scheduler Architecture

전체 흐름:

kubectl apply

API Server

etcd 저장

Scheduler 감지

Node 선택

Binding 생성

kubelet 전달

Container 실행

Scheduler는 API Server와 통신하며 동작합니다.

Kubernetes Scheduler와 API Server 관계

Scheduler는 직접 Node에 Container를 실행하지 않습니다.

역할 분리:

Scheduler:

“어느 Node에서 실행할지 결정”

kubelet:

“실제로 Container 실행”

구조:

Scheduler

Binding 정보 전달

kubelet

Container 실행

각 Component가 독립적으로 동작합니다.

Kubernetes Scheduler Filtering 과정

Filtering 단계에서는 실행 불가능한 Node를 제거합니다.

확인 항목:

조건설명
ResourceCPU·Memory 가능 여부
NodeSelectorLabel 조건
Affinity배치 조건
Taint허용 여부
VolumeStorage 연결 가능 여부

조건을 만족하지 못하면 Node 후보에서 제외됩니다.

Kubernetes Scheduler Scoring 과정

남은 Node 중 가장 적합한 Node를 선택합니다.

예:

Node A

CPU 사용률 낮음

Node B

CPU 사용률 높음

Node A 선택

효율적인 Resource 분배를 수행합니다.

Kubernetes Resource 기반 Scheduling

Scheduler는 실제 CPU 사용량이 아니라 Resource Request를 기준으로 판단합니다.

예:

Pod Request:

CPU 2 Core

Memory 4GB

Node:

사용 가능 CPU 4 Core

Memory 8GB

배치 가능

Request 설정이 정확해야 Scheduler 판단도 정확합니다.

Kubernetes NodeSelector와 Scheduler

NodeSelector는 특정 Node에 Pod를 배치하는 가장 간단한 방법입니다.

예:

GPU Node:

nodeSelector:
  gpu: "true"

Scheduler:

gpu Label 확인

해당 Node 배치

특정 Hardware가 필요한 Application에서 사용합니다.

Kubernetes Node Affinity와 Scheduler

Affinity는 NodeSelector보다 더 다양한 조건을 제공합니다.

예:

선호:

SSD Node 선호

필수:

특정 Region Node 필요

Affinity 종류:

종류설명
required반드시 만족
preferred가능하면 만족

복잡한 배치 전략에 사용됩니다.

Kubernetes Taint와 Toleration Scheduling

Taint는 Node에 배치 제한을 설정합니다.

예:

Control Plane Node

일반 Pod 배치 금지

Pod:

Toleration 설정

배치 허용

특수 목적 Node 운영에 사용됩니다.

Kubernetes Pod Priority와 Scheduler

모든 Pod가 같은 중요도를 가지지는 않습니다.

예:

Payment Service

높은 Priority

Batch Job

낮은 Priority

Resource 부족 상황에서 중요한 Pod가 우선 실행됩니다.

Kubernetes Preemption 기능

Priority가 높은 Pod가 실행 공간이 없으면 기존 낮은 Priority Pod를 제거할 수 있습니다.

구조:

중요 Pod 생성

Resource 부족

낮은 Priority Pod 제거

중요 Pod 실행

Production 환경에서 서비스 우선순위 관리에 사용됩니다.

Kubernetes Scheduler Profile

고급 환경에서는 Scheduler 동작 방식을 변경할 수 있습니다.

예:

  • 특정 Plugin 사용
  • Scoring 방식 변경
  • Custom Scheduling

Enterprise 환경에서 활용됩니다.

Kubernetes Custom Scheduler

기본 Scheduler 외에 별도 Scheduler를 사용할 수도 있습니다.

예:

AI Workload 전용 Scheduler

GPU 최적 배치

또는:

특수 Hardware 환경

Custom Rule 적용

대규모 환경에서 사용됩니다.

Kubernetes Scheduler 장애 분석

Pod Pending 발생:

확인 순서:

1단계

Pod Event 확인

kubectl describe pod pod-name

2단계

Node 상태 확인

kubectl get nodes

3단계

Resource 확인

kubectl describe node

4단계

Affinity / Taint 확인

Scheduler 조건 문제를 찾습니다.

Kubernetes Scheduler 운영 전략

Production 환경에서는:

Resource Request 정확 설정

Node Label 관리

Affinity 정책 설계

Priority 설정

Monitoring 적용

안정적인 Pod 배치 구조를 만들 수 있습니다.

Kubernetes Scheduler와 Autoscaling 관계

Scheduler는 Autoscaling과 함께 동작합니다.

구조:

Pod 증가

Scheduler 배치 시도

Node 부족

Cluster Autoscaler 실행

Node 추가

Scheduler 재배치

Cloud 환경에서 중요한 흐름입니다.

Kubernetes Scheduler 장점

장점설명
자동 배치Node 선택 자동화
Resource 최적화효율적인 사용
장애 대응다른 Node 활용
확장성대규모 Cluster 지원

Scheduler는 Kubernetes 운영의 핵심 Component입니다.

자주 묻는 질문

Scheduler가 Container를 실행하나요?

아닙니다.

Scheduler는 배치 위치만 결정하고 kubelet이 Container를 실행합니다.

Scheduler가 잘못된 Node를 선택할 수도 있나요?

가능합니다.

Resource Request와 Label, Affinity 설정이 중요합니다.

Scheduler를 직접 변경할 수 있나요?

가능합니다.

Custom Scheduler 구성이 지원됩니다.

마무리

Kubernetes Scheduler는 Pod가 실행될 최적의 Node를 선택하는 핵심 Component입니다.

구성 요소역할
Filtering가능한 Node 검색
Scoring최적 Node 선택
BindingNode 연결
kubeletContainer 실행

Scheduler 구조를 이해하면 Kubernetes Pending 문제를 해결하고 효율적인 Production Cluster 설계를 할 수 있습니다.

다음 글에서는 Kubernetes Cluster 상태를 유지하는 핵심 Component인 Kubernetes Controller Manager 완벽 가이드! 자동 복구와 상태 관리 구조 이해하기를 진행하겠습니다.

댓글 남기기