CFS & Kubernetes CPU 제어
CPU 제어를 위한 CFS 스케줄러
CFS란? (Completely Fair Scheduler)
📘 공식 문서: Linux CFS Scheduler
- CFS는 리눅스 커널의 기본 CPU 스케줄러로, 모든 태스크가 공정하게 CPU 시간을 할당받도록 설계됨.
- 각 프로세스는 virtual runtime이라는 개념을 가지며, 덜 실행된 프로세스가 더 우선권을 가짐.
- 우선순위가 높은 태스크에 유리하지만, 전체적으로는 “공정한 시간 분배”를 보장함.
쿠버네티스에서 CPU 제한은 어떻게 이뤄질까?
- 쿠버네티스는 컨테이너의 리소스를 제한하기 위해 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 Class | cgroup 설정 방식 | CFS 제어 방식 | 우선순위 | Throttling 가능성 |
---|---|---|---|---|
Guaranteed | Quota + Period (Full) | 명확하게 제한 | 높음 | 예측 가능하게 제한 |
Burstable | Partial | 가변적 제한 | 중간 | 상황에 따라 발생 |
BestEffort | 없음 | 리소스 경합 시 불리함 | 낮음 | 리소스 부족 시 심함 |
Guaranteed
:requests
와limits
가 동일하게 설정된 경우Burstable
: 일부만 설정된 경우BestEffort
:requests
와limits
모두 미설정된 경우
정리
- Kubernetes는 CFS 스케줄러와 cgroup 설정을 통해 컨테이너의 CPU 자원을 정교하게 제어함.
cpu.cfs_quota_us
와cpu.cfs_period_us
설정은 컨테이너마다 얼마나 CPU를 사용할 수 있을지를 결정함.- 이는 멀티테넌시 환경에서 특정 워크로드가 과도하게 자원을 사용하는 것을 방지함.
This post is licensed under CC BY 4.0 by the author.