僕とaviciiとk8sの1年ちょっと

1

これは余談だけど、aviciiのWithout Youの曲は自分にしか聞こえない音が聞こえる。

これは2016年6月5日にあった千葉 QVCマリンフィールドLiveの最初の曲だ

Liveでavicii本人が登場するとすっと静かになって、イントロが流れ始めると同時に周りから湧くように上がった歓声が、

いまだにこの曲を聴くたび頭に流れる。

www.youtube.com

2

今の仕事でk8sをやり始めて1年半ぐらいになろうとしている。

もともと今のプロダクトがマイクロサービスよりに作っていたのでコンテナオーケストレーションをしたかったのもあるし、

マルチインスタンスにおけるコンテナ間通信がやれた方が便利だと思ったのでk8sを研究し始めた。

いや、それは若干語弊があって正直に言うとdocker swarmから始めた。ちょうどaws向けのdocker swarmのclosed betaに申し込んでいて試せる環境はあったので。

確か限定公開されたaws cloud formationで立ち上がる感じで立ち上がって、手元で動くdockerと使い勝手が変わらない感じで便利と言う代物に思えた。

もう昔になるのであまり覚えてないけれど、機能面の不安や障害時へ対応の不安、そしてそもそもdocker swarm projectの先行きへの不安、一旦やめましたね。

確か一旦そのころにclosed betaでその時作っていたのものをデプロイする必要があったのでECSでとりあえずデプロイした記憶がある。

とはいえECSは昔から使って慣れてはいたけれど不満はあったのでk8sを研究し始めた。

3

ぼんやり何ができるとか、ぼんやり仕組みがどうなって、は理解していたが実際に何が動いてどういう理屈で動くのか理解を深めたかったので、

最初はterraformでaws上にkubernetesを立てることを目標にcodeを読み始めた。

これに関して今思うと時期の悪さに笑ってしまうのだが、

当時k8sのversionが1.4とか1.5で、多くのk8sを立ち上げる系のプロジェクトのやり方がバラバラだった。

例えばflannelやkubeletがコンテナで動いてなかったり、etcdのversionや管理方法が違ったり、master nodeの構成とか。

その中で自分の望む構成に近いプロジェクトが以下だったのでcodeを読んでスクラッチで立てようとした

https://github.com/xuwang/kube-aws-terraform

結果的には理解不足からmaster nodeが再起動時にうまくbootstrapできなかったので一旦はやめることにしたが、このトライによって理解が深まった。

4

次に試したのはcoreosのtectonicで、これはterraformで全て管理できることができたのもアドだった。

coreos.com

今はredhatによる買収もあって別プロジェクトに統合されたみたいだけど。

確かこの時のクラスタ名がdeadmau5になる。

しかしこのdeadmau5には不運なことに2週間でクラスタが死んでしまう問題を抱えていた。

k8sを動かすために必須のpodが立ち上がらずにclusterが応答しなくなるというものだった。

kube-dns, kube-controller-manager,kube-scheduler status become pending · Issue #2945 · coreos/tectonic-installer · GitHub

2週間ごとのclusterのbackupが走った際にぶっ壊れてしまうのだがいまだによくわかっていない。

5

流石に安定させなやばいな、ということでkopsを使うことにした。

僕はcoreosが好きというのもあって、kopsはubuntuを使うために避けていたが実はcoreosが使えた。

最初のうちはkopsのterraform生成機能を試したが、これはカスタマイズが効きにくいのが微妙でterraform生成はやめて 自分で書いたterraform + kops.yamlで行くことにした。

この時 masterはt2.medium * 3の3az構成にした、この3az構成は正解でメンテナンス時のトラブルが回避できたのでよかった。

この時のステージング環境のクラスタ名がskrillexで、

本番環境のクラスタ名が、そう、avicii だった。

最終的にmaster nodeが無駄になるのでskrillexはすぐにaviciiに統合されたが、大きな事件が起きた。

6

2018年4月20日、avicii本人が死んでしまった。

正直kopsはaws eksが出るまでのつなぎで使うつもりだったので本人がクラスタより先に死んでしまうのはあまりに衝撃だった。

そして昨年11月にeksが発表され、先月我々のaviciiクラスタは役目を終え、EKSに変わった。

EKSのクラスタ名を何にするかはかなり迷った。

もともとの次のクラスタ名はaphex twinsquarepusherを考えていたが、我々(僕個人)の思いとしてaviciiを忘れたくないためにavciiの本名であるところの

tim berglingクラスタ名にした。

7

インフラエンジニア募集してます。

www.wantedly.com