--- title: "Kubernetes に入門してからやってきたことのメモ" date: "2018-08-19T14:46:59+09:00" tags: ["kubernetes", "book"] isCJKLanguage: true draft: false --- 数か月前からちょこちょこと Kubernetes を触っているのだけど、まだエントリーには何も起こしていなかったので、これまでやってみたことをツラツラと書き留めてみる。 なぜ Kubernetes か ---- 単純に言ってしまうと「流行っているから」が最初の動機で、 [CoreOSからECSへDockerを移行した · the world as code](https://chroju.github.io/blog/2017/09/26/migrate_coreos_to_ecs/) に書いた ECS の環境から GKE へと移行した。 ただ、使い始めてからは少し印象が違ってきていて、これは単なる「流行り」ではなくて、 AWS が出てきて数年のうちに「 AWS は今後のインフラ環境の主流になる」という空気が醸成されたように、今後は Kubernetes がメインになっていく、まずは k8s に載らないかを検討するような形になっていくんだろうなという感覚になってきた。慣れてくるとわかるけれど、 k8s を運用する場面において物理的なインフラを意識することはほとんどなく、どのコンテナにどれぐらいのリソースを割かせ、どのコンテナとどのコンテナを接続して、計どれだけのコンテナを動かせばいいのか、というのを宣言すれば勝手にイイ感じにやってくれるので、インフラ管理という面でこの上なく楽。ただ、それは裏を返せばこれまでのインフラ概念と、まったく異なる概念の下で環境を運用しなくてはならないという意味でもあり、最初の学習コストは大きく感じる。 もう一点、 k8s が良いのは OSS であるという点で、つまりはクラウド隆盛以降にたびたび懸念されていたベンダーロックインが無い。今は最も簡単に k8s を扱える環境として GKE を使っているけれど、もし何か GKE に懸念が出てきたら Amazon EKS なり自前のオンプレ k8s なりに乗り換えるのも難しくない。なので学習コストは大きく感じると書いたけど、払ったあとの回収は今後数年長いスパンでできると思うし、払う甲斐はあると思う。 ECS よりはおそらく。 学習用「貧者のGKE」もどき ---- 先に GKE を使っていると書いたが、具体的な環境としてはなるべく安価に済むように「貧者のGKE」にヒントを得ている。「貧者のGKE」は [貧者の GKE / 無料枠だけでクラスタを作ろう](https://qiita.com/apstndb/items/788f705e71e7660967a6) から引用させてもらった。 > 特に注目なのは US リージョンに限るが GCE f1-micro 1インスタンス, 30 GB の HDD が永続で無料なことだろう。GKE は5ノードまではマスタの課金はなく、ノードは GCE ノードとして課金されるので、この恩恵が受けられるはずだ。 残念ながら自分が動かしたいのは [influxDB](https://docs.influxdata.com/influxdb/v1.6/) で、こやつがそれなりにメモリを食うために f1-micro は使えず、次点の g1-small を使っている。これは無料ではないが、 us-central1 かつプリエンプティブであれば $5.11/month (2018-08-19 時点)で使えるのでまぁまぁ安い。プリエンプティブいいですね。個人用途なら十分だし、料金は通常の3分の1程度なので最高。 また他にも、 GKE を使うとデフォルトで作成される Google Cloud Load Balancing がそれなりに高いので、自前で nginx を使ってロードバランシングする、という節約術もあるらしい。自分の場合そこまではしていなくて、 g1-small プリエンプティブ2台構成で月額4000円程度になっている。もう少し下げたい、という気も確かにする。 * [安価なGKE(k8s)クラスタを作って趣味開発に活用する - えいのうにっき](https://blog.a-know.me/entry/2018/06/17/220222) * [GKEでなるべく安くKubernetesクラスタを作成してPrometheus-+-Grafanaを使ってみる-Part2-Ingress編](https://kter.jp/kubernetes/2018/03/01/GKEでなるべく安くKubernetesクラスタを作成してPrometheus-+-Grafanaを使ってみる-Part2-Ingress編.html) kompose ---- ECS からの移行には [kompose](https://github.com/kubernetes/kompose) を用いた。 kompose は Docker compose の YAML を k8s のマニフェストファイルに変換してくれるツールで、しかも Kubernetes が提供しているという最高のやつ。自分は ECS の環境を Docker compose のファイルで動かしていたので、 kompose によって楽に移行ができた。 kompose は本当に簡単で、正直最初は生成されたファイルをただ `kubectl apply -f hoge.yml` するだけで何もわからぬままに環境構築ができてしまって、逆に戸惑ったぐらいだった。今動かしているマニフェストファイルは GKE クラスタ構築用の Terraform ファイルと合わせて GitHub に上げてあるけれど、 kompose で生成した時点から多少いじってはあるが、そこまで大きく変えてもいない。 * [chroju/gke_sandbox: private GKE sandbox manifest files and terraform files](https://github.com/chroju/gke_sandbox) 学習リソース ---- 基本的には [Kubernetes Engine ドキュメント | Kubernetes Engine | Google Cloud](https://cloud.google.com/kubernetes-engine/docs/) を見ているが、とりあえず1冊まとまっててザザッと概念的なものを見渡せるものが欲しかったので、オライリーが出している『入門 Kubernetes』をさっと読んだりもした。