cgroup driver 정리

Seung·2022년 2월 28일
2

K8S

목록 보기
3/14
post-custom-banner

cgroup이란?

cgroup은 control group의 준말로 컨테이너 생성에 있어서 기초되는 개념이다.
컨테이너가 생성될 때 저수준 런타임 단계에서 linux kernel의 namespacecgroup을 이용해서 컨테이너를 만들고 실행시킨다.

여기서 cgroup은 호스트 리소스 자원에 대한 권한을 제한하고 격리시키는 것이고,
우리는 컨테이너라는 격리된 공간에서 자원을 격리된 것처럼 사용할 수 있는 것이다.


cgroup driver이란?

k8s나 docker를 접하게 되면, cgroup driver를 cgroupfs 또는 systemd로 설정하는 부분을 마주하게 된다.

이 때 cgroup을 systemd로 맞추는 것을 권장하고, 이는 시스템을 안정적으로 운영하기 위함이라 한다.

왜 cgroup driver를 systemd로 맞추는 것이 시스템을 안정적으로 운영하는데 도움이 될까

우선 cgroup driver는 cgroup을 관리하는 모듈을 의미한다.

그리고 cgroup driver는 cgroupfs 또는 systemd가 될 수 있는데, 얼추 다음과 같다.

  • cgroupfs driver
    cgroupfs는 cgroup을 제어하기 위해 만들어진 특수한 file system 방식

  • systemd driver
    systemd 자체가 init process 역할도 하면서, cgroup 또한 제어

간단하게 말하면, 둘 다 cgroup을 관리하며 systemd가 cgroupfs보다 좀 더 main인 느낌이다.


여기서 성능은 cgroup을 관리하는 주체의 수에 따라 나뉘게 되는데
먼저 kubelet, docker가 cgroupfs driver를 사용하는 경우를 생각해보자.

이 때는 관리자가 systemd와 cgroupfs이므로, 리소스를 두개의 관점에서 보게되고,
리소스가 부족할때 불안정해지는 현상이 발생할 수 있다.


반면 kubelet, docker의 cgroup driver를 systemd로 설정하는 경우,
관리자는 systemd 하나가 되고, 이는 할당된 리소스를 단순화하고
기본적으로 사용가능한 리소스와 사용중인 리소스를 일관성 있게 볼 수 있게 된다.


즉 하나의 관리자만을 둠으로써 자원 관리의 효율성을 가져올 수 있게 되는 것이고,
k8s cluster를 생성시 cgroup driver를 systemd로 맞추어주는 것이다.


추가 자료

https://tech.kakao.com/2020/06/29/cgroup-driver/

profile
인프라 마스터가 되고 싶어요
post-custom-banner

0개의 댓글