SummerWind

Web, Photography, Space Development

Kubernetes The Hard Way

Kubernetes The Hard Way が Docker に依存せずに Kubernetes クラスターが構築できるようになったという話を見かけたので、手順に従って実際に Kubernetes クラスターの構築をやってみることにした。手順上は GCP を使用する前提になっていたものの、今回は各手順の内容をよく理解するためにあえて Vagrant で構築した。

Vagrant で構築するには、Worker インスタンスでルーティングテーブルに静的なルートを設定する必要があったり、kubelet が使用する IP アドレスを明示する必要があったりと、いくつか追加の作業が必要になったものの、各手順でやっていることをより理解するという意味ではちょうどよかった。

また、kubelet と API Server の間の認証がどうしても anonymous になってしまい、Node Authorizer が操作を許可してくれないという問題が起きて少し苦労した。原因はロードバランサーとして API Server の前段に配置した nginx が、kubelet の認証に必要なクライアント証明書を API Server 側にバックポストできていなかったというもので、HTTP ではなく TCP によるロードバランシングにしたらすんなり解決した。

「Docker に依存しない」という部分は、実際には cri-containerd を使用して kubelet から CRI 経由で直接 containerd を操作するという仕組みになっていた。コンテナネットワークまわりは CNI のリファレンスプラグイン を使用して、Docker と同じように仮想ブリッジ経由でコンテナ同士をつなぐようになっていた。CNI まわりは詳しくなかったので、なるほどなぁという感じで勉強になった。

一通り手順を実施して Kubernetes クラスターとして動くようになったので、次はネットワークまわりを Calico に切り替えたり、コンテナランタイムを CRI-O にして動かしてみたりしようと思う。

Moto Ishizawa

Moto Ishizawa
ソフトウェアエンジニア。ロケットの打上げを見学するために、たびたびフロリダや種子島にでかけるなど、宇宙開発分野のファンでもある。