ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

    댓글

Designed by Tistory.