[docker][runtime][自分用メモ] dockerのruntimeをcri-oに切り替えてみた

     
    • 最終更新日時:2018/11/29 11:20:04

    Embed
    Screenshot_2018-11-28 cri-o

    Dockerも成熟度が上がるにつれて、付随するコンポーネントも3rdパーティ含めて増えてきました。
    とくにランタイムと呼ばれる部分は、デフォルトのcontainerdや旧CoreOSのrkt、GoogleのgVisor、AmazonのFirecrackerなどがあります。
    その中でもKubernetes(以下k8s)向けに作られたcri-oを自分の環境に導入できるか試してみました。

    そもそもコンテナランタイムとは何ぞやという人は以下のWebサイトが参考になると思います。
    コンテナランタイムの動向を整理してみた件 - Qiita
    runC vs. cc-runtime vs. kata-runtime?コンテナランタイムの内部構造と性能比較 | Think IT(シンクイット)
    cri-oについては公式のWebサイトなどが参考になるかと思います。
    cri-o
    Kubic | CRI-O is now our default container runtime interface
    dockerのランタイムを切り替える方法については、Webを確認した感じでは私の探し方が悪いのか少ないみたいでして、cri-oのgithubを見ても、インストールスクリプトを実行するか、ソースからbuildするか、みたいな記述しか見当たりませんでした。
    kubernetes-sigs/cri-o: Open Container Initiative-based implementation of Kubernetes Container Runtime Interface
    一応、小さく公式サイト上にレポジトリの案内があるのでそれを使用します。

    確認環境:
    $ uname -mr
    4.4.154-1124-rockchip-ayufan-ged3ce4d15ec1 aarch64
    $ cat /etc/os-release
    NAME="Ubuntu"
    VERSION="18.04.1 LTS (Bionic Beaver)"
    ID=ubuntu
    ID_LIKE=debian
    PRETTY_NAME="Ubuntu 18.04.1 LTS"
    VERSION_ID="18.04"
    HOME_URL="https://www.ubuntu.com/"
    SUPPORT_URL="https://help.ubuntu.com/"
    BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
    PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
    VERSION_CODENAME=bionic
    UBUNTU_CODENAME=bionic

    公式のレポジトリにはAarch64向けのパッケージがありましたので、こちらを使います。

    1. レポジトリを追加する
    sudo add-apt-repository ppa:projectatomic/ppa
    sudo apt-get update

    2. cri-oパッケージを追加する。こちらのレポジトリでは1.11がstable、1.12がdevという扱いみたいです。
    これをインストールに選ぶと、関連するランタイムなども同時にインストールされるはずです。
    sudo apt install cri-o-1.12

    3. crio.confを編集します。
    /etc/crio/crio.conf

    #ストレージドライバが空欄になっているのでoverlay2を選択
    storage_driver = "overlay2"

    # containerイメージをdocker hubから取り寄せるのであれば以下のように追記
    registries = [
    "docker.io"
    ]


    4. dockerのdaemon.jsonを編集する。
    最初、cri-oのdaemonなどを起動する必要があるかと思っていたのですが、dockerから呼び出す形になるので、自動起動設定などは不要のようです。
    "runtimes": {
    "cri-o": {
    "path": "/usr/lib/cri-o-runc/sbin/runc"
    }
    },
    "default-runtime": "cri-o"

    5.dockerサービスを再起動します。
    sudo systemctl restart docker

    6. cri-oがデフォルトのランタイムとして選択されていることを確認します。
    $ docker info
    Containers: 10
    Running: 10
    Paused: 0
    Stopped: 0
    Images: 48
    Server Version: 18.09.0
    Storage Driver: overlay2
    Backing Filesystem: extfs
    Supports d_type: true
    Native Overlay Diff: true
    Logging Driver: json-file
    Cgroup Driver: cgroupfs
    Plugins:
    Volume: local
    Network: bridge host ipvlan macvlan null overlay
    Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
    Swarm: inactive
    Runtimes: cri-o runc
    Default Runtime: cri-o
    Init Binary: docker-init
    containerd version: c4446665cb9c30056f4998ed953e6d4ff22c7c39
    runc version: N/A
    init version: fec3683
    Security Options:
    seccomp
    Profile: default
    Kernel Version: 4.4.154-1124-rockchip-ayufan-ged3ce4d15ec1
    Operating System: Ubuntu 18.04.1 LTS
    OSType: linux
    Architecture: aarch64
    CPUs: 6
    Total Memory: 3.785GiB
    Name: dns03
    ID:
    Docker Root Dir: /var/lib/docker
    Debug Mode (client): false
    Debug Mode (server): false
    Username: kometchtech
    Registry: https://index.docker.io/v1/
    Labels:
    Experimental: true
    Insecure Registries:
    127.0.0.0/8
    Live Restore Enabled: false
    Product License: Community Engine

    7. docker containerを起動し、実行したcontainerがcri-o-runtimeで起動していることを確認します。
    $ ps axuwwwwf | grep docker
    root 19099 0.0 0.1 10480 5280 ? Sl 16:09 0:00 \_ containerd-shim -namespace moby -workdir /var/lib/containerd/io.containerd.runtime.v1.linux/moby/47826d2bacc6ece9944b39378e920febb540f0b98f93ace38cb7c19a37520e4a -address /run/containerd/containerd.sock -containerd-binary /usr/bin/containerd -runtime-root /var/run/docker/runtime-cri-o


    k8s向けに作成されたランタイムなので、軽量であることらしいのですが、収容台数が少ないベアメタル上だと体感できる性能差はないと思います。ストレージやネットワークのベンチマークを取得すれば、差異が分かるのかもしれませんが。

    gVisorとかも試してみたかったのですが、そもそもコードがAarch64とかには対応してないらしいので断念しました。
    ただ、最近はARM64なマシンが増えてきているので、どこかでcontributionはされるんじゃないかと思います。また、その辺りを狙って開発しているところも勿論あるかと思います。

    参考:
    gVisorを試してみた - ビビリフクロウの足跡
    関連記事


    Pagination

    Trackback

    Trackback URL

    https://kometchtech.blog.fc2.com/tb.php/2184-ba6d367e

    Comment

    Post Your Comment

    コメント登録フォーム
    公開設定

    Utility

    Profile

    kometchtech

    Author:kometchtech
    なんちゃってエンジニアです。
    2009年10月から業務都合により大阪勤務になりました。
    2010年1月、HYBRID W-ZERO3を購入しました。
    2010年11月、HTC Desire HDを購入しました。
    2012年2月、都内の会社に転職しました。
    2012年5月、HTC One Xを購入しました。
    2012年8月、事情により休職しました。
    2012年8月、SONY Xperia SXを購入しました。
    2013年1月、一身上の都合により退職しました。
    2014年3月、都内の会社に就職しました。
    2016年8月、HPC系の会社に転職しました。
    2018年6月、Xperia XZ1 compactに機種変。

    Amazonほしい物リスト
    何か問題などありましたら、こちらまで。 Twitter:@kometchtech follow us in feedly

    カレンダー

    01 | 2019/02 | 03
    - - - - - 1 2
    3 4 5 6 7 8 9
    10 11 12 13 14 15 16
    17 18 19 20 21 22 23
    24 25 26 27 28 - -

    記事リスト

    最新の記事

    全記事(数)表示

    全タイトルを表示

    バロメーター

    カテゴリー

    カテゴリークラウド

    アーカイブ

    検索フォーム

    FCカウンター

    オンライン

    現在の閲覧者数:

    Amazonアソシエイト

    スポンサードリンク

    月間ページランキング

    ブログパーツ

    サイトランキング