docker
swarm

DockerSwarmの事例と今後

この記事は第2のドワンゴ Advent Calendar 2017 8日目の記事です。
ドワンゴで普段はニコニコ生放送(以下 生放送)周りのエンジニアをやっています、ビビるです。

先月、弊社エンジニアブロマガにてニコニコ生放送におけるdockerの活用事例 を紹介させていただきましたように、生放送チームでは一部のサービスでDocker SwarmMode(以下 Swarm)を利用して運用を行っています。1

何故Docker化を始めたの?とか、実際使ってみてどうだったの?という話は上記記事を見ていただくとして、今回はその記事に追加しての話をさせていただこうと思います。

サービス更新検知

開発時にローカルでSwarmでサービスを構築した後、考えたのが「このサービスはいつ更新が終わるんだ?」ということです。
特に、サービスをローリングアップデートで更新する際の分割数を増やした場合、終わったかどうかを毎回手動で確認していて、出来れば手軽に通知が飛ばせないかなと考えていました。

そこで、DockerのEventsAPIを購読し、その内容のうちSwarmEventsのみ検知したらSlackに投げるようにしてみました。cURLで叩いた例は以下のようになります2

curl --unix-socket /var/run/docker.sock -H "Content-Type: application/json"  "http:/v1.33/events?filters=\{%22type%22:\[%22service%22\]\}"

このようにAPIから取得したデータをSlackに投げるプログラムをサービスとして建てておくことで、上手くイベント通知をSlackに集約できるようになりました。

更新完了画面

Kubernetes公式サポートの話

10月に行われたDockerCon Europe にて、K8sの公式サポートが発表されました。
これはSwarmの終焉だというわけではなく、KubernetesとSwarmは並列に運用できるようになります。具体的にはDocker EE上の1クラスタ上にK8sでもSwarmでもデプロイが行える状態になります。

例えば

docker stack ls

のコマンドで情報を取ってこれるSwarmのスタックがあった場合、

kubectl get stacks -o name

のコマンドで取得できる、といった具合のようです。

UCP (Universal Control Plane)上でも、SwarmとKubernetesのメニューが並列に並んでおり、それぞれが管理するスタック/Podを確認できる状態になっています。

Kubernetesサポートは2018年1Qにリリースされる予定ということですが、beta版は間もなく利用できるようになるとで、サインアップして正座して待っている状態です。

終わりに

ちょっと事情があり、記事がかけていません。後日別途記事を書いて追記したいと思います。
明日は@yyuさんです。


  1. 記事にはありませんが、社内他部署ではKubernetesを利用している部署もあります。  

  2. apiのバージョンはDockerEngineのバージョンに合わせて変わるので、古いバージョンの場合など適宜読み替えて下さい。