[따배도] 7-2.Container 관리하기 (실습)

( 참고 : 따배도 https://www.youtube.com/watch?v=NLUugLQ8unM&list=PLApuRlvrZKogb78kKq1wRvrjg1VMwYrvi )


Contents

  1. Container 리소스 제한 & 모니터링
  2. cAdvisor


Q1. Container 리소스 제한

STRESS ( 리눅스의 부하 test 프로그램 )

  • stress -cpu 2 : 2개의 cpu에 작업 부하 발생시키기
  • stress --vm 2 --vm-bytes : ~ 메모리에 부하 발생시키기


(1) Stress Container를 생성한다.

vi Dockerfile

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


figure2


(2) 메모리 리소스 제한하기

docker run -m 100m --memory-swap 100m stress:latest stress --vm 1 --vm-bytes 90m -t 5s
  • stress라는 container가 최대 100MB만큼의 메모리 사용 가능
  • 스왑 + 메모리도 100MB
    • 따라서 스왑 메모리는 100-100=0MB … 사용불가
  • 5초동안 90MB만큼 메모리 부하 일으키기

figure2


docker run -m 100m --memory-swap 100m stress:latest stress --vm 1 --vm-bytes 150m -t 5s
  • 5초동안 150MB만큼 메모리 부하 일으키기

figure2


docker run -m 100m stress:latest stress --vm 1 --vm-bytes 150m -t 5s
  • Q. 스왑 메모리 생략할 경우?
  • A. default는 “메모리의 2배” ( 100x2 = 200 MB )
    • 따라서 정상 작동한다!

figure2


OOM-killer

docker run -d -m 100M --name m4 --oom-kill-disable=true nginx
  • 리눅스는 메모리가 부족하게 되면 OOM killer가 동작되어 프로세스가 작동되지만, 이를 꺼준다


docker inspect m4
docker ps
cat /sys/fs/cgroup/memory/docker/db95f58f641dd4d30ec76732a89feb5fe98f3a4894d6a3c8b0a5fd6effaa9dff/memory.oom_control

OOmKillDisable이 TRUE로 되어있음을 확인할 수 있다

figure2

figure2


(3) CPU 메모리 제한

docker run --cpuset-cpus 1 --name c1 -d stress:latest stress --cpu 1
  • (line 1) 1번 CPU 동작시켜라


# apt-get install htop
htop
  • (line 2) htop을 사용하여 확인

figure2

  • 2번째 ( = 1번 CPU ) 가 100% 동작 중인 것을 확인할 수 있다


docker stop c1
docker run --cpuset-cpus 0-1 --name c1 -d stress:latest stress --cpu 1
  • (line 3) 0번, 1번 CPU 동작시켜라


htop
  • 0번 CPU, 1번 CPU 왔다 갔다 동작함을 알 수 있다

figure2

figure2


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
  • (순서대로) 2배/1배/0.5배/0.5배 만큼 cpu 사용


docker stats cload1
docker stats cload2
docker stats cload3
docker stats cload4
  • cload1,2,3,4에 대한 리소스 사용 통계량을 확인한다

figure2


docker stats
  • 현재 시스템에서 동작 중인 모든 컨테이너에 대해서 표시

figure2


(4) Block I/O 제한

lsblk
  • device 명이 sda임을 확인

figure2


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

dd if=/dev/zero of=file1 bs=1M count=10 oflag=direct
  • --device-write-iop 를 사용하여, write 속도의 초당 quota를 제한 & IO Write 진행…. Quota=10
  • figure2
docker run -it --rm --device-write-iops /dev/sda:100 ubuntu:latest /bin/bash

dd if=/dev/zero of=file1 bs=1M count=10 oflag=direct
  • 마찬가지…Quota=100
  • figure2
  • 훨씬 빠른 속도로 진행됨을 알 수 있다


Q2. cAdvisor 이용하기

  • 생략