Unik으로 Unikernels 소스 오픈의 베일을 벗기다


요약
클라우드 원생 생태계가 끊임없이 발전함에 따라 많은 대체 해결 방안이 끊임없이 나타나는데 이것은 응용 프로그램 배치 방법의 현황에 도전을 제기했다.Unikernels는 이러한 해결 방안에서 신속하게 주목을 받는 일종의 실행 가능한 이미지로 가상 기기 모니터링 프로그램에서 자체적으로 실행할 수 있으며 단독 운영체제가 필요하지 않다.
클라우드 원생 플랫폼이 유니버설 플랫폼을 생태계에 통합시키기 위해서는 유니버설 플랫폼에 용기와 같은 서비스를 제공해야 한다.이 글에서, 우리는 유닛, 유닛을 위한 소스 컴파일링 시스템을 소개할 것이다.
UniK (you neek) 는 Unikernels 컴파일과 편집을 간소화하는 도구입니다.UniK는 Docker가 용기를 구축하고 배열하는 방식과 유사하게 유행어 (C/C++, Golang, 자바, Node.js.Python) 를 unikernels로 자동으로 컴파일합니다.UniK는 unikernels를 다양한 클라우드 플랫폼의 가상 시스템으로 배치합니다.

UniK 설계
UniK 데몬은 3개의 주요 어셈블리로 구성됩니다.
  • API 서버
  • 컴파일러
  • 공급업체
  • API 서버는 CLI 또는 HTTP 클라이언트에서 요청을 처리한 다음 요청에 적합한 공급자 및/또는 컴파일러를 결정합니다.
    API 서버가 구축 요청(POST /images/:image_name/create)을 받았을 때 지정한 컴파일러를 호출하여 원시 이미지를 구축한 다음에 원시 이미지를 지정한 공급자에게 전달한다. 이 공급자는 Stage() 방법으로 원시 이미지를 처리하고 이를 기초에 설치된 부팅 가능한 이미지(예를 들어 AWS의 Amazon AMI)로 전환한다.
    우리 스스로 단일 핵을 개발해 봅시다.

    UniK를 사용하여 GO HTTP 데몬 배치하기
    이 자습서에서는 다음을 수행합니다.
  • Installing UniK

  • Writing a simple HTTP Daemon in Go
  • Compiling to a unikernel and launching an instance on Virtualbox

  • UniK 설치, 구성 및 시작
    선결 조건
    다음 항목이 설치되어 있는지 확인하십시오

  • Docker은 설치 및 실행 중이며 최소 6GB의 여유 공간을 건축 이미지
  • 에 사용 가능
  • jq
  • make
  • Virtualbox
  • UniK 설치
    $ git clone https://github.com/solo-io/unik.git
    $ cd unik
    $ make binary
    
    참고: make은 처음 실행하는 데 몇 분 걸립니다.UniK Makefile에서 UniK 종속성 번들에 대한 모든 Docker 이미지를 추출합니다.
    그런 다음 unik 실행 파일을 $PATH에 배치하여 UniK 명령을 실행하기 쉽도록 합니다.
    $ mv _build/unik /usr/local/bin/
    
    VirtualBox에서 호스트 전용 네트워크 구성
    1. Virtualbox를 엽니다.
    2. 기본 설정 > 네트워크 > 호스트 네트워크만 엽니다.
    3. 인터페이스 오른쪽에 있는 녹색 추가 버튼을 클릭한다.
    4. 호스트 어댑터의 이름만 기록합니다. (예: "vboxnet0")UniK 구성에 필요합니다.
    5. 이 순수한 호스트 네트워크에 Virtualbox DHCP 서버가 설정되어 있는지 확인
    6. 호스트 네트워크만 선택한 후 편집 버튼(드라이버 이미지)을 클릭합니다.
    7. 어댑터 탭에서 어댑터의 IPv4 주소와 네트워크 마스크를 확인합니다.
    8. DHCP 서버 탭에서 서버 사용 상자를 선택합니다.
    9. 서버 주소를 어댑터 IP와 동일한 서브넷에 있는 IP로 설정합니다.예를 들어 어댑터 IP가 192.168.100.1이면 DHCP 서버 IP를 192.168.100.X으로 설정합니다. 여기서 X는 2-254 사이의 숫자입니다.
    10. 서버 마스크를 방금 발견한 네트워크 마스크로 설정합니다.
    11. 동일한 서브넷 IP 범위에 바인딩된 위/아래 주소를 설정합니다.DHCP 서버 자체에 사용하는 IP보다 X가 높은 X-254을 사용하는 것이 좋습니다.예를 들어, DHCP 서버가 192.168.100.2이면 하한선과 상한선을 각각 192.168.100.3, 192.168.100.254으로 설정할 수 있습니다.
    UniK 데몬 구성
    UniK 구성 파일은 $HOME/.unik에 저장됩니다.이 디렉토리를 생성합니다(없는 경우).
    $mkdir $HOME/.unik
    
    
    텍스트 편집기를 사용하여 다음을 생성하여 $HOME/.unik/daemon-config.yaml에 저장합니다.
    providers:
      virtualbox:
        - name: my-vbox
          adapter_type: host_only
          adapter_name: NEW_HOST_ONLY_ADAPTER
    
    생성한 네트워크 어댑터의 이름을 NEW_HOST_ONLY_ADAPTER으로 바꿉니다.
    UniK 시작 및 Virtualbox 인스턴스 탐지기 자동 배포
  • 새 터미널 창/탭을 엽니다.이 터미널은 Unik 데몬을 실행하는 곳입니다.
  • cd에서 _build까지 생성된 make 디렉토리
  • 실행 unik daemon --debug(--debug 플래그 옵션, 자세한 출력을 원하는 경우)
  • UniK는 자체 30MB Unikernel을 컴파일하여 배포합니다.이 단내핵은 Unik Instance Listener이다.실례 탐지기는 udp 방송을 사용하여 (IP 주소) 와 Virtualbox에서 실행되는 안내 실례를 검사합니다.
  • 이 완료되면 UniK는 명령을 실행하고 수락할 준비를 하고 있습니다.
  • 새 터미널 창을 열고 CLI 대상을 로컬 시스템의 로 설정하려면 unik target --host localhost 을 입력합니다.

  • Go HTTP 서버 작성
    새 터미널 창을 열지만 데몬이 실행될 때 이 창을 유지합니다.이 창은 UniK CLI 명령을 실행하는 데 사용됩니다.
    1. httpd를 만듭니다.분류하여 보존하다
    텍스트 편집기를 사용하여 파일 httpd.go을 만듭니다.파일에서 다음 코드를 복사하여 붙여넣습니다.
    package main
    
    import (
        "fmt"
        "net/http"
    )
    
    func main() {
        http.HandleFunc("/", handler)
        http.ListenAndServe(":8080", nil)
    }
    
    func handler(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "my first unikernel!")
    }
    
    2. 실행 코드
    이 코드를 실행하려면 go run httpd.go을 사용하십시오.서버가 실행 중인지 확인하려면 http://localhost:8080/을 방문하십시오.
    3. 가상 Godeps 파일 만들기
    가상 Godeps 파일을 만들어야 합니다.이것은 Go 컴파일러 Go 프로젝트와 의존 항목을 어떻게 구성하는지 알려주는 데 필요하다.다행히도, 이 예에서 우리의 프로젝트는 의존항이 없다. 우리는 간단한 Godeps 파일을 작성하기만 하면 되고, godep을 설치할 필요가 없다.
    참고: 가져오기 의존 항목과 패키지 패키지가 있는 Go 프로젝트에는 Godeps를 설치하고 프로젝트에서 GO15VENDOREXPERIMENT=1 godep save ./...을 실행해야 합니다.상세한 것은 Compiling Go Apps with UniK을 보십시오.
    가상 Godeps 파일을 만들려면 httpd.go과 같은 디렉토리에 Godeps라는 폴더를 만듭니다.내부에 Godeps.json이라는 파일을 만들고 다음을 내부에 붙여넣습니다.
    {
        "ImportPath": "my_httpd",
        "GoVersion": "go1.6",
        "GodepVersion": "v63",
        "Packages": [
            "./.."
        ],
        "Deps": [
            {
                "ImportPath": "github.com/solo-io/unik/docs/examples",
                "Rev": "f8cc0dd435de36377eac060c93481cc9f3ae9688"
            }
        ]
    }
    
    이 예에서 여기서 중요한 것은 my_httpd이다.이것은 Go 컴파일러가 $GOPATH/src/my_httpd에서 프로젝트를 설치하도록 지시합니다.
    4.너무 좋아요!현재 우리는 이미 이 코드를 하나의 단일 핵으로 컴파일할 준비가 되어 있다.

    VirtualBox에서 실행할 이미지 컴파일
    1. 자료 수집httpd.go이 있는 디렉토리에서 다음 명령을 실행합니다.
    unik build --name myImage --path ./ --base rump --language go --provider virtualbox
    
    
    이 명령은 작업 디렉토리(./)의 소스 코드를 컴파일하기 위해 UniK에 rump-go-virtualbox 컴파일러를 사용하도록 지시합니다.
    2. 출력 관찰
    데몬을 실행하는 터미널 창에서 build 명령의 출력을 볼 수 있습니다.
    3. 디스크 이미지 찾기build이 완료되면 생성된 디스크 이미지가 $HOME/.unik/virtualbox/images/myImage/boot.vmdk에 상주합니다.
    4. 디스크 이미지 인스턴스 실행
    다음 명령을 사용하여 이 이미지의 인스턴스를 실행합니다.
    unik run --instanceName myInstance --imageName myImage
    
    5. IP 확인
    실례가 시작된 후에 IP가 실행 중인지 확인합니다.unik instances을 실행합니다.인스턴스 IP 주소를 나열해야 합니다.
    6. 인스턴스 보기!
    브라우저를 http://instance-ip:8080으로 가리키며 실행 중인지 확인하십시오!

    끝맺다
    이미지 정리 및 생성된 인스턴스
    unik rmi --force --image myImage
    
    우리 끝났어.우리는 네가 이 문장과 강좌에서 이익을 얻고 미래의 문장에 계속 관심을 가지기를 바란다.

    좋은 웹페이지 즐겨찾기