섹션별 상세
PFN은 분산 학습의 효율성을 높이기 위해 Gang Scheduling과 GPU 단편화 방지 로직을 포함한 커스텀 스케줄러 플러그인을 개발하여 운영한다. Gang Scheduling은 분산 학습에 필요한 모든 Pod가 준비되었을 때만 스케줄링을 수행하여 자원 낭비를 방지하는 핵심 기법이다.
Kubernetes 업스트림의 scheduler_perf 프레임워크는 etcd와 API 서버만 실행하여 대규모 클러스터 환경을 단일 머신에서 시뮬레이션하고 스케줄링 처리량을 측정한다. YAML 설정을 통해 노드 생성, Pod 생성, 메트릭 수집 단계를 정의하며 결과는 초당 Pod 처리량(pods/s) 단위의 통계 데이터로 출력된다.
yaml
- name: SchedulingBasic
defaultPodTemplatePath: ../templates/pod-default.yaml
workloadTemplate:
- opcode: createNodes
countParam: $initNodes
- opcode: createPods
countParam: $initPods
- opcode: createPods
countParam: $measurePods
collectMetrics: true
workloads:
- name: 500Nodes
labels: [performance, short]
params:
initNodes: 500
initPods: 500
measurePods: 1000scheduler_perf에서 벤치마크 시나리오를 정의하는 YAML 설정 예시

기존의 수동 코드 복사 방식은 Kubernetes 버전 업그레이드 시마다 막대한 유지보수 비용을 발생시켰으며, CI 미통합으로 인해 성능 저하를 사후에 발견하는 문제가 있었다. 이를 해결하기 위해 scheduler_perf를 라이브러리로 임포트하는 구조로 전환하고 릴리스 PR 생성 시 벤치마크가 자동 실행되도록 GitHub Actions 워크플로를 구축했다.
커스텀 플러그인이 CRD에 의존하는 경우 라이브러리 방식에서 API 서버에 접근할 수 없는 한계가 있었으나, PFN은 WithPrepareFn 옵션을 업스트림에 기여하여 해결했다. 이 콜백 함수를 통해 벤치마크 실행 전 CRD를 미리 등록할 수 있게 되었으며, 해당 기능은 Kubernetes v1.34에 정식 포함될 예정이다.
python
import (
"testing"
perf "k8s.io/kubernetes/test/integration/scheduler_perf"
)
func BenchmarkPerfScheduling(b *testing.B) {
perf.RunBenchmarkPerfScheduling(b, "/path/to/scheduler_perf_config.yaml", "", outOfTreeRegistry)
}Kubernetes v1.30부터 지원되는 scheduler_perf 라이브러리 임포트 및 실행 코드
벤치마크 자동화 결과, 기존 Lua 기반 플러그인의 성능 병목을 확인하고 이를 Go 언어로 재구현하여 비약적인 성능 향상을 달성했다. 일반 스케줄링 처리량은 약 1311% 증가했으며, 오버헤드가 큰 Gang Scheduling 시나리오에서도 처리량이 약 480% 개선됨을 수치로 입증했다.
python
perf.RunBenchmarkPerfScheduling(b, "config/performance-config.yaml", "hogehoge", outOfTreeRegistry, perf.WithPrepareFn(func(tCtx ktesting.TContext) error {
client := tCtx.APIExtensions()
_, err := client.ApiextensionsV1().CustomResourceDefinitions().Create(tCtx, &apiextensionsv1.CustomResourceDefinition{
// Custom Resource Definition
}, metav1.CreateOptions{})
return err
}))WithPrepareFn 옵션을 사용하여 벤치마크 실행 전 CRD를 등록하는 예시
용어 해설
- 쿠버네티스 스케줄러(Kubernetes Scheduler)
- — 클러스터 내에서 새로 생성된 Pod를 실행할 최적의 노드를 결정하는 핵심 컴포넌트이다. 스케줄링 프레임워크 아키텍처를 통해 사용자가 커스텀 플러그인을 추가하여 스케줄링 로직을 확장할 수 있는 유연성을 제공한다.
- 갱 스케줄링(Gang Scheduling)
- — 여러 개의 연관된 Pod를 하나의 그룹으로 묶어, 모든 Pod가 동시에 실행 가능한 상태일 때만 스케줄링을 수행하는 방식이다. 분산 학습 시 일부 Pod만 먼저 실행되어 자원을 점유한 채 대기하는 데드락 상황을 방지한다.
- 스케줄러 성능 벤치마크(scheduler_perf)
- — Kubernetes 업스트림 프로젝트에서 제공하는 성능 테스트 프레임워크이다. 실제 워커 노드 없이 제어 평면 컴포넌트만 실행하여 대규모 클러스터 환경에서의 스케줄링 처리량과 지연 시간을 시뮬레이션한다.
- 사용자 정의 리소스(CRD)
- — Kubernetes API를 확장하여 기본 리소스 외에 사용자가 정의한 고유한 객체를 관리할 수 있게 해주는 메커니즘이다. 커스텀 스케줄러 플러그인이 특정 정책이나 상태를 저장하고 참조하는 용도로 자주 활용된다.
기술
- Kubernetes
- Go
- scheduler_perf
- GitHub Actions
- Lua
활용 사례
- 분산 학습 스케줄링
- GPU 클러스터 최적화
- 인프라 성능 모니터링
언급된 리소스
AI 분석 전체 내용 보기
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
원문 발행 2025. 12. 08.수집 2026. 02. 21.출처 타입 RSS
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.