Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

nomad-programmer

[DevOps/Docker] 릴리스 관리 장치 (cgroups) 본문

DevOps/Docker

[DevOps/Docker] 릴리스 관리 장치 (cgroups)

scii 2020. 11. 18. 00:02

Docker에서는 물리 머신 상의 자원을 여러 컨테이너가 공유하며 작동한다. 이때 Linux 커널의 기능인 'control groups(cgroups)' 기능을 사용하여 자원의 할당 등을 관리한다.

Linux에서는 프로그램을 프로세스로서 실행한다. 프로세스는 하나 이상의 스레드 모음으로 움직인다. cgroups는 프로세스와 스레드를 그룹화하여, 그 그룹 안에 존재하는 프로세스와 스레드에 대한 관리를 수행하기 위한 기능이다. 예를 들어 호스트 OS의 CPU나 메로리와 같은 자원에 대해 그룹별로 제한을 둘 수 있다. cgroups로 컨테이너 안의 프로세스에 대해 자원을 제한함으로써 예를 들면 어떤 컨테이너가 호스트 OS의 자원을 모두 사용해 버려서 동일한 호스트 OS 상에서 가동되는 다른 컨테이너에 영향을 주는 일을 막을 수 있다.

cgroups로 관리할 수 있는 주요한 일은 다음과 같다.

항목 설명
cpu cpu 사용량을 제한
cpuacct cpu 사용량 통계 정보를 제공
cpuset cpu나 메모리 배치를 제어
memory 메모리나 swap 사용량을 제한
devices 디바이스에 대한 액세스 허가/거부
freezer 그룹에 속한 프로세스 정지/재개
net_cls 네트워크 제어 태그를 부가
blkio 블록 디바이스 입출력량 제어

cgroups는 계층 구조를 사용하여 프로세스를 그룹화하여 관리할 수 있다. 예를 들어 사용자 애플리케이션과 서버와 같은 데몬 프로세스를 나눠, 각각의 그룹에 CPU 사용량을 할당할 수 있다. cgroups의 부모 자식 관계에서는 자식이 부모의 제한을 물려받는다. 예를 들어 자식이 부모의 제한을 초과하는 설정을 하더라도 부모 cgroups의 제한에 걸린다.

자식은 부모 그룹의 제한을 초과하여 할당할 수 없으므로 중요한 프로세스라도 영향을 받지 않는다.
Comments