Post

CFS & Kubernetes CPU 제어

CPU 제어를 위한 CFS 스케줄러

CFS란? (Completely Fair Scheduler)

📘 공식 문서: Linux CFS Scheduler

  • CFS는 리눅스 커널의 기본 CPU 스케줄러로, 모든 태스크가 공정하게 CPU 시간을 할당받도록 설계됨.
  • 각 프로세스는 virtual runtime이라는 개념을 가지며, 덜 실행된 프로세스가 더 우선권을 가짐.
  • 우선순위가 높은 태스크에 유리하지만, 전체적으로는 “공정한 시간 분배”를 보장함.

쿠버네티스에서 CPU 제한은 어떻게 이뤄질까?

📘 공식 문서: Kubernetes - Managing Resources for Containers

  • 쿠버네티스는 컨테이너의 리소스를 제한하기 위해 cgroup을 사용함.
  • resources.limits.cpu를 설정하면, 리눅스는 해당 제한을 CFS quota와 period로 변환함.

예시:

1
2
3
4
5
resources:
limits:
cpu: "1"  # CPU 1개까지 제한
requests:
cpu: "0.5"  # 스케줄링 기준은 0.5개
  • 위 설정은 CFS를 통해 100ms 중 100ms까지만 사용 가능하게 설정함. (default period: 100ms)
  • 인해 CPU가 과하게 사용되지 않도록 보장함.

Kubernetes QoS Class와 CPU 제어 방식

QoS Classcgroup 설정 방식CFS 제어 방식우선순위Throttling 가능성
GuaranteedQuota + Period (Full)명확하게 제한높음예측 가능하게 제한
BurstablePartial가변적 제한중간상황에 따라 발생
BestEffort없음리소스 경합 시 불리함낮음리소스 부족 시 심함
  • Guaranteed: requestslimits가 동일하게 설정된 경우
  • Burstable: 일부만 설정된 경우
  • BestEffort: requestslimits 모두 미설정된 경우

정리

  • Kubernetes는 CFS 스케줄러와 cgroup 설정을 통해 컨테이너의 CPU 자원을 정교하게 제어함.
  • cpu.cfs_quota_uscpu.cfs_period_us 설정은 컨테이너마다 얼마나 CPU를 사용할 수 있을지를 결정함.
  • 이는 멀티테넌시 환경에서 특정 워크로드가 과도하게 자원을 사용하는 것을 방지함.
This post is licensed under CC BY 4.0 by the author.