이 페이지의 이전 버전을 보고 있습니다. 현재 버전 보기.

현재와 비교 페이지 이력 보기

« 이전 버전 2 다음 »


라이브러리 의존성

라이브러리

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

리눅스 패키지 관리자

  • 초기 리눅스 코드 다운받고 컴파일 해서 사용
  • 컴파일은 많은 자원과 시간이 소요 > 의존성 확인, 컴파일 된 바이너리 다운로드 (apt, yum, dnf)
  • 패키지 관리자 (pip, bundle, brew, npm)

라이브러리 의존성

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


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

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


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

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


가상머신 vs 컨테이너

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


가상머신은 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
                                               ...


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

# 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 임

/mnt/md1/k8s_shared

/mnt/md1/o7k_shared

  • 레이블 없음