A deep dive into CPU requests and limits in Kubernetes
Datadog
Kubernetes에 있는 CPU Manager 기능을 설명하는 글입니다. 비슷한 시기에 정보를 얻어서 그런지 CPU Manager 기능은 알고 있었는데 비교적 최근에 알게 되어서 그런가 최근에 정식으로 나온 cgroup v2와 연관된 기능으로만 생각하고 있다가 이번 글을 읽으면서 cgroup v2와는 결개 기능이란 것을 알게 되었습니다.
Kubernetes에서는 CPU 스케쥴링에 리눅스의 CFS(Completely Fair Scheduler)를 사용하고 있습니다. 그래서 1.10에서 베타로 도입되고 1.26에서 Stable이 된 CPU Manager의 기본 정책은 none이고 이때는 원래처럼 CFS가 사용됩니다.
CPU Manager를 static으로 설정하면 CFS 대신 CPUSets를 사용하게 됩니다. CPUSets를 사용하면 특정 CPU에 독점적으로 할당할 수 있기 때문에 CPU를 공유 풀로 사용하지 않아서 컨텍스트 스위칭 비용을 줄일 수 있습니다.
팟은 Guaranteed QoS 클래스로 설정하고 CPU가 정수(코어수라는게 정수니까)로 설정했을 때만 적용이 되고 설정한 만큼의 코어는 해당 팟이 독점적으로 사용합니다 4개 코어가 있는 노드에서 2개 CPU를 할당받은 Pod이 있다면 CPU 2개는 해당 팟만 독점적으로 사용하고 나머지 팟은 남은 2개의 팟을 돌려서 쓰게 됩니다. 참고로 CPU Manager를 쓸 때 kubernetes 컴포넌트 등 시스템 데몬에도 자동 적용 되는 것은 아니므로 필요하다면 시스템 데몬에도 CPU를 따로 할당해야 합니다.
static 정책은 컨텍스트 전환에 민감한 워크로드에 유용하지만 일부 CPU를 독점적으로 사용하므로 다른 컨테이너 성능에도 영향을 줄 수 있습니다.
https://www.datadoghq.com/blog/kubernetes-cpu-requests-limits/
다음 내용이 궁금하다면?
이미 회원이신가요?
2023년 12월 29일 오전 3:34