클라우드 + DevOps/Docker

Docker :: 컨테이너CPU 자원 한계 설정

gamjadori 2024. 2. 25. 09:58
728x90

< Docker :: 컨테이너CPU 자원 한계 설정>

<CPU 가중치 할당 (--cpu-shares)>

  • 해당 컨테이너가 CPU를 상대적으로 얼마나 사용할 수 있는지 설정
  • 시스템에 존재하는 CPU를 어느 비중만큼 나눠(share) 쓸 것인지를 명시
  • 아무런 값을 할당하지 않았을 때 컨테이너가 가지는 값은 1024

<컨테이너 생성>

  • --cpu-shares 1024: 컨테이너에 할당되는 CPU 리소스의 가중치를 1024로 설정
  • --cpu-shares 512: 컨테이너에 할당되는 CPU 리소스의 가중치를 512로 설정
  • stress --cpu 4: 컨테이너 내에서 실행되는 명령어로, CPU에 대한 스트레스를 발생시키는 도구인 "stress"를 사용하며, 이때 4개의 CPU 코어를 사용하도록 지정
  • --cpu-shares 512: 컨테이너에 할당되는 CPU 리소스의 가중치를 512로 설정
ubuntu@host1:~/Labs/ch05$ docker container run -d --name cpu_1024 --cpu-shares 1024 leecloudo/stres
s:2.0 stress --cpu 4
Unable to find image 'leecloudo/stress:2.0' locally
2.0: Pulling from leecloudo/stress
f7277927d38a: Pull complete 
8d3eac894db4: Pull complete 
edf72af6d627: Pull complete 
3e4f86211d23: Pull complete 
d6e1f41c61e5: Pull complete 
Digest: sha256:4da7b0ba1625592a3d34c3a6e112c4c70f43dd43086a226395e41a77b0537369
Status: Downloaded newer image for leecloudo/stress:2.0
2ee4c46f48e2d89662cdd6da0d26576dbfa29341b69c521302ca981afb661a3f

>> "cpu_1024"라는 이름의 Docker 컨테이너를 백그라운드에서 실행하며,
해당 컨테이너는 CPU 리소스의 가중치를 1024로 설정하고,
"leecloudo/stress:2.0" 이미지를 기반으로 하여
4개의 CPU 코어를 사용하여 CPU 스트레스를 발생

ubuntu@host1:~/Labs/ch05$ docker container run -d --name cpu_512 --cpu-shares 512 leecloudo/stress:
2.0 stress --cpu 4
7924050167ebb956fe557834f5586c1c0037160936221386bfd5e2fd58c4c66b

>> "cpu_512"라는 이름의 Docker 컨테이너를 백그라운드에서 실행하며,
해당 컨테이너는 CPU 리소스의 가중치를 512로 설정하고,
"leecloudo/stress:2.0" 이미지를 기반으로 하여
4개의 CPU 코어를 사용하여 CPU 스트레스를 발생

 

<컨테이너 생성 확인>

ubuntu@host1:~/Labs/ch05$ docker container ps
CONTAINER ID   IMAGE                             COMMAND                   CREATED             STATUS                    PORTS                                                                          NAMES
7924050167eb   leecloudo/stress:2.0              "stress --cpu 4"          10 seconds ago      Up 9 seconds                                                                                             cpu_512
2ee4c46f48e2   leecloudo/stress:2.0              "stress --cpu 4"          32 seconds ago      Up 31 seconds                                                                                            cpu_1024
20fa045c6714   gcr.io/cadvisor/cadvisor:latest   "/usr/bin/cadvisor -…"   14 minutes ago      Up 14 minutes (healthy)   0.0.0.0:9559->8080/tcp, :::9559->8080/tcp                                      cadvisor
3fbe576f54a8   haproxytech/haproxy-alpine:2.5    "/docker-entrypoint.…"   59 minutes ago      Up 59 minutes             0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:8404->8404/tcp, :::8404->8404/tcp   haproxy-container
fc36f9434108   hashicorp/http-echo               "/http-echo -text=ec…"   About an hour ago   Up About an hour          0.0.0.0:6004->5678/tcp, :::6004->5678/tcp                                      echo-web4-basket
bd288a8230c1   hashicorp/http-echo               "/http-echo -text=ec…"   About an hour ago   Up About an hour          0.0.0.0:6003->5678/tcp, :::6003->5678/tcp                                      echo-web3-basket
e05672fcdf0d   hashicorp/http-echo               "/http-echo -text=ec…"   About an hour ago   Up About an hour          0.0.0.0:6002->5678/tcp, :::6002->5678/tcp                                      echo-web2-item
598a7fd79944   hashicorp/http-echo               "/http-echo -text=ec…"   About an hour ago   Up About an hour          0.0.0.0:6001->5678/tcp, :::6001->5678/tcp                                      echo-web1-item

 

<CPU 코어 지정 --cpuset-cpus>

  • 컨테이너에서 사용할 CPU 코어를 지정

<컨테이너 생성>

  • stress --cpu 1: CPU에 대한 부하를 1개 생성하도록 지정
  • -cpuset-cpus="2”: 컨테이너에서 사용할 CPU 코어를 지정하는데, CPU 코어 번호 "2"를 사용하도록 설정
  • -cpuset-cpus="1,3”: 컨테이너에서 사용할 CPU 코어를 지정하는데, CPU 코어 번호 "1"과 "3"을 사용하도록 설정
ubuntu@host1:~/Labs/ch05$ docker container run -d --name=cpuset_1 --cpuset-cpus="2" leecloudo/stress:2.0 stress --cpu 1
b89e8a2176ca7755e8d5522f75d1743291880dcebc4888cb11fce03b0839d2c7
>>"leecloudo/stress" 이미지를 사용하여
"cpuset_1"이라는 이름의 컨테이너를 백그라운드에서 실행하고,
해당 컨테이너는 CPU 코어 "2"에서 스트레스 테스트를 수행

ubuntu@host1:~/Labs/ch05$ docker container run -d --name=cpuset_2 --cpuset-cpus="1,3" leecloudo/str
ess:2.0 stress --cpu 2
8d2aeffec2e81620361c089e59bed91da3220890aa71b8be750c826fc76796d5
>> "leecloudo/str" 이미지를 사용하여
"cpuset_2"라는 이름의 컨테이너를 백그라운드에서 실행
해당 컨테이너는 CPU 코어 "1"과 "3"에서 동시에 작업을 수행해 이러한 설정을 통해
특정 CPU 코어에 컨테이너를 할당하여 작업을 분산

ubuntu@host1:~/Labs/ch05$ docker container update --cpuset-cpus="1,3" cpus
cpus
>> "cpus"라는 이름의 컨테이너를 찾아서 해당 컨테이너의 CPU 코어 설정을 "1,3"으로 업데이트
CPU 코어 "1"과 "3"에서 동작하도록 변경

 

<CPU 자원의 양 설정 —cpus>

  • 컨테이너가 사용할 CPU 자원의 양을 설정하는 옵션
  • CPU 자원을 소수점 숫자로 표현해 호스트 시스템의 전체 CPU 자원 대비 해당 컨테이너가 사용할 비율을 나타냄 (0.2, 0.4 이런식으로 표현해야 함)

<컨테이너 생성>

  • -cpus=0.2: 컨테이너에서 사용할 CPU 자원을 지정합니다. 여기서는 20%의 전체 CPU 자원을 할당하도록 설정
ubuntu@host1:~/Labs/ch05$ docker container run -d --name=cpus --cpus=0.2 leecloudo/stress:2.0 stress --cpu 2
1438ca67b645c829331c6864621a1a74d225f5dd85eabfe360e692cedbdbdb7c
>> "leecloudo/stress" 이미지를 사용하여
"cpus"라는 이름의 컨테이너를 백그라운드에서 실행하고
전체 CPU 자원의 20%를 사용하여 2개의 CPU에 대한 스트레스 테스트를 수행

 

<시스템 모니터링 서비스 htop>

  • htop: top보다 업그레이드된 시스템 실시간 모니터링
ubuntu@host1:~/Labs/ch05$ sudo apt -y install htop
[sudo] ubuntu 암호: 
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다... 완료
상태 정보를 읽는 중입니다... 완료        
제안하는 패키지:
  lm-sensors
다음 새 패키지를 설치할 것입니다:
  htop
0개 업그레이드, 1개 새로 설치, 0개 제거 및 48개 업그레이드 안 함.
128 k바이트 아카이브를 받아야 합니다.
이 작업 후 342 k바이트의 디스크 공간을 더 사용하게 됩니다.
받기:1 <http://kr.archive.ubuntu.com/ubuntu> jammy/main amd64 htop amd64 3.0.5-7build2 [128 kB]
내려받기 128 k바이트, 소요시간 2초 (83.4 k바이트/초)                 
Selecting previously unselected package htop.
(데이터베이스 읽는중 ...현재 209583개의 파일과 디렉터리가 설치되어 있습니다.)
Preparing to unpack .../htop_3.0.5-7build2_amd64.deb ...
Unpacking htop (3.0.5-7build2) ...
htop (3.0.5-7build2) 설정하는 중입니다 ...
Processing triggers for mailcap (3.70+nmu1ubuntu1) ...
Processing triggers for desktop-file-utils (0.26-1ubuntu3) ...
Processing triggers for hicolor-icon-theme (0.17-2) ...
Processing triggers for gnome-menus (3.36.0-1ubuntu3) ...
Processing triggers for man-db (2.10.2-1) ...
ubuntu@host1:~/Labs/ch05$ htop

<화면 결과>