読者です 読者をやめる 読者になる 読者になる

tkhrsskの日記

技術ネタなど

socketplaneを試してみる

Dockerに買収されて間もないsocketplaneですが、 ちょっと試してみます。

socketplane/socketplane · GitHub

トライアル用のVagrant環境を中心に説明されていますが、 Non-Vagrantの項を参考に、自前の環境にいれたいと思います。

CentOS7.0で試しましたが、非サポートでいきなりこけます。。

$ curl -sSL http://get.socketplane.io/ | sudo BOOTSTRAP=true sh
$ sudo socketplane install
Operating System centos is not yet supported. Please contact support@socketplane.io

どうも、ubuntufedoraしかサポートしていないと。 負けずに、fedoraだと思わせます。 551行目のlsb_distに、fedoraを代入します。

https://github.com/socketplane/socketplane/blob/master/scripts/socketplane.sh#L551

$ sudo vi /opt/socketplane/socketplane
lsb_dist=fedora

ついでに最初のほうに set -x をつけて、コマンドの様子を見れるようにもしておきます。

そうすると、Open vSwitchのインストールで失敗します。パッケージ一覧にないようです。 下記ページを参考にいれましょう。

CentOS7でOpen vSwitchブリッジ化 - どこかに向かうらしい話

再度インストールすると、dockerイメージを二つほどrunしているようでした。 これが、なかなか権限の強いコンテナになってまして、 --privileged=trueはもちろん、-v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker -v /proc:/hostproc -e PROCFS=/hostproc --net=hostなどと、ホストを直接いじりまくれる感じになっています。

インストール後の起動コンテナ

$ docker ps
CONTAINER ID        IMAGE                            COMMAND                CREATED             STATUS              PORTS               NAMES
fde45e1d7068        clusterhq/powerstrip:v0.0.1      "twistd -noy powerst   6 seconds ago       Up 5 seconds                            powerstrip
53c7c2b70b50        socketplane/socketplane:latest   "socketplane --iface   10 minutes ago      Up 10 minutes                           socketplane

フロントエンドは shellで動いていて、バックエンド(agentと呼ばれるもの)は、Go製のバイナリで動いているようです。

コンテナの起動は、dockerと同じ引数をsocketplaneに渡せばよい。

$ sudo socketplane run -i -t ubuntu /bin/bash
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
7: ovsbebd552: <BROADCAST,UP,LOWER_UP> mtu 1440 qdisc noqueue state UNKNOWN
    link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff
    inet 10.1.0.2/16 scope global ovsbebd552
       valid_lft forever preferred_lft forever
    inet6 fe80::80d1:afff:feab:25e2/64 scope link
       valid_lft forever preferred_lft forever
[root@b2fcc25d8104 /]# ip l
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
7: ovsbebd552: <BROADCAST,UP,LOWER_UP> mtu 1440 qdisc noqueue state UNKNOWN mode DEFAULT
    link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff

ovsらしきlink名に、10.1.0.2/16のIPアドレスが付与されていることがわかる。 ホスト側で、$ sudo socketplane infoを打つと、JSON形式でコンテナのネットワーク情報が表示されました。

ネットワークを作ってコンテナを立ち上げる場合は、 下記のようにすると指定したサブネット内から、IPが払い出されます。

$ sudo socketplane network create web 10.2.0.0/16
$ sudo socketplane run -n web -itd ubuntu

sudo socketplane network listで、ネットワークの一覧が表示されます。

[
    {
        "gateway": "10.1.0.1",
        "id": "default",
        "subnet": "10.1.0.0/16",
        "vlan": 1
    },
    {
        "gateway": "10.2.0.1",
        "id": "web",
        "subnet": "10.2.0.0/16",
        "vlan": 2
    }
]

ネットワーク名を指定しなかった場合、defaultというネットワークが適用されていることが わかりますね。

ログの流れやシェルの中身を見たところ、下記の流れになっていました。

docker run --net=none -dで、バックグラウンド実行した後、 socketplaneのコンテナ(port:6675)に、POSTしてネットワーク追加。

起動直後は、IP付与されていないことになるのが少し気になりました。 かといって、createしてからstartとしても、プロセス実行前は netnsとかで操作対象が無いのだろうと思います。。 やっぱ Native Dockerに、この機能が入るのが正しい気がしてきました。

Weaveみたいに、静的なIP設計はできないのかな。 マルチホストの手順、というかコンテナ間の連携の手順を知りたかったのですが、 READMEのチュートリアルには書いていなかったので、また今度。 clusterあたりかな。

以下、ヘルプからコマンドリスト抜粋

    help
    install [unattended] [nopowerstrip]
    uninstall
    clean ★依存関係のあったソフトも削除?uninstallとの差分は、たぶんOVS消すこと。
    deps
    agent {stop|start|restart|logs}
    info [container_id]
    run [-n foo] <docker_run_args>
    start <container_id>
    stop <container_id>
    rm <container_id>
    attach <container_id>
    cluster bind <interface>
    cluster join <address>
    cluster leave
    network list
    network info <name>
    network create <name> [cidr]
    network delete <name> [cidr]
    network agent start ★こんなコマンドはない。誤記。
    network agent stop ★こんなコマンドはない。誤記。