Anket を EKS (k8s) に移行しました

タイトル通り Anket を EKS に移行しました!!

Anket とは?

Anket は Slack 上でアンケートをとり Slack 上、 WEB 上で確認できるサービスです。

blog.hatappi.me

なぜ移行したのか?

  • kubenetes 使ってみたかった
    • 遅かれ早かれ kubernetes は使うことになるだろうなぁと思って時間のあるタイミングでやっておきたかった
  • ただサンプルやって終わりとかにはしたくなかった
    • チュートリアルがあるので、それをやって終わりでも良いんだろうけど個人的には運用しつつ「あぁーこの場合はエラーになるのかぁ〜」みたいな運用しながら経験値ためたかった
  • EKS の東京リージョンきた

kubernetes はどうやって勉強したか

  1. まずは公式の doc を眺める!!

kubernetes.io

公式のドキュメントのチュートリアルとかコンセプトを見たり手を動かして kubernetes の雰囲気を把握します。
一通り見ると kubernetes を使う時に出てくる pod とか node とか resource とかの用語?がなんとなく理解できるようになります。

  1. 手を動かしながら体系的に学ぶ

ドキュメントを見て終わりでも良いのですが、個人的にはもっと手を動かしつつ学びたいなぁと思いました。
そこで出会ったのが Kubernetes完全ガイド

https://www.amazon.co.jp/dp/4295004804

基礎的なところから順番に説明されているのですが、個人的に嬉しかったポイントとしてはマニフェストファイルがセットで書かれているところです。
本に書かれている内容を読んで「ふ〜ん」で終わりではなくて実際に自分でYAMLを書いて apply して試すことができるので良いです。
今でもあれなんだっけなぁ〜ってなった時は索引から調べてます。

どんな感じになったの?

まずは今までの Anket はこんな感じでした。

f:id:hatappi1225:20190112094742p:plain

Anket は Slack Bot の NodeJS アプリケーションと WEB上で集計結果を確認したりAPIでSlack Botと通信する Rails アプリケーションの2つのサービスで構成されています。
今まではこれらをPacker で一つの AMI にして AutoScalingGroup で指定台数EC2のインスタンスをたてて ALB でホストベースでルーティングして Nginx でうけてリバースプロキシするみたいな感じです。

移行してどんな感じになったのか?

f:id:hatappi1225:20190112110334p:plain

引き続き ALB を使うのですが、ALB Ingress Controller を作成しています。
https 化から Routes 53 の設定も k8s 内で行なっています。
このあたりはちょっと前に記事にしているので、そちらが参考になると思います。

blog.hatappi.me

後は今回から Anket は Docker を使うことになったのですが、RailsBot の Docker Image は Packer を使用しました。
Dockerfile を使わなかった理由としては AMI を作成していた時にも Packer を使用しておりその時使用していた Ansible などのプロビジョニングのコードがそのまま使用することが出来たからです。
なので Docker Image を作って ECR に push はわりと簡単にいきました。

移行してみて

まだ運用しはじめたばかりですが、 Rolling Updatek8s 側で用意されているのは便利ですね〜

正直なところ移行前のほうが AMI つくって AutoScalingGroup でインスタンス立ち上げて ALB に紐づけるだけだったのが EKS に移行して若干やることは増えましたが一度作ってしまうえばさきほどあげた Rolling Update や セルフヒーリング などの恩恵を受けれれるかなと思うのでしばらくはこれで運用していこうと思います。

最後に

今後もいろんな技術を試していきたいのでぜひ Anket を今後ともよろしくお願いします!!

hatappi.slack.com