리눅스에서, 컨트롤 그룹은 프로세스에 할당되는 자원을 제한한다.
kubelet과 기반 컨테이너 런타임은 컨테이너화된 워크로드에 대한 CPU/메모리 요청 및 제한을 포함하는 파드와 컨테이너를 위한 자원 관리를 강제하기 위해 cgroup과 연동해야 한다.
리눅스에는 두 가지 버전의 cgroup이 있다. cgroup v1과 cgroup v2. cgroup v2는
cgroup API의 새로운 세대이다.
Kubernetes v1.25 [stable]cgroup v2는 리눅스 cgroup API의 다음 버전이다. cgroup v2는 향상된
자원 관리 기능을 갖춘 통합 제어 시스템을
제공한다.
cgroup v2는 cgroup v1에 비해 다음과 같은 여러 개선 사항을 제공한다.
일부 쿠버네티스 기능은 향상된 자원 관리 및 격리를 위해 오직 cgroup v2만을 사용한다. 예를 들어, MemoryQoS 기능은 메모리 QoS를 향상시키고 cgroup v2 기본 요소에 의존한다.
cgroup v2를 사용하는 권장 방식은 cgroup v2를 기본적으로 활성화하고 사용하는 리눅스 배포판을 이용하는 것이다.
사용 중인 배포판이 cgroup v2를 사용하는지 확인하려면, 리눅스 노드에서 cgroup 버전 확인하기를 참조한다.
cgroup v2에는 다음과 같은 요구 사항이 있다.
cgroup v2를 사용하는 리눅스 배포판 목록은, cgroup v2 문서를 참조한다.
사용 중인 배포판이 cgroup v2를 사용하는지 확인하려면, 해당 배포판의 문서를 참조하거나 리눅스 노드에서 cgroup 버전 확인하기의 지침을 따른다.
또한 커널 cmdline 부트 인자를 수정하여 리눅스 배포판에서
cgroup v2를 수동으로 활성화할 수 있다. 사용 중인 배포판이 GRUB을 사용하는 경우,
/etc/default/grub 파일의 GRUB_CMDLINE_LINUX에
systemd.unified_cgroup_hierarchy=1을 추가한 다음, sudo update-grub을 실행해야 한다. 그러나,
권장되는 접근 방법은 cgroup v2를 기본적으로 활성화하는 배포판을 사용하는
것이다.
cgroup v2로 마이그레이션하려면, 요구 사항을 충족하는지 확인한 다음, cgroup v2를 기본적으로 활성화하는 커널 버전으로 업그레이드한다.
kubelet은 OS가 cgroup v2에서 실행 중임을 자동으로 감지하며 추가 구성 없이 그에 맞춰 작동한다.
사용자들이 노드나 컨테이너 내부에서 cgroup 파일 시스템에 직접 접근하지 않는 한, cgroup v2로 전환할 때 사용자 경험에서 뚜렷한 차이는 없을 것이다.
cgroup v2는 cgroup v1과 다른 API를 사용하므로, cgroup 파일 시스템에 직접 접근하는 애플리케이션이 있다면, cgroup v2를 지원하는 새로운 버전으로 업데이트해야 한다. 예를 들어,
cgroup 버전은 사용 중인 리눅스 배포판과 OS에 설정된
기본 cgroup 버전에 따라 결정된다. 배포판이 어떤 cgroup 버전을 사용하는지
확인하려면, 노드에서 stat -fc %T /sys/fs/cgroup/ 명령을
실행한다.
stat -fc %T /sys/fs/cgroup/
cgroup v2의 경우, 출력은 cgroup2fs이다.
cgroup v1의 경우, 출력은 tmpfs이다.