2025/11/18 11:01 A 'small' vanilla Kubernetes install on NixOS

ロボ子、今日のニュースはKubernetesの自己管理型小規模マルチノードインストールの構築についてじゃ。

Kubernetesですか。最近よく耳にするようになりました。自己管理型というのは、具体的にどういうことでしょうか?

ふむ、自分で全部設定するってことじゃな。この記事では、NixOSを使ってKubernetesを構築する方法を探求しておるぞ。

NixOSですか。あまり触ったことがないのですが、どのような利点があるのでしょう?

NixOSはね、設定ファイルが宣言的で再現性が高いのが特徴なのじゃ。つまり、同じ設定ファイルを使えば、いつでも同じ環境を構築できるってわけ。

なるほど、それは便利ですね。記事によると、Kubernetesのバージョンは1.34とのことですが、バージョンアップグレードは大変なのでしょうか?

Kubernetesは段階的なマイナーバージョンアップグレードが必要じゃ。一気に上げると動かなくなることもあるから注意が必要じゃぞ。

ふむふむ。ネットワークについても触れられていますね。Wireguardを使ってコンテナサブネットを接続するとありますが、Wireguardを選ぶ理由は何でしょう?

Wireguardは比較的新しいVPNで、高速で安全なのが特徴じゃ。暗号化されたリンクのオーバーヘッドをテストするのに適しておる。もちろん、GENEVEやVXLANなどの代替手段もあるぞ。

なるほど。セキュリティも考慮されているんですね。コンテナサブネットのアドレススキームを決定するのも重要なポイントですね。

そうじゃ。各マシンにノードインデックスを割り当てる必要があるぞ。Docker/Podmanとは違って、ブリッジインターフェースを手動で管理する必要があるから、ちょっと面倒じゃけどな。

Wireguardリンクの設定には、キーペアの生成やagenixの使用など、少し複雑な手順が必要そうですね。

そうじゃな。でも、agenixを使えば、NixOS構成にシークレットを安全に導入できるぞ。peers.jsonファイルを使ってWireguard構成を生成するのもポイントじゃ。

ホスト名についても言及されていますね。Kubernetesにk8s.internalを使用するように指示するとのことですが、これはなぜでしょう?

KubernetesはDNSでサービスをアドバタイズするドメイン名で構成する必要があるからの。OSのホスト名から切り離すことで、柔軟性が増すのじゃ。

APIサーバーの設定も重要ですね。静的トークンファイルを使って認証を行うとのことですが、セキュリティ面は大丈夫なのでしょうか?

本番環境では、etcdのデータを定期的にバックアップする必要があるぞ。APIサーバーのシークレットを設定し、EncryptionConfigurationを使ってSecretリソースを暗号化することも忘れずに。

kube-schedulerやkube-controller-managerなど、Kubernetesの各コンポーネントについても解説されていますね。

kube-schedulerはポッドを実際にスケジュールするために、kube-controller-managerは標準のKubernetesコントローラーをすべて含むために必要なのじゃ。

CoreDNSはKubernetes APIのサービスに基づいてDNS解決を提供するとのことですが、Kubernetesの外部でNixOSによって管理するんですね。

そうじゃ。kube-proxyはAPIのServiceリソースに割り当てられたクラスターIPを実装するのじゃ。すべてのノードで実行する必要があるぞ。

kubeletはポッドがノードに割り当てられたときにノードでコンテナを起動するんですね。ワークロードを実行するマシンでのみkubeletが必要とのことですが、プライマリノードを含むすべての場所で起動するのはなぜでしょう?

registerWithTaintsを使ってプライマリをスケジュール不可としてマークするからじゃ。こうすることで、プライマリノードにワークロードが集中するのを防ぐことができるのじゃ。

テストについても触れられていますね。kubectlを使ってノードのステータスを確認し、コンテナを起動して接続をテストするとのことです。

セットアップが完全に機能していることを確認するのは非常に重要じゃ。怠ると後で痛い目を見るぞ。

今後の展望として、Ingress/Gatewayコントローラーやストレージプロビジョナー、データベースの管理などが挙げられていますね。

これらの機能を追加することで、Kubernetesがより広範に役立つようになるのじゃ。でも、記事にもあるように、まだ見ていない多くの障害モードがあるから、すぐに本番環境に移行するのは危険じゃぞ。

確かにそうですね。Kubernetesは、特にVMでは、メモリとCPUのかなりの部分を消費するとも書かれていますね。

小規模なインストールでは、etcdとAPIサーバーの冗長性は本当に必要か?という問いかけもあるぞ。トークン認証ファイルのランタイムリロードは、テスト以外でもより実行可能なオプションになるかもしれない。

Kubernetes自体の複雑さは半分に過ぎず、残りの半分はネットワーク構成にあるという指摘は、非常に的を射ていると感じます。

じゃろ? 最後に、Kubernetesの構築は大変じゃけど、完成した時の達成感は格別じゃぞ!

博士、今日は色々と教えていただきありがとうございました!

どういたしまして。ところでロボ子、Kubernetesの構築が終わったら、次はロボットレストランをKubernetesで管理してみるのはどうかの?

えっ、ロボットレストランですか?それは一体…

冗談じゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。