학습내용
- 하이퍼바이저 기반 기술과의 비교
- 컨테이너 기반 가상화
- LXC (Linux Container)
- LXD
학습목표
- 하이퍼바이저 기술의 단점 및 한계에 대해 알아본다.
- 컨테이너기반 가상화의 특징에 대해 알아본다.
- 리눅스 컨테이너기술인 LXC와 LXD에 내용을 파악하고 차이점에 대해 알아본다.
하이퍼바이저 기반 기술과의 비교
가상화의 단점
- 불필요한 기능의 중복
- 호스트OS와 게스트OS간의 기능 중복
- 프로세스 스케줄링
- 호스트OS와 게스트OS간의 기능 중복
- 상대적으로 무겁다
- 오버헤드(15~20%)정도
- 배치(Deployment)의 어려움
컨테이너 기반 가상화
도커의 개념
- BUILD / SHIP / RUN
- 빌드와 배포 실행하기 위한 환경을 쉽게 제공해줌.
기존의 가상화와 다른개념
- 하드웨어 가상화가 아닌 실행환경의 분리(isolation)
- 각 컨테이너간 영향을 분리
- 게스트 OS가 없음
- 예) mysql을 설치한다고 했을때, 1번컨테이너에서 설치시 2번 컨테이너에서 사용불가
도커의 성능
- 오버헤드가 5%이내
- network 정식버전은 0.97~0.98로 2~3%의 오버헤드
도커의 특징
- 모든 컨테이너들이 동일 OS커널 공유 (Linux only)
- 독립적인 스케줄링이나 CPU/메모리/디스크/네트워크를 가상화 하지 않음
- 리눅스의 특수 기능(LXC : 리눅스컨테이너)을 사용한 실행환경 격리를 응용
- 처음에는 우분투에서 현재 리눅스 배포판 (fedora, RHEL. contos, ...) 에서 사용가능
- 다른 OS (윈도우/OSX)에서는 일반 하이퍼바이저(경량)가 있어야함
- 현재는 LXC → Libcontainer를 사용해 리눅스 의존도를 줄이려 하고 있음 (다른OS에서도 사용가능하게...)
- 시스템의 분리에는 Linux Containers (LXC)를 - (컨테이너 독립개념)
- 파일시스템은 Advenced multi layered unification filesystem (Aufs)를 사용
- 우분투와 데비안(계열이 비슷한 OS) 두 이미지를 동시에 만들경우 공통부분은 공유하고, 차이나는 부분만 별도 나누어서 관리 하는 파일시스템
- 그리고 Git 같 은은 이미지 버전컨트롤 시스템 도입
- 리눅스 컨테이너 가상화 (LXC)기반
- 2014/6/.10 출시
- 구글과 같은 메이저 벤더들에 빠른 속도롤 채택
- 현재 사실상의 표준 (de facto standard)이 됨
- 하이퍼바이저와 달리 게스트OS란 계층이 없기 때문에 더 가볍고, 빠른 성능이 남
- 하이퍼바이저 기반의 우분투와 도커 기반의 우분투가 실제 설정 / 사용하는 방식이 상이
- 환경변수 설정, 서비스 수행방식, ...
- 구글에서 만든 Go라는 언어로 작성
- DotCloud
- PaaS 공급업체 DotCloud가 PaaS의 벡엔드로 사용하는 컨테이너 기반의 가상화 소프트웨어를 오픈소스로 공개
- 현재 도커(Docker Inc.)로 회사명 변경
- Docker는 하나의 Linux시스템에 여러 Linux시스템 운영을 위한 소프트웨어
LXC
- Linux Container
- 시스템레벨 가상화
- cgroups (control groups)
- CPU, 메모리, 디스크, 네트워크 => (provisioning 자원을 할당받고 관리하는 기능 - 리눅스자체내장기능)
- Namespaces (Namespace Isolation)
- 프로세스트리, 사용자계정, 파일스스템, IPC, ...
- 호스트와 별개의 공간설정
- chroot (change root) 명령어에서 발전
- chroot jail
- chroot 상의 폴더에서 외부 디렉토리 접근 안됨
Libcontainer
- 컨테이너 최적화 기술 LXC외에 리브컨테이너(libcontainer)란 별도의 실행 드라이버 (execdriver)를 만들어, 특정 우분투 버전외에 다양한 리눅스를 지원 가능
- 맥OS나 윈도에서도 사용할 수 있는 가능성 생김
- native (libcontaier), lxc (LXC)
- native라면 libcontainer를 사용해 생성한 container
- lxc라면 LXC를 사용해 생성한 container
도커의 구조
- 도커 =
- LXC (cgroups+namespaces) or libcontainer +
- AUFS (Advanced multi layered unification filesystem) +
- 이미지, 컨테이너 생성관리 +
- 각종 부가기능
LXD
- 우분투를 만든 캐노니컬(canonical)에서 만든 컨테이너 솔루션
- 기존의 LXC에 보안 개념까지 추가
- Secure by default
- Unprivileged container
- root가 아니어도 컨테이너 생성 가능
- 도커와 LXD는 경쟁관계인가?
- 둘의 기술은 공유하는 기술이다.
- 도커는 Application Container, LXD는 Machine Container
- LXD위에 도커를 돌리는게 가능하다.
- LXD는 Contaier "Hypervisor"
- 경쟁기술이라기 보다는 보완관계(도커와 병행 가능)
- KVM (Kernel Virtual Machine)을 경쟁기술로 간주
LXD 구성요소
- A system-wide daemon (lxd)
- A command line client (lxc)
- An OpenStack Nova plugin (nova-compute-lxd)
LXD특징
- Secure by design (unprivileged containers, restrictions and mush more)
- 디자인 단계부터 보안을 처리했다.
- Scalable (from containers on your laptop to thousand of compute nodes)
- 대형서비스에 유연하다.
- KVM보다 LXD가 더 많은 Instance를 띄울수 있다.
- Intuitive (simple, clear API and crisp command line experience)
- 직관적이다.
- Image based (no more distribution templates, only good, trusted images)
- Live migration
- 리얼타임 마이그레이션
- LXC위에 만든 Layer 이다
- LXD achieves 14.5 times greater density than KVM
- KVM보다 15배 정도의 밀도를 제공
- LXD launches instances 94% faster than KVM
- 인스턴스를 띄울때 약2배성능
- LXD provides 57% less latency than KVM
- 딜레이가 KVM의 절반정도이다.
On Ubuntu 16.04LTS 에서 실습
도커 Mysql 이미지를 사용할때
보통 일반적인 사용에는 거의 문제가 발생하지 않지만, MySQL만으로 되어 있는 이미지가 아니라, 리눅스 플랫폼위에 MySQL을 설치한 것입니다.
예를 들면 공식(Official)이미지인 MySQL은 데비안(Debian)리눅스 기반입니다.
이를 확인하려면 /etc/issue 파일의 내용를 확인해 보면 됩니다.
우분투는 데비안 계열이라 큰 문제없이 사용할 수 있지만 만약 우분투에 설치된 MySQL이 필요하다거나 아니면 CentOS나 Fedora/RHEL계열의 레드햇 기반의 리눅스에 설치된 MySQL이 필요하다면 다른 이미지를 검색하거나 직접 이미지를 생성해야 하는 경우도 있습니다.
다시 말해 단순 사용할 경우 외에 스크립트를 사용해서 서비스를 제어해야 하는 경우에는 차이가 발생할 수 있으니 확인을 해둬야 합니다.
0 Comments