-
Docker) cgroup (Control Group) 실습해보기Cloud/Docker 2022. 9. 27. 22:53
실습 환경 : AWS Console (2022/09), Visual Studio Code, Xshell 7
실습 목적 : 리눅스 컨테이너 기술기반인 cgroup에 대해 알아보고 cgroup 명령을 익혀본다.
cgroup
- 시스템 자원의 사용정보를 수집 및 제한시키는 Linux 커널 기능을 한다.
- 모든 프로세스에 대해 리소스 사용정보를 수집한다.
- 제한 가능한 자원 - CPU, Memory, Network, Device, Block I/O
cgroup 종류
cgroup 에서 사용 가능한 서브 시스템
- blkio : 블록 장치(storage)에 대한 입/출력 제한
- cpu : 스케쥴러를 이용해 해당 cgroup에 속한 프로세스 CPU 사용시간 제한
- cpuacct : cgroup에 속한 CPU 자원정보 생성
- cpuset : 개별 CPU 및 메모리로드에 대한 cgroup 할당
- devices : cgroup 작업 단위로 장치에대한 액세스 허용/거부
- freeze : cgroup 작업 일시정지 또는 다시시작
- memory : cgroup에 속한 프로세스의 메모리 사용 제한
- net_cls : 네트워크 태그 지정
- ns : namesapce 서브 시스템
cgroup을 통해 cpu 사용량 제한해보기
1. cpu 사용량 테스트를 위해 stress와 cgroup-tools 설치
sudo apt update sudo apt install -y stress sudo apt install -y cgroup-tools
2. cgcreate 명령으로 자원제한 그룹 생성
sudo cgcreate -a ubuntu -g cpu:mygroup # sudo cgcreate -a [소유자ID] -g cpu:[그룹이름]
3. CPU 사용량을 30%로 제한한다
- cgset에서 -r 옵션은 자원 제한속정을 지정하는 옵션이다.sudo cgset -r cpu.cfs_quota_us=30000 mygroup # sudo cgset -r cpu.cfs_quota_us=30000 [그룹이름] # 위 명령에서 에러가 나면 아래 내용으로 설정한다. sudo cgset -r cpu.max=30000 mygroup # sudo cgset -r cpu.max=30000 [그룹이름]
4. CPU 사용량 테스트
sudo cgexec -g cpu:mygroup stress -c 1 # sudo cgexec -g cpu:[그룹이름] [stress 명령]
5. 다른 터미널에서 top 명령을 통해 CPU 사용량이 제어되는지 확인
프로세스 생성개수 제한으로 forkbomb 방지하기
1. 관리자 계정으로 전환 후, cgroup 디렉토리로 이동
sudo su cd /sys/fs/cgroup
2. 실습을 위한 임시 디렉토리 생성 및 이동
mkdir utils cd utils
3. utils 디렉토리에서 자동 생성된 pids.max 파일 내용을 수정하여 생성 가능한 프로세스 수 설정
echo 20 > pids.max
4. forkbomb 공격 상황을 구현
:(){:|:&};: # 위 코드를 입력하면 프로세스가 무한히 생성하려함
5. 결과
- forkbomb 으로 프로세스가 무한히 생성하려 하더라도 pids.max에 설정된 값만큼만 프로세스가 제한된다.
- EC2 instance를 재기동 하여 복구한다.'Cloud > Docker' 카테고리의 다른 글
Docker) Docker Engine (0) 2022.09.28 Docker) Union file system의 OverlayFS 실습해보기 (0) 2022.09.28 Docker) namesapce 실습해보기 (0) 2022.09.28 Docker) chroot (Change Root) 실습해보기 (0) 2022.09.27 Docker) Docker를 알아보기 (0) 2022.09.27