この記事は第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さんです。