핵심 요약
PFN은 머신러닝 인프라 운영을 위해 Kubernetes 스케줄러를 커스터마이징하여 사용한다. 기존에는 업스트림의 scheduler_perf 도구를 수동으로 복사해 사용하며 유지보수와 CI 통합에 어려움을 겪었다. 이를 해결하기 위해 Kubernetes v1.30부터 도입된 라이브러리 임포트 방식을 채택하고, v1.34에 반영될 WithPrepareFn 기능을 직접 기여하여 CRD 의존성 문제를 해결했다. 결과적으로 릴리스 프로세스에 벤치마크를 자동화했으며, Lua 기반 플러그인을 Go로 재구현하여 스케줄링 처리량을 비약적으로 향상시켰다.
배경
Kubernetes Architecture, Go Programming, Basic Benchmarking concepts
대상 독자
Kubernetes 기반 ML 인프라 엔지니어 및 플랫폼 개발자
의미 / 영향
스케줄러 성능 최적화는 대규모 GPU 클러스터의 자원 효율성을 결정짓는 핵심 요소이다. 업스트림 도구를 라이브러리화하고 CI에 통합하는 방식은 복잡한 인프라 소프트웨어의 지속 가능한 유지보수 모델을 제시한다.
섹션별 상세
- 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 설정 예시

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 라이브러리 임포트 및 실행 코드
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를 등록하는 예시
실무 Takeaway
- Kubernetes 스케줄러 성능 측정을 위해 scheduler_perf를 라이브러리로 임포트하여 유지보수 공수를 최소화한다.
- 릴리스 파이프라인에 벤치마크 테스트를 통합하여 이전 버전 대비 성능 변화를 정량적으로 비교하고 배포 전 병목을 차단한다.
- 복잡한 스케줄링 로직이나 높은 처리량이 요구되는 플러그인은 Lua 대신 Go로 구현하여 런타임 오버헤드를 획기적으로 줄인다.
언급된 리소스
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.