Infra/IaC

[Docker] 리소스 모니터링과 자원 할당 관리

jykim23 2023. 10. 24. 10:14

출처: 패캠 gitops

 

1. 컨테이너 리소스 모니터링을 위한 cadvisor

cAdvisor : 구글 오픈소스 컨테이너 모니터링 도구

설치 방법 : https://github.com/google/cadvisor

 

 

 

observability tool : cadvisor + prometheus(+node-exporter) + Grafana

prometheus : 8080 포트 변경 권고

docker compose up -d # docker compose 사용. -d -> 백그라운드 실행

 

 

# Resource Limit 리소스 런타임 제한

htop(top의 상위호환) : 다른 세션에 모니터링 하면서 리소스 소비 제어 실시간 확인용도.

CFS : Completely Fair Scheduler

 

## CPU

-c, --cpu-shares : CPU 공유 스케줄 가중치 제한. 기본값(1024)

docker run -d --name cpu_512 --cpu-shares 512 ubuntu:lastest stress --cpu 4 # stress 설치된 이미지 사용 필요.

docker run -d --name cpu_1023 --cpu-shares 1024 ubuntu:lastest stress --cpu 4

 

--cpuset-cpus : (CPUs in which to allow execution (0-3, 0,1))Host의 CPU에서 몇 번째 core를 사용할 것인지 지정

docker run -d --name cpuset_1 --cpuset-cpus=2 ubuntu:lastest stress --cpu 1

docker run -d --name cpuset_2 --cpuset-cpus=0,3 ubuntu:lastest stress --cpu 2

 

--cpus : CPU 사용 비율 지정 #

docker update --cpus=0.2 cpuset_2 

 

## 메모리 Memory

OOM(out of memory) 대비.

컨테이너가 도커 호스트에 영향을 줄 수 있으니 제한이 필요함.

 

--memory (-m) : (hard limit) 최대 메모리 제한. 최소 6MB

--memory-reservation : (soft limit) 호스트의 메모리가 부족할 경우 컨테이너의 메모리를 제한한다. 그때 최소한의 보장하는 메모리 값을 지정.

--memory-swap : 스왑 메모리 제한.

 

docker run -d --memory=1g --name=nginx_mem_1g nginx

docker inspect nginx_mem_1g | grep -i memory

 

docker run -itd --memory=200m --memory-swap=300m --name=mem-test ubuntu

docker inspect mem-test | grep -i memory

 

docker logs 컨테이너명 # 로그 확인 습관이 되어야 한다.

 

## 디스크 Disk

Disk Size : 디스크 사용량 제한

Block I/O : 호스트의 I/O 대역폭이 소화할 수 있도록 컨테이너 I/O 제한

--blkio-weight, --blkio-weight-device : Block I/O 할당. 기본 500

 

 

--device-read-bps list, --device-write-bps list : 특정 Device에 MBPS를 제한

 

--device-read-iops list, --device-write-iops : 특정 Device에 IOPS를 제한

 

iostat 2 1000 : 모니터링 목적.

docker run -id --rm ubuntu bash

dd if=/dev/zero of=blkmb.out bs=1M count=10 oflag=direct # 작업 완료 속도 기록.

 

docker run -it --rm --device-write-bps /dev/sdb:1mb ubuntu bash

dd if=/dev/zero of=blkmb.out bs=1M count=10 oflag=direct # I/O 성능 제한 확인 가능.