'OSv'에 해당되는 글 2건

  1. 2016.07.15 Unikernel 2 : UniK 1
  2. 2016.07.06 Unikernel - Part 1
DevOps2016.07.15 13:38


Today Key : Unikerenl, 유니커널, rump, Unik, provider, OSv, 관리도구, Open, Source

 

오늘은 지난 포스팅에 이어서 Unikernel의 2번째 포스팅입니다.

이번 포스팅에서는 Unikernel 응용 프로그램을 손쉽게 컴파일하고 관리할 수 있는 도구인 UniK에 대한 첫 번째 내용입니다.

다양한 Unikernel 환경을 통합 관리를 해줄 수 있는 오픈소스 프로젝트로, Unikernel 홈페이지에서 살펴볼 수 있는

공식 오픈소스 프로젝트이기도 합니다.


 

 

 

 

UniK?

Unikernel 응용 프로그램을 컴파일하고 배포 있게 도와주는 오픈 소스 도구. (오픈소스 프로젝트로 진행)

UniK Local 다양한 가상화, 클라우드 환경에서 컴파일 이미지로부터 생성된 Instances들을 실행하고 관리.
   
, 작성된 코드를 배포하고자 하는 환경에 따라서 컴파일하고 이렇게 컴파일 이미지를 다양한 환경에서
   
서비스가 가능한 Instance 형태로 배포하고, 관리를 있다.

•기존에 Unikernel 구현하는 다양한 Library OS 형태의 프로젝트를 하나의 관리 도구로서 손쉽게 사용할 있다.

  

 

UniK에서 지원되는 Unikernel Type.

•rump: Python3 , Node.js , Go , C/C++

•OSv:  Java

  향후에 Unikernel Language 추가 예정. 현재 로드맵 상으로는 MirageOs 다음에 추가될 예정.

 

UniK에서 지원되는 실행 가능한 환경(Provider)

•Virtualbox

•AWS

•vSphere

•QEMU

※ OpenStack 향후 지원  예정(Roadmap)

 

 

UniK 사용한 구현 예제

•Unik를 사용하여 간단한 Web서버 코드(Python)를 Unikernel 형태로 Build하고,

   배포하는 예제를 통해서 UniK가 어떻게 동작하는지 보겠습니다.

•이번 예제에서는 Provider로는 Local에서 VirtualBox를 사용하였고, Web 서버 코드는 Python, Unikerenl Type은 rump를 사용합니다.

 

•Unik 설치 후에, Unik를 사용하기 위한 Daemon을 띄우면 아래와 같이 데몬이 뜨게 됩니다.
   실제로는 각 Provider에 따라서, 별도의 데몬이 생성됨. (관련 내용은 다음 포스팅에서 다룰 예정입니다.)

   우선 여기서는 Unik를 사용하기 위해서 Daemon을 먼저 띄운다고 생각하시면 됩니다.

 

 

•Unik Daemon은 아래와 같이 하나의 VM 형태로 구동되게 됩니다. 

   즉, Daemon을 실행하면, Provider에(여기서는 virtual box) 하나의 VM이 생성되게 됩니다. 

   그리고 이 VM을 통해서 Unik의 Instance를 생성 및 관리를 하게 됩니다 . 

 

•이제, Web서버를 Unikernel 형태로 만들겠습니다.

   현재 디렉토리를 보면, svr.py라는 파이썬 코드가 있으며, manifest.yaml이라는 설정 파일이 있습니다.

   manifest.yaml은 UniK를 통해서 Unikernel 이미지를 만들 때, 어떤 것을 참조해서 만들 것인지에 대한 설정을 넣는다고

   생각하면 되는데, 여기에서는 svr.py를 가지고 만들겠다는 설정이 간단히 들어있습니다.

 

 

•Unik로 이미지를 만들기 전에, 먼저 파이썬 코드가 정상적을 동작하는지 봅니다.

 

 

 

•코드를 실행하고 웹에서 확인을 해보면, 다음과 같이 Local Host에서 간단한 웹화면이 표기 됩니다.

 

•이제 본격적으로 UniK를 통해서 Unikerel 이미지를 생성합니다.

    이미지가 작아서 안보일 수 있지만, 내용을 보면,

    unik build --name zigiWebImg --path ./ --compiler rump-python-virtualbox --provider virtualbox

•unik build라는 명령으로 어떤 이미지를 만들고, 어떤 Unikernel Type 및 언어, Provider를 할 것인지 등을 지정해서 이미지를 만듭니다.
   생성된 이미지는 약 127MB입니다.

 

 

 

 

•만들어진 이미지를 통해서 Instance르 생성합니다.
   unik run --instanceName zigiWebInstance --imageName zigiWebIm

•이미지를 통해서 발 인스턴스를 생성하게 되는 데, 이미지 이미지 생성 시에 필요한 사항을 넣었기 때문에

   Instance 생성 시에는 바로 이름만 가지고 생성할 수 있습니다.

 

 

 

•Instances는 아래와 같이, Hyperevisor 위의 하나의 VM으로 생성이 되게 됩니다.

 

 

 

•그리고 해당 VM이 받은 IP를 통해서 접속을 해보면, 아래와 같이 정상적으로 하나의 Web서버가 만들어져서 정상적으로

   구동이 된 것을 볼 수 있습니다.

 

 

결과적으로, 하나의 웹서버 코드를 가지고 바로 이미지를 컴파일 하게 되면 해당 웹서버가 동작하기 위한 커널의 라이브러리와 Application의 라이브러리를 가지고 작은 디스크 이미지를 만들게 되고, 이를 통해서 Instance를 생성하여 서비스를 할 수 있게 됩니다.

 

 

 

 

 

Posted by 네떡지기
DevOps2016.07.06 08:18

Today Keys : Unikernel, Container, Docker. specialised, single, address, space, ClickOS , Clive , Drawbridge  ,HalVM , IncludeOS , Ling , MirageOS , OSv , Rumprun ,Runtime.js , UniK

 


오랜만에 남기는 이번 포스팅은 Unikernel이라는 기술에 대한 첫 번째 포스팅입니다.

Unikernel은 올 초에 Docker에 Join되면서 조금 더 많은 관심을 받고 있는 듯 합니다.

Rethinking Cloud Infrastructure라는 문구가 Unikernel 웹이나, Unikernel System 웹에서 나오고 있지만,

개인적으로는 Cloud보다는 IoT에 조금은 더 가깝지 않을까 생각해봅니다. ^^;

Unikernel에 관련 1차 포스팅이기 때문에 추후에 내용은 수정/보완 될 수 있을 듯 싶습니다.


 

 

Unikernel 이란?

•Unikernels are specialised, single-address-space machine images constructed by using library operating systems.

•별도의 OS Kernel 사용하지 않고,  Application 서비스하는 필요한 Kernel 특정  라이브러리만을 포함하여 Compile하여,

    Hypervisor 혹은 Baremetal 등에서 바로 서비스가 가능하도록 지원.

Haskell이나 Erlang 같은 Type-safe 언어는 물론, C/C++/Java/Python 같은 일반적인 언어를 사용하여 Build 가능. , Application 구현하기 위한 언어에 제약이 없이 Unikernel 사용 가능.

  ※ Unikernel 컴파일하기 위해서 사용되는 Library OS 따라서 지원되는 개발 언어는 다름)

2016 1 21일에 Unikernel System  Docker 합류

 

 

 

 

Unikernel  특징

Application 구동에 필요한 라이브러리만 포함되기 때문에 매우 가벼움.

•불필요한 서비스가 사용되지 않기 때문에 매우르게 구동(< 1ms)

Application 필요하지 않는 불필요한 Kernel 배포되지 않기 때문에, 공격 노출을 줄여 보안이 강화

General 목적 / Multi-user 컴퓨팅에는 적합하지는 않음.

 

 

Unikernel 주요 프로젝트

Unikernel   웹사이트(http://unikernel.org/) 에서는 Unikernel 관련된 Open Source 프로젝트로 아래의 11 프로젝트가 소개.

     - ClickOS / Clive / Drawbridge  /HalVM / IncludeOS / Ling / MirageOS / OSv / Rumprun /Runtime.js / UniK

Unikernel 관련된 주요 프로젝트의 내용은 아래와 같음.

 

 

 

 

 

Container과의 비교

Unikernel Container 동일하게 Immutable Infrastructure 제공

Unikernel Container 유사하게 Resource 사용에 대한 Overhead 적음.

Container Host OS 기본 Kernel 공유하는 반면에 Unikernel 개별 App 구동하기 위한 일부 라이브러리에 대해서 

   Applicaion과 함께 컴파일하여 해당 Application에서 독립적으로 사용

Container에서도 하나의 Kernel 공유했을 경우에 발생하는 이슈와 보다 Container 최적화하기 위해,

   CoreOS, Atomic(Redhat 지원 프로젝트), Photon OS(VMware), Snappy(Ubuntu) 같은 Container 전용의 OS 사용하여

   Container별로 개별 Kernel 사용하면서 크기를 감소시키기도 하지만, Unikernel 경우에는 Application 구동에 필요한 최적의

   Library만을 포함하기 때문에 보다 최적화 시킬 있음
 

 

 

 

 

Library OS  특징

single address space 사용하기 때문에 User space Kernel space 간의 전환이 필요 없기 때문에, 따라서, Context switching 없이 하드웨어로 직접적인 접근이 가능하게 하여 성능을 향상

Library OS 구동되기 위한 특정 하드웨어의 device driver 필요로 하는 , 하드웨어의 변화 속도가 빨라짐에 따라서 이러한 driver 정기적으로 다시 만들어야 하는 부분이 부담으로 작용하지만, OS 가상화로 인해서 이러한 부담은 해소될 있음.
Hpyervisor에는 stable 가상하드웨어를 제공하기 때문에 library OS 이러한 환경에서 동작할 경우에 Hardware device driver 대한 이슈를 해결할 있음.

 

,  

Posted by 네떡지기

티스토리 툴바