こまぶろ

技術のこととか仕事のこととか。

『つくって、壊して、直して学ぶ Kubernetes入門』を読んだ

『つくって、壊して、直して学ぶ Kubernetes入門』を読んだ。

※翔泳社の直販サイトSEshopでは5/9までPDF版が50%ポイント還元で買える。

www.seshop.com

著者の方のブログ。

blux.hatenablog.com


Dockerは業務でも日頃から使っているが、Kubernetesは使ったことがなく、ちゃんと勉強したこともなかった。「Kubernetesが必要になるようなシステムは稀」という言説をしばしば目にすることもあり、まぁ必要になったら勉強すればよかろうというスタンスでいたのだけれど、何も知らないのもあれだよなという思いもないではなかったので、TLで話題になっていて(前述の翔泳社の50%還元もあり)読むことにした。

全体像〜Part 1 つくってみようKubernetes

この本の想定読者は、「Docker は触ったことがあるものの、Kubernetes を全く触ったことがない方」であり、自分はまさにこれに当てはまっている。最後まで読み進めても、知らないのはKubernetesエコシステムの話がほとんどで、書籍の狙い通りの学習をすることができたと思う。

内容としては、タイトルの通り、Kubernetesクラスタを作成し、(誤った設定をapplyして)壊し、kubectlなどを駆使しながら調査し、設定を間違いを修正して直す、というのがメイン(Part 2)で、Part 1ではその前段としてのKubernetesの入門の入門(Docker入門を含む)、Part 3ではKubernetesの仕組みやエコシステムを構成する周辺ツールの解説などやや発展的な内容が扱われている。

自分は前述の通り、Kubernetesの知識はほとんどなく、PodとかServiceっていう概念があるんでしょ、という程度のところからスタートしているので、Part 1の内容から役に立った。Dockerの入門も一応あるので、「Dockerを使ったことがある人」でなくても読むことはできると思う。

Part 2 アプリケーションを壊して学ぶKubernetes

本編ともいえるPart 2では、Kubernetesの最も基本的な単位であるPodから始まって、ServiceやConfigMap、各種probe、リソースに関する設定項目、スケジューリングのための設定などを学んだ。Kubernetesを使ったことはないが、AWS上でコンテナアプリケーションをECSなどを使って運用していたりはするので、「Kubernetesではこういうふうに扱うのかー」と思いながら理解した部分も多かった。

ハンズオンでは、トラブルシューティングの際に問題の切り分けを行うためのアプローチの仕方やそこで使う基本的なコマンドが説明されており、わかりやすかった。とはいえ、この本のトラブルシューティングの例は実際に起きるものよりはかなり単純化されたもので、この本を読んだだけで実践までできるようになるわけではないとはレビュワーの方も述べているので、本格的に実践していくにあたってはChapter 12で紹介されているようなより発展的な書籍やリソースが必須になるのだろう。入門者の立場からすると勉強になったしわかりやすかったと思うが、その先まで見据えたときに本当に入門書としての役割を果たせているかの評価は今の自分にはできない。

ハンズオンパートについてよかった点を1つ挙げておく。今回自分はMacでハンズオンの部分を実践したが、ローカルクラスタを作るツールとして本書で主に使われているkindのおかげで環境が汚れることを気にせずにクラスタを作っては捨てるのを繰り返すことができたのが快適だった。ハンズオンの類では書かれている通りに動かなかったり、うっかりミスでローカル環境を汚してしまって進められなくなるというのが起きがちだと思うのだが、その心配がなかったのが著者の意図した学習体験をスムーズに実現する上で役に立っていたと思う。

Part 3 壊れても動くKubernetes

Part 3は、Kubernetesのアークテクチャ、Kubernetesを利用する際の開発フローやオブザーバビリティについてで、開発フローの章ではHelmやKustomize、オブザーバビリティの章ではGrafanaやPrometheusの使い方の説明をしていた。個々のツールについての解説はそこまでボリュームが大きいわけでもなくあっさりとしたものだったとは思うが、詳細については別の書籍や公式ドキュメントを参照すべきだろう。

個人的に印象に残ったのは、Pull型とPush型の違いが複数の箇所で出てきたことだ。まず、Kubernetesのアーキテクチャとして、Control Planeから個々のWorker Nodeに指示を与えるのではなく、Worker Nodeが Control Planeを参照して動作するという話。また、CIOpsとGitOpsの違いとして、前者がCI側からのPush型であるのに対し、後者はCIに対するPull型であるという話。そして、DatadogとPrometheusのデータ収集の仕方について、前者がPush型であるのに対して後者がPull型であるという話が出てきた。Push型とPull型の違いというのは様々な場面に出てくる設計上の違いで、どちらを採用するかによってシステムが持つ性質が変わってくる。これは日頃のソフトウェア開発でもよく出てくる設計判断のポイントだと思うが、この書籍の中だけでも上記の3つが出てきていたのが印象に残った。

おわりに

前述の通り、自分は本当に入門者であるので、この本が入門書としての役割を適切に果たせているかどうかの判断はできない。しかし、総じて読みやすかったとは思うし、つまずいてしまって先に進めないとか、書籍の説明が前提としている事柄がわからなくて困るという場面がなかったことは確かだ。本番の運用に足る知識を得られたとは思わないが、概要の理解はできたと感じるので、読む前に感じていた「Kubernetesは当面は使う機会がないけど、全く知らないのもなー」という漠然とした問題関心には十分に応えてくれたと思う。