Kubernetes Cluster에서는 여러 개의 Node가 존재하며 각각의 Node에서 다양한 Pod가 실행됩니다.
하지만 모든 Pod를 아무 Node에나 배치하면 Resource 부족, 성능 저하, 장애 위험 같은 문제가 발생할 수 있습니다.
Kubernetes에서는 이러한 문제를 해결하기 위해 Scheduler 기능을 제공합니다.
Kubernetes Scheduler는 새롭게 생성되는 Pod를 분석하고 적절한 Node를 선택하여 배치하는 핵심 Component입니다.
| 구성 요소 | 역할 |
|---|---|
| Kube Scheduler | Pod 배치 결정 |
| Node | Pod 실행 환경 |
| Pod | Application 실행 단위 |
| API Server | Scheduler 요청 관리 |
Scheduler를 이해하면 Kubernetes가 어떻게 Resource를 효율적으로 활용하고 안정적인 Application 운영 환경을 구성하는지 알 수 있습니다.
Kubernetes Scheduler란 무엇인가?
Kubernetes Scheduler는 생성된 Pod를 어떤 Node에서 실행할지 결정하는 Component입니다.
Pod가 생성되면 Scheduler는 Cluster 상태를 분석하고 가장 적합한 Node를 선택합니다.
배치 과정:
| 단계 | 내용 |
|---|---|
| 1단계 | Pod 생성 요청 |
| 2단계 | Scheduler 감지 |
| 3단계 | Node 조건 분석 |
| 4단계 | 적합한 Node 선택 |
| 5단계 | Pod 배치 |
Scheduler는 단순히 빈 공간이 있는 Node를 선택하는 것이 아니라 여러 조건을 고려합니다.
Kubernetes Scheduler가 필요한 이유
Kubernetes Cluster에는 여러 Node가 존재하며 각 Node의 상태는 다릅니다.
예:
| Node | 상태 |
|---|---|
| Node A | CPU 여유 있음 |
| Node B | Memory 부족 |
| Node C | 높은 Network 성능 |
Application 특성에 맞는 Node를 선택해야 안정적인 운영이 가능합니다.
Scheduler는 다음 요소를 고려합니다.
| 요소 | 설명 |
|---|---|
| CPU | 사용 가능한 Processor |
| Memory | 사용 가능한 메모리 |
| Label | Node 특징 |
| Affinity | 배치 규칙 |
| Taint | 접근 제한 |
Kubernetes Scheduler 동작 구조
Scheduler는 여러 단계를 거쳐 최적의 Node를 선택합니다.
구조:
| 구성 요소 | 역할 |
|---|---|
| API Server | Pod 정보 전달 |
| Scheduler | Node 선택 |
| Node | Pod 실행 |
| Kubelet | Container 실행 |
동작 과정:
| 단계 | 내용 |
|---|---|
| 1단계 | Scheduler가 Pending Pod 확인 |
| 2단계 | Node Filtering 수행 |
| 3단계 | Node Scoring 수행 |
| 4단계 | 최적 Node 선택 |
| 5단계 | Binding 수행 |
이 과정을 통해 Pod가 적절한 위치에 배치됩니다.
Kubernetes Scheduler Filtering 단계
Filtering은 Pod가 실행 가능한 Node를 찾는 과정입니다.
조건에 맞지 않는 Node는 제외합니다.
확인 항목:
| 조건 | 설명 |
|---|---|
| Resource 부족 여부 | CPU, Memory 확인 |
| Node 상태 | 정상 여부 확인 |
| Volume 연결 가능 여부 | Storage 확인 |
| Affinity 조건 | 배치 규칙 확인 |
Filtering 이후 실행 가능한 Node 목록이 만들어집니다.
Kubernetes Scheduler Scoring 단계
Scoring은 남은 Node 중 가장 적합한 Node를 선택하는 과정입니다.
평가 기준:
| 기준 | 설명 |
|---|---|
| Resource 균형 | 사용률 균형 유지 |
| Node 선호도 | 선호 조건 반영 |
| Network | 성능 고려 |
| 분산 배치 | 장애 위험 감소 |
높은 점수를 받은 Node에 Pod가 배치됩니다.
Kubernetes Node Selector란?
Node Selector는 Pod를 특정 Label을 가진 Node에 배치하는 가장 간단한 방식입니다.
예:
Node Label:
| Node | Label |
|---|---|
| Node A | disk=ssd |
| Node B | disk=hdd |
Pod 설정:
| 조건 | 결과 |
|---|---|
| disk=ssd | Node A 배치 |
Node Selector는 간단하지만 복잡한 조건 설정에는 한계가 있습니다.
Kubernetes Node Affinity란?
Node Affinity는 Node Selector보다 더 다양한 배치 규칙을 제공하는 기능입니다.
Affinity 종류:
| 종류 | 설명 |
|---|---|
| requiredDuringScheduling | 반드시 만족 필요 |
| preferredDuringScheduling | 가능하면 선호 |
예:
| 조건 | 동작 |
|---|---|
| SSD Node 선호 | 가능하면 SSD 사용 |
| 특정 Region 배치 | 해당 Node만 사용 |
Node Affinity는 Production 환경에서 자주 활용됩니다.
Kubernetes Pod Affinity란?
Pod Affinity는 특정 Pod와 가까운 위치에 다른 Pod를 배치하는 기능입니다.
예:
| 서비스 | 배치 |
|---|---|
| Frontend | Backend와 가까운 Node |
| Cache | Application과 같은 영역 |
Network Latency를 줄이기 위해 사용할 수 있습니다.
Kubernetes Pod Anti Affinity란?
Pod Anti Affinity는 특정 Pod와 떨어져 배치하는 기능입니다.
목적:
| 효과 | 설명 |
|---|---|
| 장애 분산 | 같은 Node 장애 방지 |
| 고가용성 | 서비스 안정성 증가 |
| Traffic 분산 | 부하 집중 방지 |
예:
| Pod |
|---|
| Web Pod 1 → Node A |
| Web Pod 2 → Node B |
Replica Pod를 여러 Node에 분산하는 데 사용됩니다.
Kubernetes Taints와 Tolerations란?
Taint는 특정 Node에 Pod 배치를 제한하는 기능입니다.
Toleration은 해당 제한을 허용하는 설정입니다.
구조:
| 구성 요소 | 역할 |
|---|---|
| Taint | Pod 배치 제한 |
| Toleration | 제한 예외 허용 |
활용 예:
| Node | 용도 |
|---|---|
| GPU Node | AI 작업 전용 |
| Database Node | 중요 서비스 전용 |
특정 목적의 Node를 보호할 수 있습니다.
Kubernetes Scheduler와 Resource Request 관계
Scheduler는 Pod의 Resource Request 값을 기준으로 Node를 선택합니다.
예:
| Pod 요청 | Node 조건 |
|---|---|
| CPU 4 Core | 사용 가능 CPU 필요 |
| Memory 8GB | 충분한 Memory 필요 |
정확한 Resource 설정은 안정적인 Pod 배치에 중요합니다.
Kubernetes Scheduler 운영 시 고려사항
Production 환경에서는 Scheduler 정책을 신중하게 관리해야 합니다.
| 항목 | 설명 |
|---|---|
| Resource 설정 | 정확한 Request 필요 |
| Node Label 관리 | 일관된 구조 필요 |
| Affinity 정책 | 서비스 특성 반영 |
| 장애 분산 | 고가용성 고려 |
잘못된 Scheduler 설정은 Resource 낭비와 장애 원인이 될 수 있습니다.
Kubernetes Scheduler 장점
| 장점 | 설명 |
|---|---|
| 자동 배치 | Pod 위치 관리 |
| Resource 최적화 | Node 활용 개선 |
| 고가용성 | 장애 위험 감소 |
| 확장성 | Cluster 증가 대응 |
Scheduler는 Kubernetes Cluster 운영에서 핵심적인 역할을 담당합니다.
자주 묻는 질문
Kubernetes Scheduler가 직접 Container를 실행하나요?
아닙니다.
Scheduler는 실행할 Node만 선택하며 실제 Container 실행은 Kubelet이 담당합니다.
Node Selector와 Node Affinity 차이는 무엇인가요?
Node Selector는 단순한 조건 선택이고 Node Affinity는 더 다양한 조건과 선호도를 설정할 수 있습니다.
Pod가 Pending 상태가 되는 이유는 무엇인가요?
Resource 부족, Affinity 조건 불충족, Storage 연결 문제 등이 주요 원인입니다.
마무리
Kubernetes Scheduler는 Pod를 적절한 Node에 배치하여 Cluster Resource를 효율적으로 사용하는 핵심 Component입니다.
| 구성 요소 | 역할 |
|---|---|
| Scheduler | Pod 배치 결정 |
| Filtering | 가능한 Node 검색 |
| Scoring | 최적 Node 선택 |
| Affinity/Taints | 배치 정책 관리 |
Scheduler 구조를 이해하면 Kubernetes가 어떻게 Application을 자동 배치하고 안정적인 운영 환경을 만드는지 이해할 수 있습니다.
다음 글에서는 Kubernetes 장애 복구와 자동 관리 기능을 위한 Kubernetes Controller Manager 완벽 가이드! Cluster 상태 관리와 자동 복구 구조 이해하기를 알아보겠습니다.