피드로 돌아가기
New Conversion from cgroup v1 CPU Shares to v2 CPU Weight
Kubernetes BlogKubernetes Blog
DevOps

Kubernetes가 cgroup v1에서 v2로 마이그레이션할 때 CPU 우선순위 손실 문제를 해결하기 위해 선형 변환식을 이차함수 변환식으로 개선해 기본값(1024 → 100) 매핑 정확도 향상

New Conversion from cgroup v1 CPU Shares to v2 CPU Weight

2026년 1월 30일8intermediate

Context

Kubernetes는 원래 cgroup v1을 기준으로 설계되어 1 CPU 요청 시 cpu.shares = 1024로 매핑되었으나, cgroup v2로 전환되면서 기존의 선형 변환식(cpu.weight = 1 + ((cpu.shares - 2) * 9999) / 262142)이 1024 CPU 요청을 약 39의 가중치로만 변환하게 되었다. 이는 cgroup v2의 기본값 100에 비해 40% 수준으로, Kubernetes 워크로드가 시스템 프로세스에 대한 CPU 우선순위를 상실하는 문제가 발생했다.

Technical Solution

  • CPU 우선순위 기본값 매핑 개선: 이차함수 변환식 도입으로 cgroup v1의 기본값 1024를 cgroup v2의 기본값 100에 근접한 102로 변환
  • 변환 함수 설계 방식: 최솟값(2 → 1), 기본값(1024 → 100), 최댓값(262144 → 10000) 세 지점을 정확히 지나는 이차함수 개발 (cpu.weight = ⌈10^(L²/612 + 125L/612 - 7/34)⌉, L = log₂(cpu.shares))
  • 세분성 향상: 100m CPU 요청 시 기존 4에서 17로 변환하여 컨테이너 내부 sub-cgroup 리소스 배분 가능성 확대
  • OCI 런타임 레이어 구현: runc 1.3.2+, crun 1.23+에서 신규 변환식 적용으로 Kubernetes 자체 수정 없이 도입

Impact

  • 1 CPU(1024m) 요청 시 변환값: 약 39 → 102 (기본값 100에 더 근접)
  • 100m CPU 요청 시 변환값: 4 → 17

Key Takeaway

레거시 시스템과의 호환성을 유지하면서 새로운 표준으로 마이그레이션할 때, 단순 선형 매핑보다 기존 기본값(default values)을 기준점으로 하는 다항식 변환이 의도된 동작을 보존하는 데 효과적이다. 또한 모니터링 도구와 커스텀 리소스 관리 도구는 새로운 변환식에 맞춰 예상값 검증 로직을 업데이트해야 한다.


cgroup v2로 업그레이드를 계획하는 Kubernetes 운영팀은 OCI 런타임(runc

1.

3.2 이상, crun

1.23 이상)을 먼저 업데이트한 후, CPU 가중치 예측값이나 우선순위 검증 로직을 신규 이차함수 변환식에 맞춰 조정하고 비프로덕션 환경에서 검증하면 기존 Kubernetes 워크로드의 CPU 우선순위를 보존할 수 있다.

원문 읽기