라이브러리 의존성

라이브러리

리눅스 패키지 관리자

라이브러리 의존성


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


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


가상머신 vs 컨테이너

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


가상머신

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

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

# virsh list --all
 Id   Name                            State
-----------------------------------------------
 14   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":"/mnt/192.168...:_nfs_.../...a0892.qcow2",...} # DISK
                                               ...

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


컨테이너

도커는 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


오케스트레이션

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


한대여러대, 오케스트레이터비고
컨테이너도커, LXC, Podman쿠버네티스
가상머신cockpit-machine오픈스택, oVirt모두 QEMU-KVM, LibVirt 이용


스토리지, 볼륨

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