'open'에 해당되는 글 3건

  1. 2016.07.15 Unikernel 2 : UniK 1
  2. 2015.05.26 Docker : Part 3
  3. 2014.12.14 Programmability for Networker : Part 12 (Cisco OnePK: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 네떡지기
분류없음2015.05.26 17:08

Docker, Dockerfile, run, commit, built, attach,  image , container : today Keay

 

개발자와 Sysadmin을 위해서 빌드(Build)하고, 이동(Ship)하고, 분산된 어플리케이션을 실행(Run)하기 위한 OpenPlatform인

Docker의 3번째 포스팅입니다.  이번 포스팅에서는 Docker File을 사용하여 Docker 이미지를 만들어 봅니다.

Docker Image로 Container를 생성하고, 생성된 Container의 내용을 변경하고 변경된 Container를 이용하여

다시 새로운 Docker 이미지를 생성해봅니다. 그리고 그렇게 만들어진 이미지가 새로운 Container에 적용되는지를 알아봅니다.

 


 

Docker File로 이미지 생성하기

   - 기존 Docker 이미지와 Docker File을 사용하여 새로운 Docker Image를 생성

   - Docker File에는 필요한 내용들에 대해서 명세해 놓음. [Docker File에 대한 포스팅은 추후 포스팅 할 예정입니다]

   - Docker 이미지를 생성은 build 명령을 사용합니다.  이 때 tag 옵션을 사용하여 해당 이미지의 repository name을 지정하며,

     이 이름은 소문자, 숫자, '_', '.' 으로 이뤄지며, 대문자는 되지 않습니다.

   - # docker build --tag repository_name:tag

 

 

 

   - 생성한 이후의 dockar images 명령을 사용하여, 생성된 이미지를 다음과 확인할 수 있다.

 

 

   - Docker 이미지를 생성하는 데, 사용된 Docekrfile의 내용이다.

     추후에 다룰 예정이지만, 간단하게 몇 가지만 보면

     * FROM으로 생성한 이미지의 base 이미지를 지정합니다

        이 이미지는 Local에 존재하면 그 이미지를 사용하며 없으면 Docker Hub에서 가져옵니다.

     * MAINTAINER는 해당 이미지를 만든 사람을 기록한다.

     * RUN 으로 생성된 이미지에 적용된 명령을 넣는다.

     * VOLUME, WORKDIR, CMD, EXPOSE 등 나머지 옵션은 다음 포스팅에서 다룰 예정입니다.

   - Dockerfile에 기록된 항목은 Dockerfile에 기입하기도 하지만, Container 생성 시에 옵션으로 적용하기도 합니다.

     이 경우에는 Dockerfile보다는 옵션 값이 더 우선 시 됩니다.

 

 

 


 

 

 

Docker File로 생성한 이미지를 Container 만들고, 확인하기

 

    - Docker Image로 이제는 Container를 만들고 실행해 봅니다.

    - 방금 전에 위에서 생성한 nginx를 설치한 Docker image를 사용하여 Container를 만듭니다.

    - Container는 docker run 명령을 사용하며 각종 옵션을 사용할 수 있습니다.

      아래에서 사용된 옵션 중 -p는 Port Redirection을 하는 역할을 합니다. Host_Port:Contaner_Port 로,

      아래 예제는 Host의 8001 포트로 접근하는 것을 Container 80으로 전달합니다.

    - # docker run <option> <image_Repo | image ID> <runnning_process>

    - 현재 동작 중인 Container 확인은 docker ps  명령을 사용하여 볼 수 있습니다

 

 

    - 위와 같이 Container를 만들어서 구동 시키게 되면, Host의 8001로 접근하여 해당 Container의 80서비스를 열 수 있습니다.

      아래는 8001로 접근하여 nginx! 초기 페이지가 열린 것을 확인 할 수 있습니다.

 

    - 이번에는 다른 옵션을 사용하여 Container를 만들어서 실행해봅니다.

    - 마지막 Container에서 실행 할 값을 /bin/bash 로 입력했습니다.

    - 위의 에제에서는 Dockerfile에서 nginx를 구동하도록 되어 있지만 /bin/bash로 변경하였기 때문에 해당 명령을 쉘을 제어하게 됩니다.

    - Container 생성 후, 상태를 보면 아래와 같이 COMMAND 부분이 /bin/bash로 된 것을 볼 수 있습니다.

 

 

 

 

    - Host에서 Container로 docker attach 명령을 사용하여 접근하여, nginx 구동 후 동일하게 서비스가 되는 것을 볼 수 있습니다.

    - # docker attach [Container_name | Container_ID ]

 

 

 

 

 


 

 

Docker Container의 데이터 수정 후, 변경된 Container을 Docker 이미지로 Commit

    - 이번에는 Container 내부의 데이터를 수정하여, 변경된 사항에 대한 Container를 가지고 이미지를 생성해봅니다.

    - Docker 이미지로 Container를 만드는 것과 반대로, Container로 Docker 이미지를 만드는 작업입니다.

    - 테스트를 위해서 nginx의 index.html을 아래와 같이 변경해보았습니다.

    - 8001로 접속 시에, 초기 메시지가 변경된 것을 볼 수 있습니다.

 

  

 

   - 새로운 이미지를 만들기 전에, 현재 이미지를 확인해봅니다.

   - docker commit 명령을 사용하여 새로운 이미지를 만듭니다.

   - docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]   

      * -a , --author=""   : Image 제작한 사람

          -m, --message="" : commit 메시지

   - zigi/nginxubuntu:0.2 이미지가 생성된 것을 볼 수 있습니다. 이 이미지는 zigi1 Container를 통해서 만들어졌습니다.

 

 

   - 새로 만들어진 이미지로, 새로운 Container(zigi2)를 생성합니다. 

   - 새로운 Container는 8002포트에서 대해서 80포트로 Redirection 되도록 하였습니다. 

 

 

   - 새로운 Container의 nginx 서비스가 구동하고 나면, index.html이 변경된 nginx가 구동된 것을 확인할 수 있습니다.

 

  

Posted by 네떡지기
분류없음2014.12.14 04:16

 


이번에는 Cisco OnePK에 대한 아주 간단한 소개와 앞으로 포스팅 하게 될 OnePK에 대한 예제 내용들입니다.

이번 포스팅에서는 OnePK로 할 수 있는 예제 결과에 대해서만 간략하게 보여드리고,

이후 포스팅부터는 OnePK에 대한 좀 더 기술적인 내용과 함께

이번 포스팅에 보여드린 예제에 대해서 코드와 함께 좀 더 자세히 살펴보도록 하겠습니다.

 


 

Cisco OnePK (Platform Kit)

 

 ○ OnePK 란?

     - Cisco Open Network Environment SDN 전략 요소

     - 개발/자동화/빠른 서비스 생성 등의 작업을 손쉽게 하게 도와주는 툴킷

     - 다양한 언어(C, Java, Python)를 사용할 수 있도록 API를 제공

     - API를 사용하여 비즈니스 요구에 따른 확장, 변경 등의 다양한 작업 가능.

 

 

 ※ Cisco OnePK Site : https://developer.cisco.com/site/onepk/index.gsp

 

 

 ○ OnePK를 사용한  예제 1

     - Network Element(Device)에 접속하여 다양한 속성값을 가져올 수 있다.

 

 

 

 ○ OnePK를 사용한  예제 2

     - Network Element(Device)의 정보를 가져와서 확인할 수 있다. 

- Network Element의 실제 Interface 정보 -

 

- OnePK를 사용하여, Interface 번호와 Description을 가져온 결과 -

 

 

 ○ OnePK를 사용한  예제 3

     - Network Element의 설정을 OnePK에서 제공하는 API를 통해서 변경 ( Interface Descpriton 변경)

 

 

 

 

 

 ○ OnePK를 사용한  예제 4

     - Network Element에 직접 CLI 명령을 통해서 정보 확인 및 Config 설정

 

- CLI 명령을 통해서, 현재 정보를 출력하고, Loopback Interface를 생성 후, 동일한 정보를 출력하여 확인 -

 

 

● Cisco OnePK에 대한 소개 정보는 솔라구구님 블로그를 참조하셔도 좋습니다.

   : http://sola99.tistory.com/208

 

 

Posted by 네떡지기

티스토리 툴바