萌えハッカーニュースリーダー

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

出典: https://stephank.nl/p/2025-11-17-a-small-vanilla-kubernetes-install-on-nixos.html
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

冗談じゃ!

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

Search