JupyterHub/Swarm Mode で苦戦中
JupyterHub を Swarm Mode で動かしたいんだけれども、どうやら Swarm Mode は 1.12 以前の Swarm とは違い、外部からのコンテナ操作ができないみたいです。
1.12 以前の Swarm であれば、
$ docker run -d -p 4000:4000 swarm manage \ -H :4000 --replication \ --advertise 172.30.0.161:4000 \ consul://172.30.0.165:8500
みたいなコマンドで 4000 で Docker 操作をできるようにし、 JupyterHub がその 4000 番経由でコンテナを立ち上げる、といったことが可能でした。 ただ、これをセキュアにするためにはサーバ証明書だけではなくクライアント証明書も作成しないといけないのですごく大変 *1。
証明書周りがラクな Swarm Mode でなんとかならないかと思っていたら、次の issue を発見。
- dockerspawner/JupyterHub は Docker 1.12 以前の Docker Swarm で動作を想定。
- 上述の issue にある
jupyterhub_config.py
には 1.12 以前の Docker Swarm で動作させる config を作成。
ただ、このコメント「SwarmSpawner」をもっと速く知ってればよかった!とあり、おっ、と思い調べたらどうやら次のレポジトリがそれのようです。
とりあえず動かしてみたけど、ThreadPool まわりでエラーが出たので、とりあえずやっつけ修正でプルリクを送送付。
Swarm Mode で Service を開始させるまでには至ったけど、次のエラーがでました。
- エラー
[W 2017-02-25 09:58:08.099 JupyterHub utils:88] Failed to connect to http://jupyterhub-cdc872db616ac66adb3166c75e9ad183-1:8888/user/centos ([Errno -2] Name or service not known)
- 生存確認
$ docker service ls ID NAME MODE REPLICAS IMAGE ivcdyicugvjg jupyterhub-cdc872db616ac66adb3166c75e9ad183-1 replicated 0/1 jupyterhub/singleuser:latest
Swarm Mode 上での Service Discovery も準備する必要があるようですが、いったんここで力尽きました。。
にあるように、Swarm Mode では Service Discovery 用のツールはいらなくなったけど、あると便利ですね。
*1:Swarm Mode が出てきた経緯でもある