同僚に勧められて、GW早々"Kubernetes the Hard Way"を全てやりきりました!
"Kubernetes the Hard Way"とは
Dockerなどのコンテナの管理ツールとしてデファクトスタンダードになりつつあるKubernetesを、インストーラー任せにせずに、自力で必要なコンポーネントやクラスタ全てをセットアップして動作させるようにするという、一種の学習ツールです。
Google Cloud Platform (GCP)とGoogle Cloud SDKを使用して、インスタンス作成やネットワーク設定などを行う必要があるため、これらの学習教材としても有用です。
動機
大きく3つあります。
1. 実務でのKubernetesの利用が普通になってきた
ここ数年、社内でDockerの普及が進み、これらの管理のためにKubernetesの利用が普通になってきたことがあります。であれば、詳しく知りたくなりますよね〜
2. 書籍や公式ドキュメントだけでは理解しきれないところがあった
これは私だけの可能性がありますが、Kubernetesの書籍や公式ドキュメントを読んで動かし続けていたのですが、いまいちピンとこないところが多々ありました。 例えば、KubernetesのControl Planeは
で構成されていると公式ドキュメントにはありますが、これらには具体的にどのような設定が必要なのか?どのように連携し合って全体としての機能を提供できるのか?といったレベルまで理解しきれず、悶々としていました。
3. 以前から試してみたいことがあった
加えて、以前からDockerとKubernetesとを活用して、既存のテスト環境を(テストデータ込みで)必要な時に複製・破棄できる仕組み(チーム内では「Testable Infra」または「Testable and Disposable Infrastructure」と呼称しています)を作ろうと画策していまして、その実装やトラブルシューティングに、Kubernetesの内部構造の詳細な知識が必要だったこともあります。
やってみて分かったこと
1. 内部の詳細を体得できた
実際に手を動かすことで、以下のことを理解もとい「体得」することができました。(個人的な動機に叶うものでした)
- 各コンポーネントを動かすために、どのような設定ファイルが必要で、どのクラスタのどのディレクトリに置けば良いか?
- 各コンポーネントをLinuxのサービスとして動かすために、それぞれどのような設定が必要か?
- 各コンポーネント・クラスタ間の通信で、認証や暗号化がどう関わっているのか?またそのためにどのような設定が必要か?
2. トラブルシューティングができた
指示通りに設定したにも関わらず、kube-apiserverの起動に失敗するトラブルに遭遇し、原因究明およびトラブルを解決するという経験ができました。
トラブルシューティングの詳細は、下記GitHub Issueとしてまとめておきました。
「ツール系の学習にはトラブルシューティングが最適だ」と、昔会社の先輩に言われたことがありましたが、まさにそうでした。トラブルシューティングは、課題発見・解決力を磨く強力なツールです。
3. GCPの費用と節約方法が分かった
"Kubernetes the Hard Way"のREADMEには、GCPの費用の目安として
$0.23 per hour ($5.46 per day)
とありますが、必要時以外にGCPの各種リソースを停止・削除しておけば、1日あたり200-300円程度に抑えられました。
(インスタンスやネットワーク設定は、停止しているだけでは課金されるんですね〜)
まとめ
完走した感想ですが、Kubernetesのドキュメントやコードを追うことや、日々の業務で活用することももちろん有益ですが、より理解を深めるためにこれを試すのは、大いにありだと思います。 GW & Stay Homeなこのタイミング、実はこうしたことを試す/学ぶ良い機会かもしれません。