[컨테이너 하드웨어 리소스(CPU, Mem, Disk I/O) 제한]
- 기본적으로 컨테이너는 호스트 하드웨어 리소스의 사용 제한을 받지 않는다.
리소스를 제한하지 않으면 하나의 컨테이너가 모든 리소스를 사용할 수 있게 되고, 다른 컨테이너가 상대적으로 적은 리소스를 사용할 수 밖에 없게 된다.
docker run 과정에서 옵션을 통해 리소스를 제한할 수 있다.
(1) Memory 리소스 제한
- 제한 단위는 b, k, m, g 로 할당
옵션 | 의미 |
--memory, -m | 컨테이너가 사용할 최대 메모리 양을 지정 |
--memory-swap | 컨테이너가 사용할 스왑 메모리 영역에 대한 설정 메모리+스왑, 생략 시 메모리의 2배가 설정됨 |
--memory-reservation | --memory 값보다 적은 값으로 구성하는 소프트 제한 값 설정 |
--oom-kill-disable | OOM Killer가 프로세스 kill하지 못하도록 보호 |
$ docker run -d -m 512m nginx:1.14
$ docker run -d -m 1g --memory-reservation 500m nginx:1.14
$ docker run -d -m 200m --memory-swap 300m nginx:1.14 // 실제 mem=200m, swap=100m
$ docker run -d -m 200m --oom-kill-disable nginx:1.14
※ Memory swap : 시스템 메모리가 부족한 상황 등이 발생할 경우에 Disk를 메모리처럼 사용하는 것. 즉, swap 메모리가 사용되고 있다면 메모리가 full된 것을 의심해보아야 함.
※ OOM-Killer(Out Of Memory-Killer) : 리눅스 커널이 가지고 있는 기능 중에 Physical한 메모리 사이즈가 부족하게되면 리눅스 커널이 OOM-Killer를 동작시켜 프로세스(Virtual Memory를 많이 사용하는 프로세스 등)들을 Kill시키기 시작.
※ --oom-kill-disable 옵션 : 메모리가 부족하더라도 해당 컨테이너를 Kill하지 말아라
(2) CPU 리소스 제한
옵션 | 의미 |
--cpus | 컨테이너에 할당할 CPU Core수를 지정 --cpus=“1.5” 컨테이너가 최대 1.5개의 CPU 파워 사용 가능 |
--cpuset-cpus | 컨테이너가 사용할 수 있는 CPU나 코어를 할당. Cpu index는 0부터. --cpuset-cpus=0-4 |
--cpu-share | 컨테이너가 사용하는 CPU 비중을 1024 값을 기반으로 설정 --cpu-share 2048 기본 값보다 두 배 많은 CPU 자원을 할당 |
$ docker run -d --cpus=".5" ubuntu:1.14
$ docker run -d --cpu-shares 2048 ubuntu:1.14
$ docker run -d --cpuset-cpus 0-3 ubuntu:1.14
--cpu-share 는 상대적 기준치이다. 모든 컨테이너는 실행될 때 cpu-share값 default를 1024값들을 가진다. 예를 들어, 512 값을 하나를 지정하면 다른 컨테이너에 비해 절반만 cpu를 할당한다.
(3) 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를 설정한다. 초당 quota를 제한해서 I/O를 발생시킴. 0 이상의 정수로 표기. 초당 데이터 전송량 = IOPS * 블럭크기(단위 데이터 용량) |
$ docker run -it --rm --blkio-weight 100 ubuntu:latest /bin/bash
$ docker run -it --rm --device-write-bps /dev/vda:1mb ubuntu:latest /bin/bash
$ docker run -it --rm --deivce-write-bps /dev/vda:10mb ubuntu:latest /bin/bash
$ docker run -it --rm --device-write-iops /dev/vda:10 ubuntu:latest /bin/bash
$ docker run -it --rm --device-write-iops /dev/vda:100 ubuntu:latest /bin/bash
--blkio-weight-device 는 특정 디바이스에 대해서 block IO 의 Quota를 적용한다.
[컨테이너 사용 리소스를 확인하는 모니터링 툴]
각 컨테이너들이 실제로 얼마만큼의 리소스를 사용하고 있는 지 확인.
(1) docker monitoring commands
- docker stat : 실행 중인 컨테이너의 런타임 통계를 확인
$ docker stats [OPTIONS] [CONTAINER...]
$ docker stats -a
- docker event : 도커 호스트의 실시간 event 정보를 수집해서 출력
$ docker events -f container=<NAME>
$ docker image -f container=<NAME>
(2) cAdvisor
- https://github.com/google/cadvisor
※ 이성미, [따배도] 도커 시리즈 , TTABAE-LEARN,https://www.youtube.com/watch?v=7HA_00KNtbc, 2021-09-09
'Docker > 이론' 카테고리의 다른 글
[Docker] 10. Docker-Compose (from build to operation) (0) | 2021.11.18 |
---|---|
[Docker] 8.Container Storage (0) | 2021.09.23 |
[Docker] 5.Container 운영 (0) | 2021.08.24 |
[Docker] 4.Container Registry (0) | 2021.08.12 |
[Docker] 3.Container(3) (0) | 2021.08.03 |