마이의 개발 블로그

[Linux] cgroups를 사용해 도커 사용 자원 제한하기 본문

개발지식/인프라

[Linux] cgroups를 사용해 도커 사용 자원 제한하기

개발자마이 2024. 12. 10. 14:54
반응형

배경

지정된 사양에서의 부하테스트를 위해 도커가 사용하는 로컬머신의 코어와 메모리를 제한할 필요가 있었습니다. 하나의 도커 컨테이너만 동작시킨다면 실행 옵션에 명령어를 사용하는 방법도 있겠습니다만, 10개 이상의 도커 컨테이너가 도커 컴포즈로 동작하는 상황이었기 때문에 자원을 유동적으로 공유해서 사용해야하므로 OS에서 도커에게 할당하는 자원을 제한하는 편이 낫다고 판단했습니다. 여기서는 cgroups 명령어를 통해 도커 사용 자원을 제한하는 방법을 소개하고자 합니다.

cgroups 명령어를 통해 도커 사용 자원을 제한하는 방법

1. cgroups 디렉토리 생성(디렉토리명: docker_limit)

sudo cgcreate -g memory,cpu:/docker_limit

2. CPU, 메모리 제한 설정 추가

// CPU 제한: 4코어
sudo cgset -r cpu.cfs_period_us=100000 /docker_limit             // CPU 주기
sudo cgset -r cpu.cfs_quota_us=400000 /docker_limit              // CPU 사용량 제한
// 메모리 제한: 16GB
sudo cgset -r memory.limit_in_bytes=$((16 * 1024 * 1024 * 1024)) /docker_limit

3. 도커 데몬에 cgroup 사용 설정 추가

sudo systemctl edit docker

아래 내용과 같이 cgroup 관련 실행 옵션 추가 후 저장

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --exec-opt native.cgroupdriver=cgroupfs --cgroup-parent=/docker_limit

4. 도커 데몬 재시작

sudo systemctl daemon-reload
sudo systemctl restart docker

도커의 cgroups 설정 되돌리기

1. cgroups 현황 확인

// 명령어
sudo cgget -g memory,cpu:/docker_limit

// 결과 예시
memory.limit_in_bytes: 17179869184     // 메모리 제한(16GB)
memory.usage_in_bytes: 10485760        // 메모리 사용량
cpu.cfs_quota_us: 400000               // CPU 사용량 제한
cpu.cfs_period_us: 100000              // CPU 주기

2. 추가했던 cgroup 사용 설정 제거

sudo systemctl edit docker

아래 내용으로 변경 후 저장

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd

3. 도커 데몬 재시작

sudo systemctl daemon-reload
sudo systemctl restart docker
반응형
Comments