仮想化ツール >

目次

概要

  • HyperContainerは、Hypervisor-agnostic Docker Runtime(特定のハイパーバイザに依存しないDocker実行環境)です。
    HyperContainer = Hypervisor + Kernel + Docker Image
    1. 軽量でコンテナ起動が高速です。
    2. 特定のハイパーバイザに依存せず、ポータビリティがあります。現時点では、KVM(with qemu)とXenをサポートしています。
    3. ホストのKernelを共有せず、コンテナは1つのプロセスとして認識され、ホストからコンテナ内のプロセスは見えません。通常のコンテナより隔離性が向上しています。
    4. OCI準拠イメージ(Dockerイメージも)を利用できます。
    5. DockerライクなCLIを備えています。

インストール

ベアメタル(的)

手動

  • セットアップ検証は、VirtualBoxで行っています。ベアメタルや従来のハイパーバイザ型の仮想化環境で問題なく動作するでしょう。
  • ubuntu.pngUbuntu 16.04 および centos.pngCentOS 7 で動作を確認しています。
  1. デフォルトではハイパーバイザにはKVM(with qemu)またはXenが使用されますので、その依存パッケージをインストールします。
    • KVMを利用する場合(CentOSの場合は不要です)
      $ sudo apt-get install libvirt0 qemu
    • Xenを利用する場合(Xenハイパーバイザを起動させるため再起動が必要)
      Ubuntu:$ sudo apt-get install libvirt0 xen-hypervisor-amd64
      CentOS:$ sudo yum install centos-release-xen
      CentOS:$ sudo yum install xen
      $ sudo reboot
      ...
      $ sudo xl list
      Name                                        ID   Mem VCPUs      State   Time(s)
      Domain-0                                     0  1895     2     r-----     188.6
  2. HyperContainerをインストールします。
    • ubuntu.pngUbuntu: デフォルトのストレージドライバは aufs です。
      $ curl -sSL https://hypercontainer.io/install | sudo bash
      ...
      $ hyperctl version
      The hyperctl version is 0.8.1
      $ sudo hyperctl info
      Images: 0
      Containers: 0
      PODs: 0
      Storage Driver: aufs
        Root Dir: /var/lib/hyper/aufs
        Backing Filesystem: extfs
        Dirs: 0
        Dirperm1 Supported: true
      Hyper Root Dir: /var/lib/hyper
      Index Server Address: https://index.docker.io/v1/
      Execution Driver:
      Total Memory: 2.048 MB
      Operating System: Ubuntu 16.04.2 LTS
    • centos.pngCentOS: デフォルトのストレージドライバは devicemapper(loop-lvm)です。設定オプションが見当たりませんので、direct-lvm の設定はできないようです。
      $ curl -sSL https://hypercontainer.io/install | sudo bash
      ...
      $ sudo hyperctl info
      Images: 0
      Containers: 0
      PODs: 0
      Storage Driver: devicemapper
        Pool Name: docker-253:0-105047-pool
        Pool Blocksize: 65.54 kB
        Base Device Size: 10.74 GB
        Backing Filesystem: xfs
        Data file: /dev/loop0
        Metadata file: /dev/loop1
        Data Space Used: 11.8 MB
        Data Space Total: 107.4 GB
        Data Space Available: 29.85 GB
        Metadata Space Used: 581.6 kB
        Metadata Space Total: 2.147 GB
        Metadata Space Available: 2.147 GB
        Udev Sync Supported: true
        Deferred Removal Enabled: false
        Deferred Deletion Enabled: false
        Deferred Deleted Device Count: 0
        Data loop file: /var/lib/hyper/devicemapper/devicemapper/data
        Metadata loop file: /var/lib/hyper/devicemapper/devicemapper/metadata
        Library Version: 1.02.140-RHEL7 (2017-05-03)
      Hyper Root Dir: /var/lib/hyper
      Index Server Address: https://index.docker.io/v1/
      Execution Driver:
      Total Memory: 1.883 MB
      Operating System: CentOS Linux 7 (Core)
      
      $ lsblk
      NAME                       MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
      sda                          8:0    0   32G  0 disk
      |-sda1                       8:1    0  500M  0 part /boot
      `-sda2                       8:2    0 31.5G  0 part
        |-centos-root            253:0    0 29.5G  0 lvm  /
        `-centos-swap            253:1    0    2G  0 lvm  [SWAP]
      ...
      loop0                        7:0    0  100G  0 loop
      `-docker-253:0-105047-pool 253:5    0  100G  0 dm
      loop1                        7:1    0    2G  0 loop
      `-docker-253:0-105047-pool 253:5    0  100G  0 dm
      loop6                        7:6    0   10G  0 loop
      `-hyper-volume-pool        253:6    0   10G  0 dm
      loop7                        7:7    0  128M  0 loop
      `-hyper-volume-pool        253:6    0   10G  0 dm
      
      $ mount | grep hyper
      /dev/mapper/centos-root on /var/lib/hyper/devicemapper type xfs (rw,relatime,attr2,inode64,noquota)

インストールスクリプトの制限

  • インストールスクリプトは最新のディストリビューションに対応していない場合があります。そのような時にはパッケージを直接ダウンロードしてインストールします。
  1. 今のところ、Ubuntuの対応は xenial(16.04 LTS)までです。
    $ curl -sSL https://hypercontainer.io/install | sudo bash
    
    Welcome to Install HyperContainer...
    
    [ERROR] : Hyper support ubuntu( trusty utopic vivid wily xenial ), but current is zesty(17.04)
  2. パッケージを http://download.hypercontainer.io/ からダウンロードしてインストールします。
    $ curl -LO https://hypercontainer-download.s3-us-west-1.amazonaws.com/0.8/ubuntu/hypercontainer_0.8.1-1_amd64.deb
    $ curl -LO https://hypercontainer-download.s3-us-west-1.amazonaws.com/0.8/ubuntu/hyperstart_0.8.1-1_amd64.deb
    $ sudo dpkg -i hyperstart_0.8.1-1_amd64.deb
    $ sudo dpkg -i hypercontainer_0.8.1-1_amd64.deb
    $ sudo systemctl start hyperd
    $ sudo systemctl enable hyperd

lightbulb.pngChefによるセットアップ

  • 以下のセットアップでは、筆者の作成したcake.pnghypercontainerクックブックを使用しています。
  1. 最も簡単なセットアップは、以下のように chef-client コマンドのローカルモードを利用した方法です。
    1. chef-clientをインストールし、クックブックのソースを取得します。
      Ubuntu:$ sudo apt-get install ca-certificates curl git
      CentOS:$ sudo yum     install ca-certificates curl git
      $ curl -L https://omnitruck.chef.io/install.sh | sudo bash -s -- -v 13
      $ git clone git://git.osdn.net/gitroot/metasearch/grid-chef-repo.git
      $ cd grid-chef-repo/
    2. info.png設定のカスタマイズは、roles/hypercontainer.rb で可能です。
  2. セットアップを実行します。
    $ sudo chef-client -z -c solo.rb -j nodes/local-hypercontainer.json -W
    $ sudo chef-client -z -c solo.rb -j nodes/local-hypercontainer.json

in LXDnote.png動作不可)

  • 結論としては、(Kernelモジュール br_netfilter がネットワーク名前空間未対応のため)/proc/sys/net/bridge を(特権コンテナであっても)コンテナ内にマウントすることができないので、HyperContainerを動作させることはできません。
    1. エラーログは以下の通り
      Oct 28 09:47:02 xenial00 hyperd[850]: E1028 09:47:02.303189     850 daemon.go:223] InitNetwork failed,
       open /proc/sys/net/bridge/bridge-nf-call-iptables: no such file or directory
      Oct 28 09:47:02 xenial00 hyperd[850]: E1028 09:47:02.303368     850 hyperd.go:117] The hyperd create failed,
       open /proc/sys/net/bridge/bridge-nf-call-iptables: no such file or directory
    2. info.png/proc/sys/net/bridge folder missing inside of container, even with kernel modules enabled #3306

セットアップログ(参考)

  1. ホストKernelに br_netfilter、nf_nat モジュールがロードされていることを確認しておきます。
    $ lsmod | grep -E '^(br_netfilter|nf_nat)\s+'
    br_netfilter           24576  0
    nf_nat                 28672  4 xt_nat,nf_nat_ipv6,nf_nat_masquerade_ipv4,nf_nat_ipv4
  2. コンテナを用意します。
    $ lxc launch ubuntu:16.04 xenial00
  3. コンテナに以下の設定を追加します。
    $ lxc config edit xenial00
    1. config:
    2.   linux.kernel_modules: br_netfilter,nf_nat,overlay
    3.   raw.lxc: |
    4.     lxc.aa_profile=unconfined
    5.     lxc.mount.auto=proc:rw sys:rw
    6.   security.nesting: "true"
    7.   security.privileged: "true"
    8. # ...
  4. コンテナを再起動させ、コンテナ内に入ります。
    $ lxc stop xenial00
    $ lxc start xenial00
    $ lxc exec xenial00 bash
    root@xenial00:~#
  5. フェイクのため、Kernelモジュールをインストールします。
    root@xenial00:~# apt-get install linux-image-extra-$(uname -r)
  6. 依存パッケージをインストールします。この例では qemu を採用しています。
    root@xenial00:~# apt-get install qemu libvirt0
  7. HyperContainerをインストールします。
    root@xenial00:~# curl -sSL https://hypercontainer.io/install | bash
    
    Welcome to Install HyperContainer...
    
    Check dependency .. Done
    
    Fetch deb package for ubuntu...
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100 10.1M  100 10.1M    0     0   767k      0  0:00:13  0:00:13 --:--:--  809k
    Selecting previously unselected package hyperstart.
    (Reading database ... 26330 files and directories currently installed.)
    Preparing to unpack .../hyperstart_0.8.1-1_amd64.deb ...
    Unpacking hyperstart (0.8.1-1) ...
    Setting up hyperstart (0.8.1-1) ...
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100 9319k  100 9319k    0     0   674k      0  0:00:13  0:00:13 --:--:--  825k
    Selecting previously unselected package hypercontainer.
    (Reading database ... 26336 files and directories currently installed.)
    Preparing to unpack .../hypercontainer_0.8.1-1_amd64.deb ...
    Unpacking hypercontainer (0.8.1-1) ...
    Setting up hypercontainer (0.8.1-1) ...
    
    Start hyperd service
    
    [WARN] :
    hyperd isn't running.
    Please try to start hyperd by manual:
      sudo service hyperd restart
      sudo service hyperd status
    • hyperd のエラーの内容は上述の通りです。

ハイパーバイザの切り替え

libvirt

ハイパーバイザをlibvirtデーモン経由で扱うことができます。

  • ubuntu.pngUbuntu
    1. 以下のパッケージをインストールします。
      $ sudo apt-get install qemu-kvm libvirt-bin
    2. libvirtd の設定に以下の内容を追加し、サービスを再起動させます。
      1. $ sudo diff -u /etc/libvirt/qemu.conf{.org,}
      2. --- /etc/libvirt/qemu.conf.org  2018-02-11 15:50:32.539613299 +0900
      3. +++ /etc/libvirt/qemu.conf      2018-02-11 15:50:43.375788279 +0900
      4. @@ -727,3 +727,7 @@
      5.  # This directory is used for memoryBacking source if configured as file.
      6.  # NOTE: big files will be stored here
      7.  #memory_backing_dir = "/var/lib/libvirt/qemu/ram"
      8. +
      9. +user = "root"
      10. +group = "root"
      11. +clear_emulator_capabilities = 0
      $ sudo systemctl restart libvirtd
    3. hyperdのハイパーバイザ設定を libvirt に変更してサービスを再起動させます。
      1. $ sudo diff -u /etc/hyper/config{.org,}
      2. --- /etc/hyper/config.org       2018-02-11 15:56:10.157394685 +0900
      3. +++ /etc/hyper/config   2018-02-11 15:40:26.939959506 +0900
      4. @@ -12,6 +12,7 @@
      5.  # support any hardware-assisted technology, it will use "qemu-tcg".
      6.  #
      7.  # Hypervisor=qemu
      8. +Hypervisor=libvirt
      9.  
      10.  # Boot kernel
      11.  Kernel=/var/lib/hyper/kernel
      $ sudo systemctl restart hyperd
    4. VMを起動させ、virshコマンドでも状態が表示できることを確認します。
      $ sudo hyperctl run -d ubuntu
      POD id is ubuntu-3469662075
      Time to run a POD is 1914 ms
      
      $ sudo hyperctl list
      POD ID              POD Name            VM name             Status
      ubuntu-3469662075   ubuntu-3469662075   vm-UBRZXFyWVu       running
      
      $ sudo virsh list
       Id    Name                           State
      ----------------------------------------------------
       1     vm-UBRZXFyWVu                  running
      
      $ sudo virsh dominfo vm-UBRZXFyWVu
      Id:             1
      Name:           vm-UBRZXFyWVu
      UUID:           abd0742c-6a5e-4860-b6ee-f1c190359660
      OS Type:        hvm
      State:          running
      CPU(s):         1
      CPU time:       5.6s
      Max memory:     131072 KiB
      Used memory:    131072 KiB
      Persistent:     no
      Autostart:      disable
      Managed save:   no
      Security model: apparmor
      Security DOI:   0
  • centos.pngCentOS
    1. 以下のパッケージをインストールします。
      $ sudo yum install libvirt-daemon
    2. libvirtd と hyperd デーモンの設定について上記のUbuntuと同じ修正を施しサービスを再起動させます。
    3. コンテナを起動させますが、note.png原因不明ですが今のところエラーとなってしまいます。
      $ sudo hyperctl version
      The hyperctl version is 1.0.0
      $ sudo hyperctl run -d centos
      hyperctl ERROR: Error from daemon's response: hyperstart closed

通常のコンテナとの違い

  1. ホストからコンテナは1つのプロセスとして見え、コンテナ内のプロセスは見えません(pstreeの出力は抜粋)。
    $ docker run -d nginx
    e67cb01f734ea569bc4fdbee12b1d4724f8ffbc0652c4c23286aa225264d1f0a
    
    $ sudo hyperctl run -d nginx
    POD id is nginx-9160981838
    Time to run a POD is 3188 ms
    
    $ pstree -A
    systemd-+-accounts-daemon-+-{gdbus}
            |                 `-{gmain}
            |-acpid
            |-agetty
    ...
            |-dockerd-+-containerd-+-containerd-shim-+-nginx---nginx
            |         |            |                 `-9*[{containerd-shim}]
    ...
            |-hyperd---14*[{hyperd}]
            |-irqbalance
    ...
            |-qemu-system-x86---2*[{qemu-system-x86}]  # nginx in HyperContainer
            |-rpcbind
    ...

ストレージ消費

  • VMの新規起動では(コピーによる書き込みはないので)ほとんど領域を消費しない。VM上での新規書き込みで領域を消費します。
    # du -sh /var/lib/hyper/devicemapper/*
    12M     /var/lib/hyper/devicemapper/devicemapper
    12K     /var/lib/hyper/devicemapper/metadata
    0       /var/lib/hyper/devicemapper/mnt
    
    # hyperctl pull centos
    Using default tag: latest
    latest: Pulling from library/centos
    
    af4b0a2388c6: Pull complete
    Digest: sha256:2671f7a3eea36ce43609e9fe7435ade83094291055f1c96d9d1d1d7c0b986a5d
    Status: Downloaded newer image for centos:latest
    sha256:2671f7a3eea36ce43609e9fe7435ade83094291055f1c96d9d1d1d7c0b986a5d: Pulling from library/centos
    
    Digest: sha256:2671f7a3eea36ce43609e9fe7435ade83094291055f1c96d9d1d1d7c0b986a5d
    Status: Downloaded newer image for centos@sha256:2671f7a3eea36ce43609e9fe7435ade83094291055f1c96d9d1d1d7c0b986a5d
    
    # du -sh /var/lib/hyper/devicemapper/*
    237M    /var/lib/hyper/devicemapper/devicemapper
    16K     /var/lib/hyper/devicemapper/metadata
    0       /var/lib/hyper/devicemapper/mnt
    
    # hyperctl run -d centos
    POD id is centos-7124342588
    Time to run a POD is 7367 ms
    
    # du -sh /var/lib/hyper/devicemapper/*
    242M    /var/lib/hyper/devicemapper/devicemapper
    28K     /var/lib/hyper/devicemapper/metadata
    4.0K    /var/lib/hyper/devicemapper/mnt
    
    # hyperctl exec -t centos-7124342588 bash
    [root@centos-7124342588 /]# dd if=/dev/zero of=dummy bs=1M count=1024
    1024+0 records in
    1024+0 records out
    1073741824 bytes (1.1 GB) copied, 17.6769 s, 60.7 MB/s
    [root@centos-7124342588 /]# exit
    exit
    
    # du -sh /var/lib/hyper/devicemapper/*
    1.3G    /var/lib/hyper/devicemapper/devicemapper
    28K     /var/lib/hyper/devicemapper/metadata
    4.0K    /var/lib/hyper/devicemapper/mnt
    
    # hyperctl rm centos-7124342588
    Pod(centos-7124342588) is successfully deleted!
    
    # du -sh /var/lib/hyper/devicemapper/*
    237M    /var/lib/hyper/devicemapper/devicemapper
    16K     /var/lib/hyper/devicemapper/metadata
    0       /var/lib/hyper/devicemapper/mnt

参考リソース


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-02-11 (日) 22:58:06 (223d)