라이브러리 의존성

라이브러리

리눅스 패키지 관리자

라이브러리 의존성


가상머신을 통한 의존성 해결


컨테이너를 통한 의존성 해결


가상머신 vs 컨테이너

리눅스에서 ps auxf 를 실행하면 프로세스 트리를 볼 수 있음


가상머신 - LibVirt

CPU 개수, 메모리, 디스크, 네트워크 인터페이스 등을 설정 후 부팅하면 됨

가상머신은 qemu-kvm 이라는 하나의 큰 프로세스가 실행됨

# virsh list --all
 Id   Name                     State
----------------------------------------
 14   132-r9-gita.kreonet.net  running
 ...

# ps auxf
USER       PID  %CPU  %MEM  START    TIME  COMMAND
qemu    177798   0.5   0.3  Apr21  594:54  /usr/libexec/qemu-kvm
                                               -name guest=gita.kreonet.net
                                               -smp 4,maxcpus=16       # CPU
                                               -m size=8GB,maxmem=32GB # MEM
                                               -blockdev {"filename":"/rhev/data-center/mnt/..._nfs_.../
                                                           9f6731d3-.../images/.../...",...} # QCOW2 DISK
                                               ...

# virsh dumpxml 132-r9-gita.kreonet.net
<domain type='kvm' id='14' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
  <name>132-r9-gita.kreonet.net</name>
  <uuid>825fcb99-...</uuid>

  <maxMemory slots='16' unit='KiB'>33554432</maxMemory>
  <memory unit='KiB'>8388608</memory>
  <currentMemory unit='KiB'>8388608</currentMemory>

  <vcpu placement='static' current='4'>16</vcpu>

    <disk type='file' device='disk' snapshot='no'>
      <driver name='qemu' type='qcow2' .../>
      <source file='/rhev/data-center/mnt/..._nfs_.../9f6731d3-.../images/.../...' index='1'></source>
      <target dev='sda' bus='scsi'/>

참고로 하드디스크를 이미지로 떠서 가상머신으로 부팅하면 부팅이 됨. 역으로 가상머신의 이미지를 물리적인 하드디스크에 풀어내면 물리적인 실제 서버에서도 부팅이 됨. - http://idchowto.com/kvm-qcow2-파일을-물리적-디스크로-복사-부팅/


가상머신 - VMware

# uname -a
VMkernel ESXI05 5.5.0 #1 SMP Release build-2068190 Aug 22 2014 19:00:51 x86_64 GNU/Linux

# ps -c | grep workspace
39171 39171 vmx /bin/vmx -s sched.group=host/user
                    #product=2;
                    name=VMware ESX;
                    version=5.5.0;
                    buildnumber=2068190;
                    licensename=VMware ESX Server;
                    licenseversion=5.0;
                    -@ duplex=3;
                    msgs=ui /vmfs/volumes/51f872db-e7b1b18e-c6a2-0025b5010101/
                              054_c7_workspace/054_c7_workspace.vmx
39188       vmm0         :054_c7_workspace
39196       vmm1         :054_c7_workspace
39197       vmm2         :054_c7_workspace
39198       vmm3         :054_c7_workspace
39207 39171 vmx-vthread-7:054_c7_workspace /bin/vmx
39212 39171 vmx-vthread-8:054_c7_workspace /bin/vmx
39221 39171 vmx-mks      :054_c7_workspace /bin/vmx
39222 39171 vmx-svga     :054_c7_workspace /bin/vmx
39225 39171 vmx-vcpu-0   :054_c7_workspace /bin/vmx
39226 39171 vmx-vcpu-1   :054_c7_workspace /bin/vmx
39227 39171 vmx-vcpu-2   :054_c7_workspace /bin/vmx
39228 39171 vmx-vcpu-3   :054_c7_workspace /bin/vmx

# cd /vmfs/volumes/51f872db-e7b1b18e-c6a2-0025b5010101/054_c7_workspace/
# ls -alh
total 74421272
drwxr-xr-x  root    2.9K Jan 21  2020 .
drwxr-xr-t  root    4.2K Oct 30 20:31 ..
-rw-------  root    8.0G Jan 21  2020 054_c7_workspace-7f29ff24.vswp
-rw-------  root    8.5K Jan 21  2020 054_c7_workspace.nvram
-rw-r--r--  root       0 Jan 18  2018 054_c7_workspace.vmsd
-rw-------  root    3.2K Jan 21  2020 054_c7_workspace.vmx
-rw-------  root       0 Jan 21  2020 054_c7_workspace.vmx.lck
-rw-r--r--  root     263 Jan 18  2018 054_c7_workspace.vmxf
-rw-------  root    3.2K Jan 21  2020 054_c7_workspace.vmx~
-rw-------  root     538 Jan 21  2020 054_c7_workspace.vmdk
-rw-------  root   32.0G Oct 30 23:18 054_c7_workspace-flat.vmdk
-rw-------  root     542 Jan 21  2020 054_c7_workspace_1.vmdk
-rw-------  root  384.0G Oct 30 23:18 054_c7_workspace_1-flat.vmdk
-rw-------  root  159.4K Apr 22  2021 vmware.log
-rw-------  root  162.0M Jan 21  2020 vmx-054_c7_workspace-2133458724-1.vswp

# cat 054_c7_workspace.vmx
nvram = "054_c7_workspace.nvram"
numvcpus = "4"
cpuid.coresPerSocket = "2"
memSize = "8192"
ethernet0.virtualDev = "vmxnet3"
ethernet0.networkName = "VMNet"
ethernet0.generatedAddress = "00:50:56:95:72:98"
scsi0:0.fileName = "054_c7_workspace.vmdk"
scsi0:1.fileName = "054_c7_workspace_1.vmdk"
...


컨테이너

도커는 CPU, 메모리, 디스크 제한 거는 것 가능. 기본적으로 호스트머신의 자원을 제한 없이 이용. https://docs.docker.com/config/containers/resource_constraints/

k8s는 CPU, 메모리를 기본값으로 제한하며 변경 가능. https://kubernetes.io/ko/docs/tasks/administer-cluster/manage-resources/


컨테이너는 호스트에서 컨테이너 내부의 프로세스 트리가 보임

# docker ps
CONTAINER ID   IMAGE                                 COMMAND                  CREATED        STATUS               ...
772a8e8fcd80   nextcloud/aio-fulltextsearch:latest   "/bin/tini -- /usr/l…"   2 months ago   Up 5 weeks (healthy) ...
249b437e6556   nextcloud/aio-apache:latest           "start.sh /usr/bin/s…"   2 months ago   Up 5 weeks (healthy) ...
4ce5464fd846   nextcloud/aio-postgresql:latest       "start.sh"               2 months ago   Up 5 weeks (healthy) ...
...

# ps auxf
USER       PID  %CPU  %MEM  START   TIME  COMMAND
root      1328   0.0   0.1  May23  13:20  /usr/bin/containerd-shim-runc-v2 -namespace moby -id 772a8e8fcd80...
root      1460   0.0   0.0  May23   0:51   \_ /bin/tini -- /usr/local/bin/docker-entrypoint.sh eswrapper
ubuntu    1862   0.1  17.5  May23  63:39       \_ /usr/share/elasticsearch/jdk/bin/java ...
ubuntu    2551   0.0   0.0  May23   0:00           \_ /usr/share/elasticsearch/modules/...
root      1475   0.0   0.1  May23  12:48  /usr/bin/containerd-shim-runc-v2 -namespace moby -id 249b437e6556...
www-data  1568   0.0   0.3  May23   4:12   \_ /usr/bin/python3 /usr/bin/supervisord -c /supervisord.conf
www-data  3426   0.0   0.0  May23   0:00       \_ /bin/sh /usr/local/apache2/bin/apachectl -DFOREGROUND
www-data  3431   0.0   0.0  May23   1:12           \_ /usr/local/apache2/bin/httpd -DFOREGROUND
www-data  5540   0.0   0.0  May23   0:48               \_ /usr/local/apache2/bin/httpd -DFOREGROUND
root      1587   0.0   0.1  May23  12:16  /usr/bin/containerd-shim-runc-v2 -namespace moby -id 4ce5464fd846...
lxd       1666   0.0   0.0  May23   0:00   \_ /bin/bash /usr/bin/start.sh
lxd       1998   0.0   0.2  May23   2:32       \_ postgres


오케스트레이션

여러대의 가상머신 또는 컨테이너를 관리하는 기술



한대여러대, 오케스트레이터비고
컨테이너
Docker, LXC, PodmanKubernetes
가상머신Linuxcockpit-machine,
virt-manager,
gnome-boxes
OpenStack, oVirt, Proxmox모두 QEMU-KVM, LibVirt 이용
VMwareVMware WorkstationVMware vSphere
OracleVirtualBox

Vagrant 는 VirtualBox 를 스크립트로 조작하는 도구
https://app.vagrantup.com 에서 이미 만들어진 이미지 다운 가능

VirtualBox Extension Pack 유료 라이선스

MicrosoftHyper-VHyper-V Cluster


스토리지

thin vs. thick provisioning


thin (씬) provisioningthick (씩) provisioning
장점인스턴스 복제 속도가 빠르다write 성능이 (조금) 더 좋다

실제 디스크 용량보다 더 많은 용량을 프로비저닝 할 수 있다.

애써서 자원을 할당해 줬더니 막상 안 쓰더라...
→ 자원 회수 안하고도 그 자원을 다른 사람에게 줄 수 있다.


단점스토리지 호스트의 부담이 (조금) 있다
비고thin → thick 변경은 쉬움

(괄호)는 발표자의 주관이 다소 반영됨

(그림출처) https://tech.gluesys.com/blog/2021/03/17/storage_8_intro.html


Shared Storage

오픈스택, 쿠버네티스 모두 설정하기 쉬운 storage backend 는 NFS 임


Instance Storage

VM 인스턴스가 생성되는 호스트 머신의 스토리지를 이용하는 것

컴퓨팅 호스트가 꺼지면? 해당 볼륨 접근 불가


인스턴스 스토리지의 예 - AWS I3 인스턴스
트랜잭션 많은 워크로드에 최적화된 스토리지 - DB, NoSQL, Elasticsearch, 데이터웨어하우스용
https://aws.amazon.com/ko/ec2/instance-types/i3/
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/storage-optimized-instances.html

모델vCPU메모리(GiB)인스턴스 스토리지(GB)네트워킹 대역폭(Gbps)Read IOPS
(100% Random)
Write IOPS
i3.large215.251 x 475 NVMe SSD최대 10100,12535,000
i3.xlarge430.51 x 950 NVMe SSD최대 10206,25070,000
i3.2xlarge8611 x 1,900 NVMe SSD최대 10412,500180,000
i3.4xlarge161222 x 1,900 NVMe SSD최대 10825,000360,000
i3.8xlarge322444 x 1,900 NVMe SSD101,650,000720,000
i3.16xlarge644888 x 1,900 NVMe SSD253,300,0001,400,000
i3.metal72*5128 x 1,900 NVMe SSD25기가비트3,300,0001,400,000

(참고) 드라이브 IOPS 비교

구분
최저가
(2023.11)
인터페이스순차읽기순차쓰기읽기 IOPS쓰기 IOPS
CloudKT Cloud SSD Server



6~20K
CloudNaver Cloud SSD Server



20K7K
Cloud

2023 연구망 10G 가상머신 벤치마크

Gen3 M.2 4ea RAID 5
NFS over 100GbE
QCOW2 thin 프로비저닝

iperf 20Gbps

GridFTP + HPNSSH 8스트림
753.53 MB/s (6Gbps)



1400~
1500MB/s

290~
300MB/s
45~63K21~26K
Drive삼성 870 EVO (1TB)13.3 만원SATA3
6Gb/s (750MB/s)
560MB/s530MB/s98K88K
CloudAWS i3.2xlarge (1.9TB NVMe x 1)



412K180K
Drive삼성 960 EVO NVMe (1TB)단종PCIe 3.0 x4
32GT/s (4GT/s)
3,200MB/s1,900MB/s380K360K
Drive삼성 980 PRO NVMe (1TB)16.3 만원PCIe4.0x4
64GT/s (8GT/s)
7,000MB/s5,000MB/s1,000K1,000K


Ephemeral (이페머럴, 임시) Storage

재부팅 되면 날아가는 스토리지


https://kubernetes.io/ko/docs/concepts/storage/ephemeral-volumes/

일부 애플리케이션은 추가적인 저장소를 필요로 하면서도 재시작 시 데이터의 영구적 보존 여부는 신경쓰지 않을 수도 있다. 

임시 볼륨 은 이러한 사용 사례를 위해 설계되었다. 임시 볼륨은 파드의 수명을 따르며 파드와 함께 생성 및 삭제되며...