버전 비교

  • 이 줄이 추가되었습니다.
  • 이 줄이 삭제되었습니다.
  • 서식이 변경되었습니다.

목차


라이브러리 의존성

라이브러리

  • 실행파일의 용량이 작은 이유: 라이브러리를 사용하기 때문
  • 프로그램이 메모리에 로드될 때, 라이브러리도 함께 로드 (LIB, DLL, SO 파일)
  • 의존성(dependency) 문제 발생: 라이브러리가 다른 라이브러리를 참조, 복잡함. 마이너 버전까지 일치해야 로딩 가능

...

  • 그래도 풀리지 않은 라이브러리 의존성… 환경을 통으로 이식할 순 없을까?


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

  • 초기에는 에뮬레이션을 위해 개발
    • 다른 프로세서를 위해 컴파일된 바이너리 실행 (예: ARM 프로세서에서 X86 바이너리 실행)
  • 최근에는 환경을 통으로 이식할 수 있는 편리함 때문에 사용
  • 가상화로 인한 성능저하는 2~3% 내외
    • 반가상화 (KVM, VirtIO)의 등장으로 성능 향상, 가상머신이 에뮬레이션 없이 호스트머신의 하드웨어 드라이버를 Call
  • VirtualBox, VMware, QEMU-KVM, Hyper-V


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

  • 그래도 가상머신은 무거움. 리눅스 계정별 자원 쿼터(quota)할당 기능 활용
  • 계정별 시스템 자원 제한, 격리하는 cgroup, namespace 등을 연장하여 컨테이너 개발
  • docker, lxc, podman


가상머신 vs 컨테이너

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


가상머신 - LibVirt

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

...

코드 블럭
themeEmacs
linenumberstrue
# 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/192.168...:_nfs_.../...a0892.qcow2",...} # DISK

                                                  ...

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

가상머신 - VMware

코드 블럭
themeEmacs
linenumberstrue
# 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 msjang
39171 39171 vmx /bin/vmx -s sched.group=host/user
         9f6731d3-.../images/.../...",...} # QCOW2 DISK
                                           #product=2;
    ...

# virsh dumpxml 132-r9-gita.kreonet.net
<domain type='kvm'            name=VMware ESX;
                    version=5.5.0;
                    buildnumber=2068190;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              licensename=VMware ESX Server;name='qemu' type='qcow2' .../>
                    licenseversion=5.0;<source file='/rhev/data-center/mnt/..._nfs_.../9f6731d3-.../images/.../...' index='1'></source>
      <target dev='sda' bus='scsi'/>

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


가상머신 - VMware

코드 블럭
themeEmacs
linenumberstrue
# 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
                  -@ duplex=3;
                    msgs=ui /vmfs/volumes/51f872db-e7b1b18e-c6a2-0025b5010101/
                              054_c7_workspace_msjang/054_c7_workspace_msjang.vmx
39188       vmm0        #product=2;
     :054_c7_workspace_msjang
39196       vmm1         :054_c7_workspace_msjang
39197name=VMware ESX;
           vmm2         :054_c7_workspace_msjang
39198version=5.5.0;
         vmm3         :054_c7_workspace_msjang
39207 39171 vmx-vthread-7:054_c7_workspace_msjang /bin/vmx
39212 39171 vmx-vthread-8:054_c7_workspace_msjang /bin/vmx
39221 39171 vmx-mks  buildnumber=2068190;
                 :054_c7_workspace_msjang /bin/vmx
39222 39171 vmx-svga   licensename=VMware ESX Server;
        :054_c7_workspace_msjang /bin/vmx
39225 39171 vmx-vcpu-0   :054_c7_workspace_msjang /bin/vmx
39226 39171 vmx-vcpu-1    :054_c7_workspace_msjang /bin/vmx
39227 39171 vmx-vcpu-2   :054_c7_workspace_msjang /bin/vmx
39228 39171 vmx-vcpu-3   :054_c7_workspace_msjang /bin/vmx

# cdlicenseversion=5.0;
                    -@ duplex=3;
                    msgs=ui /vmfs/volumes/51f872db-e7b1b18e-c6a2-0025b5010101/054_c7_workspace_msjang/
# 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_msjang-7f29ff24.vswp
-rw-------  root/054_c7_workspace.vmx
39188       vmm0    8.5K Jan 21  2020 :054_c7_workspace_msjang.nvram
-rw-r--r--
39196    root   vmm1    0 Jan 18  2018 :054_c7_workspace_msjang.vmsd
-rw-------
39197  root    3.2K Janvmm2 21  2020      :054_c7_workspace_msjang.vmx
-rw-------
39198    root   vmm3    0 Jan 21  2020 :054_c7_workspace_msjang.vmx.lck
-rw-r--r--  root 
39207 39171 vmx-vthread-7:054_c7_workspace /bin/vmx
39212 39171 vmx-vthread-8:054_c7_workspace /bin/vmx
39221 39171 vmx-mks    263 Jan 18  2018 :054_c7_workspace_msjang.vmxf
-rw-------  root /bin/vmx
39222 39171 vmx-svga    3.2K Jan 21  2020  :054_c7_workspace /bin/vmx
39225 39171 vmx-vcpu-0   :054_c7_workspace_msjang.vmx~
-rw-------  root     538 Jan 21  2020  /bin/vmx
39226 39171 vmx-vcpu-1   :054_c7_workspace_msjang.vmdk
-rw-------  root   32.0G Oct 30 23:18 054_c7_workspace_msjang-flat.vmdk
-rw------- /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     5422.9K Jan 21  2020 054_c7_workspace_msjang_1.vmdk
drwxr-rw-------xr-t  root  384  4.0G2K Oct 30 2320:18 054_c7_workspace_msjang_1-flat.vmdk31 ..
-rw-------  root  159  8.4K0G AprJan 2221  2021 vmware.log2020 054_c7_workspace-7f29ff24.vswp
-rw-------  root   162 8.0M5K Jan 21  2020 vmx-054_c7_workspace_msjang-2133458724-1.vswp

# cat.nvram
-rw-r--r--  root       0 Jan 18  2018 054_c7_workspace_msjang.vmx
nvram = "54_workspace_msjang.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_msjang.vmdk"
scsi0:1.fileName = "054_c7_workspace_msjang_1.vmdk"
...

컨테이너

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

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

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

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/


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

코드 블럭
themeEmacs
linenumberstrue
# docker ps
CONTAINER ID   IMAGE         
코드 블럭
themeEmacs
linenumberstrue
# 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 COMMAND   nextcloud/aio-postgresql:latest       "start.sh"        CREATED       2 monthsSTATUS ago   Up 5 weeks (healthy) ...
...

# ps auxf
USER     ...
772a8e8fcd80  PID nextcloud/aio-fulltextsearch:latest %CPU  %MEM  START"/bin/tini -- /usr/l…"   TIME2 months COMMAND
rootago   Up 5  1328   0.0weeks (healthy) ...
249b437e6556   nextcloud/aio-apache:latest      0.1  May23  13:20  "start.sh /usr/bin/containerd-shim-runc-v2 -namespace moby -id 772a8e8fcd80...
root s…"   2 months ago   Up 5 1460weeks (healthy)  0.0   0.0...
4ce5464fd846  May23 nextcloud/aio-postgresql:latest  0:51   \_ /bin/tini -- /usr/local/bin/docker-entrypoint.sh eswrapper
ubuntu "start.sh"     1862   0.1  17.5  May23  63:39 2 months ago   Up \_ /usr/share/elasticsearch/jdk/bin/java 5 weeks (healthy) ...
...
ubuntu
# ps auxf
USER    2551   0.0PID  %CPU 0.0 %MEM May23 START  0:00 TIME  COMMAND
root      1328  \_ /usr/share/elasticsearch/modules/...
root      1475 0.0   0.0   0.1  May23  1213:4820  /usr/bin/containerd-shim-runc-v2 -namespace moby -id 249b437e6556772a8e8fcd80...
www-dataroot      15681460   0.0   0.30  May23   40:1251   \_ /usr/bin/python3tini -- /usr/local/bin/supervisord -c /supervisord.conf
www-data  3426docker-entrypoint.sh eswrapper
ubuntu    1862   0.01   017.05  May23   063:0039       \_ /binusr/sh share/usrelasticsearch/local/apache2jdk/bin/apachectl -DFOREGROUND
www-data  3431java ...
ubuntu    2551   0.0   0.0  May23   10:1200           \_ /usr/localshare/apache2elasticsearch/bin/httpd -DFOREGROUND
www-data  5540modules/...
root      1475   0.0   0.01  May23   012:48  /usr/bin/containerd-shim-runc-v2 -namespace moby -id 249b437e6556...
www-data  1568   0.0   0.3  May23   4:12   \_ /usr/local/apache2bin/python3 /usr/bin/httpdsupervisord -DFOREGROUND
rootc /supervisord.conf
www-data  3426   0.0 1587   0.0  May23  0.1 0:00     May23  12:16 \_ /bin/sh /usr/local/apache2/bin/containerd-shim-runc-v2 -namespace moby -id 4ce5464fd846...
lxd       1666apachectl -DFOREGROUND
www-data  3431   0.0   0.0  May23   1:12           \_ /usr/local/apache2/bin/httpd -DFOREGROUND
www-data  5540   0.0   0.0   0.0  May23   0:00   \_ /bin/bash /usr/bin/start.sh
lxd       1998   0.0   0.2  May23   2:32       \_ postgres

오케스트레이션

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

...

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

VirtualBox Extension Pack 유료 라이선스

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 성능이 (조금) 더 좋다

Image AddedImage Added

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

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


단점스토리지 호스트의 부담이 (조금) 있다
비고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 프로비저닝

호스트 머신 2대
VM 55개 운영 중 테스트 수행

iperf 20Gbps

HPNSSH + GridFTP 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/

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

  • 캐싱 서비스
  • 읽기 전용 데이터를 처리하는 애플리케이션

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

...

스토리지, 볼륨

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