컨테이너 리소스 관리 - 실습편

deveopser·2022년 12월 6일
0

Docker

목록 보기
11/15

컨테이너 리소스 제한

리눅스 CPU작업부하 프로그램 Stress
stress -cpu 2 : 2개의 cpu 작업 부하 발생
stress --vm 2 --vm-bytes<사용할 크기>: 사용할 크기만큼 메모리에 부하 발생시키기

FROM debian
MAINTAINER Seunghan Lee <seunghan96@naver.com>
RUN apt-get update; apt-get install stress -y
CMD ["/bin/sh", "-c", "stress -c 2"]

docker build -t stress .

이제 이론편에 배웠던 메모리, CPU, Block I/O를 제한해보겠다.
우선 메모리

docker run -m 100m --memory-swap 100m stress:latest stress --vm 1 --vm-bytes 90m -t 5s 
최대 100MB만큼의 메모리 사용가능한 컨테이너에 5초동안 90MB만큼 메모리 부하를 일으키기

-m 100m --memory-swap 100m에 의미
최대 100MB만큼의 메모리를 사용하는 컨테이너에 메모리+스왑이 100MB로 설정(즉 스왑을 사용안한다는 의미 but 생략을 하면 기본설정인 100*2MB가 잡힘
2배로 계산된다.)
스왑메모리란 Ram이 가득 찼지만 더 많은 메모리가 필요할때 디스크 공간을 이용하여 부족한 메모리를 대체할 수 있는 공간을 의미합니다.


docker run -m 100m --memory-swap 100m stress:latest stress --vm 1 --vm-bytes 150m -t 5s
밑에꺼는 실패한다. 메모리가 오버됐기때문에

docker run -m 100m stress:latest stress --vm 1 --vm-bytes 150m -t 5s
swap을 설정안해줬기 때문에 

docker run -d -m 100M --name m4 --oom-kill-disable=true nginx

docker inspect m4
docker inspect --format '{{.HostConfig.Memory}} {{.HostConfig.MemorySwap}} {{.HostConfig.OomKillDisable}}' m4
docker ps 컨테이너 ID 기억
cat /sys/fs/cgroup/memory/docker/244 tap누르고 /memory.oom_control


그다음 CPU

grep -c processor /proc/cpuinfo
Cpu에 개수를 확인하는 방법이다.
즉 최소 2개이상이 있어야 한개에 할당하고, 멈추고 할수있다. 하지만 난 한개만 가지고 있다.
그래도 최선을 다해보자
docker run --cpuset-cpus 1 --name c1 -d stress:latest stress --cpu 1
1번 CPU를 동작시켜라
htop
htop를 실행하여 현재 CPU에 상태를 체크한다.
stress가 실행되면 Command에 표기 된다.

docker stop c1
docker run --cpuset-cpus 0-1 --name c1 -d stress:latest stress --cpu 1
0번과 1번 CPU를 동작시켜라 그렇다면 
docker run --cpuset-cpus 0 --name c1 -d stress:latest stress --cpu 1
이명령어를 실행하고, 반응을 봐야겠다.
htop
docker stop c1
docker rm c1
docker run -c 2048 --name cload1 -d stress:latest
docker run --name cload2 -d stress:latest
docker run -c 512 --name cload3 -d stress:latest
docker run -c 512 --name cload4 -d stress:latest
docker stats cload1
docker stats cload2
docker stats cload3
docker stats cload4
docker stats

Block I/O 제한

lsblk

device 명이 xvda임을 확인

docker run -it --rm --device-write-iops /dev/xvda:10 ubuntu:latest /bin/bash

dd if=/dev/zero of=file1 bs=1M count=10 oflag=direct

docker run -it --rm --device-write-iops /dev/xvda:100 ubuntu:latest /bin/bash

dd if=/dev/zero of=file1 bs=1M count=10 oflag=direct

cAdvisor 설치해서 사용하기

어드바이저 공식 깃 주소 :https://github.com/google/cadvisor

VERSION=v0.36.0 # use the latest release version from https://github.com/google/cadvisor/releases
sudo docker run \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:ro \
  --volume=/sys:/sys:ro \
  --volume=/var/lib/docker/:/var/lib/docker:ro \
  --volume=/dev/disk/:/dev/disk:ro \
  --publish=8080:8080 \
  --detach=true \
  --name=cadvisor \
  --privileged \
  --device=/dev/kmsg \
  gcr.io/cadvisor/cadvisor:$VERSION

하고 8080포트로 들어가면 cAdvisor에서 제공하는 자원모니터링을 볼수 있다.

출처 : https://www.youtube.com/watch?v=7HA_00KNtbc&list=PLApuRlvrZKogb78kKq1wRvrjg1VMwYrvi&index=18

profile
부끄럽게 공부하지말자.

0개의 댓글