1. 컨테이너 하드웨어 리소스 제한 방법
    1. 하드웨어 리소스란? 디스크, cpu, 메모리 등을 의미함.
    2. 컨테이너 하드웨어 리소스 제한 이유
      • 기본적으로 컨테이너는 호스트 하드웨어 리소스의 사용 제한을 받지 않음.
      • A컨테이너가 리소스를 많이 사용하게 되면, 다른 컨테이너에서는 리소스를 적게 사용할 수밖에 없음.
      • 컨테이너가 필요로하는 만큼의 리소스만 할당.
    3. docker command를 통해 제한할 수 있는 리소스
      1. CPU
      2. Memory
      3. Disk I/O
      4. docker run --help
    4. Memory 리소스 제한
      옵션 의미
      --memory, -m 컨테이너가 사용할 최대 메모리 양을 지정.
      --memory -swap 컨테이너가 사용할 스왑 메모리 영역에 대한 설정.
      메모리 + 스왑. 생략 시 메모리의 2배가 설정됨
      --memory -reservation --memory 값보다 적은 값으로 구성하는 소프트 제한 값 설정
      --oom -kill -disable OOM Killer가 프로세스 kill 하지 못하도록 보호
      • 제한 단위는 b, k, m, g로 할당
      • docker run -d -m 512m nginx:1.14
        • nginx:1.14 컨테이너 최대 사용 메모리를 512mb 로 지정함
      • docker run -d -m 1g --memory-reservation 500m nginx:1.14
        • nginx:1.14 컨테이너 최대 사용 메모리를 1gb로 지정하고, 500mb는 보장받음
      • docker run -d -m 200m --memory-swap 300m nginx:1.14
        • nginx:1.14 컨테이너 최대 사용 메모리를 200mb로 지정하고, swap 메모리는 100mb (300-200)로 지정.
        • --memory-swap 생략 시, 최대 사용 메모리 2배만큼이 swap 메모리로 지정됨
      • docker run -d -m 200m --oom-kill-disable nginx:1.14
        • linux 커널에서 메모리 사이즈 부족 시, out of memory killer 을 동작시켜 프로세스들을 kill함.
        • --oom-kill-disable 옵션을 통해 메모리가 부족해도 kill 시키지 않음.
    5. CPU 리소스 제한
      옵션 의미
      --cpus 컨테이너에 할당할 CPU core 개수를 지정
      --cpus="1.5" : 컨테이너가 최대 1.5개의 CPU 파워 사용 가능
      --cpuset-cpus 컨테이너가 사용할 수 있는 CPU나 코어를 할당. cpu index 는 0부터
      --cpus-cpus=0--4
      --cpu-share 컨테이너가 사용하는 CPU 비중을 1024 값을 기반으로 설정
      --cpu-share 2048 : 기본값보다 2배 많은 CPU 자원을 할당.
      • docker run -d --cpus=".5" ubuntu:1.14
        • 컨테이너가 0.5의 CPU 파워 사용 가능.
      • docker run -d --cpu-shares 2048 ubuntu:1.14
        • 모든 컨테이너는 기본으로 1024의 cpu sharebox 를 가지고 있음.
        • 2048 컨테이너 할당 시, 다른 컨테이너에 비해 2배의 cpu 파워를 할당함. (상대적 가중치)
      • docker run -d --cpuset-cpus 0-3 ubuntu:1.14
        • 컨테이너가 0~3 사이의 CPU를 사용할 수 있음.
    6. Block I/O 제한
      옵션 의미
      --blkio-weight
      --blkio-weight-device
      Block IO의 Quota를 설정할 수 있으며, 100~1000까지 선택
      default 500
      --device-read-bps
      --device-write-bps
      특정 디바이스에 대한 읽기와 쓰기 작업의 초당 제한을 kb, mb, gb 단위로 설정
      --device-read-iops
      --device-write-iops
      컨테이너의 read/write 속도의 쿼터를 설정한다. 
      초당 quota를 제한해서 I/O를 발생시킴. 0 이상의 정수로 표기
      초당 데이터 전송량 = IOPS * 블럭크기 (단위 데이터 용량)
      • docker run -it --rm --blkio-weight 100 ubuntu :latest /bin/bash
        • 모든 컨테이너는 block I/O 가 default 500의 값을 가지고 있음.
        • ubuntu :latest 컨테이너는 100의 Block I/O를 가짐 (상대적 가중치)
      • docker run -it --rm --device-write-bps /dev/vda:1mb ubuntu:latest /bin/bash
        • dev/vda에 저장할 때 쓰기 속도를 초당 1mb 로 지정
      • docker run -it --rm --device-write-bps /dev/vda:10mb ubuntu:latest /bin/bash
        • dev/vda에 저장할 때 쓰기 속도를 초당 10mb 로 지정
      • docker run -it --rm --device-write-iops /dev/vda:10 ubuntu:latest /bin/bash
        • ubuntu:latest 컨테이너의 쓰기 속도를 초당 1mb 로 지정
      • docker run -it --rm --device-write-iops /dev/vda:100 ubuntu:latest /bin/bash
        • ubuntu:latest 컨테이너의 쓰기 속도를 초당 10mb 로 지정
  2. 컨테이너 사용 리소스 확인 모니터링 툴
    1. docker monitoring commads
      • docker stat : 실행중인 컨테이너의 런타임 통계를 확인
        docker stats [옵션] [컨테이너]
      • docker event : 도커 호스트의 실시간 event 정보를 수집하여 출력
        docker events -f container=<MAME>
        docker images -f container=<MAME>
      • cAdvisor : https://github.com/google/cadvisor

'쿠버네티스 > docker' 카테고리의 다른 글

7-1. Docker Container Storage  (1) 2024.05.01
6-2. 컨테이너 리소스 관리하기.  (0) 2024.04.30
5-2. Docker 컨테이너 사용하기  (0) 2024.04.30
5-1. 컨테이너 사용하기  (0) 2024.04.29
4-2. 컨테이너 보관 창고  (0) 2024.04.29