はじめまして。ecbeingの金澤です。
R&D部門で新規プロダクトの基盤構築を担当しています。
現在の業務では Amazon ECS&Fargate を使用しています。
今回は、新しく Kubernetes を学ぶにあたりちょうど良い書籍がありましたので、
書籍の紹介と、読んだことでどんな学びがあったかをまとめたいと思います。
読んだ書籍
『みんなのDocker/Kubernetes』
この本を選んだ理由
僕自身、Docker はプロジェクトでよく利用していて(主に開発環境のリソースの節約を目的に…)、以前 Kubernetes も学ぼうと思ったことがあったのですが、
当時はあまり必要に駆られていなかったのと、覚える単語が沢山あったのと、Minikube の管理画面が全部英語だったため(笑)真面目に取り組まず放り投げてしまいました。
しかし、ECK や GKE、AKS といった Kubernetes のマネージドサービスがメジャーになり、最近は社内でも「次はクーベ使ってみたいね」みたいな会話が聞こえるようになってきました。
そろそろちゃんと学ばねばなぁと思っていたところ、技術評論社の新刊案内ページでこの本が間もなく発売になることを知り、発売を楽しみにしていました。
というわけで、読みました
まずは買うところから…
4月18日。『みんなのDocker/Kubernetes』の発売日。
居ても立ってもいられず、開店時刻にあわせて本屋にダッシュしました。
勢い勇んで入店したものの、店員さんに聞くと「入荷は明日です」とのこと…
えぇ…書籍って発売日当日に店頭に並ぶとは限らないんですね…
翌日
無事買えました。陳列されていなかったので、店員さんに聞いたら奥から持ってきてくれました。
一旦本棚へ
一応会社のお金で買った本なので、会社の本棚に入れておきます。
(まあすぐ僕が借りるんですが)
そして読む
読みます。
読みます。
書籍の感想と学んだこと
Part 1:Docker/Kubernetes は何を解決するのか? コンテナ技術再入門
概要や歴史は予備知識として知っておくとして、
僕はこのパートを読んでようやく Pod と Deployment と Service の役割が分かりました。
分かりやすく説明するため無理やり AWS の機能に当てはめるとこんな感じでしょうか。
Kubernetes | 役割 | AWS |
---|---|---|
Pod | ロードバランサーが処理を振り分ける1つのかたまり | ECS Task |
Deployment | Podの起動数などの管理 | ECS Service |
Service | ロードバランサー | ALB |
前に Kubernetes を学ぼうとした時は、まだ物理サーバーの考え方から抜け出せていなかったので、Deployment の概念が分からなかったんだなぁ…と1人で勝手に納得しました。
(物理サーバーは勝手に増えたりしませんからね)
もう1点、Pod の「複数のコンテナをまとめる」理由もよく分かっていなかったのですが、localhost からしか通信を受け付けない Webサーバー(.NET Core の Kestrel サーバーなど)とリバースプロキシー用の Nginx のセット、と考えると合点がいきました。
というわけで、この章で紹介されている Docker/Kubernetes の機能は初歩の初歩ではありますが、僕としてはまさに「再入門」できたのでありました。
Part 2:「1日100デプロイ」を可能にする Docker/Kubernetes 実践ノウハウ
「第1章:最高のコンテナイメージをビルドする」
この章、すごいです…。内容が深い…そして濃い…。
簡単に言うと、「Docker をより良く使うには、Docker の仕組みや、Linux との関係を知ると良いですよ」という内容なのですが、
「君は今の知識で基盤担当を名乗っていて良いのか?」とたしなめられたような気がしました…。
この「何も知らなくても使えるけど、使いこなすためには中身を知るべし」というのは Web 技術全般で言えることだと思いますが、Docker(というかコンテナ)も多分に漏れずとても奥深い技術なんだなぁと目から鱗が落ちました。
この本だけでなく、他の書籍や記事も読んでもっと勉強しなきゃと思いました。
ちなみに、文中で Docker イメージを簡単に軽量化する手段として docker-slim が紹介されていて、試しに僕の手元にあるコンテナで使ってみたところ 336MB → 139MB に減量できました。
ネット上では、docker-slim を使ったら中のプログラムが動かなくなったという記事もあり、導入にはきちんと検証する必要がありそうですが、簡単に試せる情報が載っているのは嬉しいですね。
他にも、安定したコンテナを作るための手法や、トラブルシューティングの方法が多数紹介されていたので、実用面で大いに活用できそうだな、という内容でした。
(Kubernetesの章は割愛します。すいません)
Part 3:事例に学ぶ! Docker/Kubernetes 活用の極意
ここでは4社の活用事例が載っていて、導入背景や具体的な構成、使用しているツールなどが細かく書かれているのですが、僕はまだ Kubernetes を導入していないので…
ノウハウ以外の部分で僕が感じたことを書こうと思います。
それは、
- Docker/Kubernetes を導入する目的をはっきりさせる(すべての課題が解決するわけではない)
- 技術者が導入に前向きになれる環境を用意する
というのが大事だということでした。
特に 2. について、導入の主目的は、必ずしも現場のシステム開発者のためとは限らない(サーバーリソースの有効活用によるコスト削減であったり、将来のサービス展開を見据えた事業判断であったり)ですが、そうであっても「会社に言われたからやる」ではなく「開発側にとってもこういうメリットがあるのでやりたい!」と思ってもらうにはどうすれば良いか。
また、全社導入を目指した時に、技術に貪欲だったり、調査研究ができる立場にいる人は、自分で先陣を切って突き進んでいくことができますが、そうではない後からやってくる人たちに、挫折せずに使い慣れてもらうにはどうすれば良いか。
そういった「全員が能動的に取り組むための仕組みづくり・環境づくり」を考えて実践する姿勢というのも、ぜひ見習わないといけないと感じました。
…とここまで書いて、なんだか SVN から Git に移行した時と似ているなぁと感じました。
あれも、個人的にはかなりドラスティックな変化でしたが、Docker/Kubernetes はそれ以上のインパクトがあると思っています。
まとめ
というわけで、『みんなの Docker/Kubernetes』は僕にとって、基本知識から実践で使えるコマンド、更には技術者のマインドに至るまで様々な学びが得られた書籍でした。
(Kubernetes を学ぶつもりが、Docker をもっと学ばねばという結論になりましたが…)
ページ数としては200程度ですが、コマンドの詳しい説明やスクリーンショットも多くあり、2~3時間あればひと通り読めるボリュームでした。
書籍の中にもあったのですが、システム開発に銀の弾丸は無く、それは基盤においても同じで、「Docker を使うのか」「Kubernetes を使うのか」「使う場合はマネージドサービスなのか自前管理なのか」「どこまでを Kubernetes で賄うのか」…といったことを、システムを取り巻く環境に合わせて柔軟に考えていく必要があるのだな、と感じました。
また一方で、それを柔軟に変えられるような時代になったのだな、とも感じました。
と言いつつも、僕たちR&D部門にとってはこういった技術は超導入期で、まだまだ「良さそうなものはどんどん使ってみよう」という段階です。
なので、しばらくは技術の選定から運用まで数多くの試行錯誤をすることになるかと思いますが、そこで得たノウハウは積極的に発信して、技術の活性化に少しでも寄与できたらな、と思います。
最後までお付き合いくださりありがとうございました。
ここまで読んでくださったあなたにお知らせです。
R&D部門では、一緒に試行錯誤してくれる仲間を募集しています!