cgroup
은 control group의 준말로 컨테이너 생성에 있어서 기초되는 개념이다.
컨테이너가 생성될 때 저수준 런타임 단계에서 linux kernel의 namespace
와 cgroup
을 이용해서 컨테이너를 만들고 실행시킨다.
여기서 cgroup
은 호스트 리소스 자원에 대한 권한을 제한하고 격리시키는 것이고,
우리는 컨테이너라는 격리된 공간에서 자원을 격리된 것처럼 사용할 수 있는 것이다.
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로 맞추어주는 것이다.