Proxmox上でTalos Linuxを使用したモダンなKubernetesクラスターの構築:イミュータブルかつSSHレスなガイド

HomeLab tutorial - IT technology blog
HomeLab tutorial - IT technology blog

イミュータブルインフラストラクチャへの移行

ほとんどのKubernetes管理者は、サーバーの「お守り」にあまりにも多くの時間を費やしています。Ubuntuをインストールし、SSHを堅牢化し、Containerdをセットアップして、最後にkubeadmを実行するという、お決まりのルーチンです。しかし、半年も経てばそれらのノードには差異(ドリフト)が生じます。あるワーカーには異なるカーネルパッチが適用され、別のワーカーでは野良ログファイルが5GBのディスク容量を食いつぶし、セキュリティアップデートは手動の「もぐら叩き」状態になります。

Talos Linuxは、これとは全く異なるアプローチを取ります。これはKubernetes専用にゼロから設計された、イミュータブル(不変)、エフェメラル(一時的)、かつ堅牢化されたオペレーティングシステムです。SSHもbashシェルも、apt-getすら存在しません。代わりに、Podを管理するのと全く同じように、バージョン管理されたAPI and YAMLファイルを通じてOSを管理します。このモデルに移行することで、インフラを純粋なコードとして扱うことが強制され、「スノーフレークサーバー(職人芸で管理されたサーバー)」の問題を完全に解消できます。

TalosとProxmoxを組み合わせることは、ホームラボ(HomeLab)にとって究極の選択です。エンタープライズグレードの仮想化環境と、本番環境のクラウドに匹けてモダンで「手のかからない」管理スタイルを同時に手に入れることができます。

Proxmoxでの基盤構築

コードの実装に入る前に、仮想環境を準備する必要があります。安定した高可用性クラスターを目指すなら、コントロールプレーンノード1台とワーカーノード2台を目標にしてください。Intel NUC1台のような控えめなハードウェア構成であれば、テスト用にシングルノードのコントロールプレーンでも十分に動作します。

1. Talosイメージのダウンロード

Talos LinuxのリリースリポジトリからISOを取得します。標準的なtalos-amd64.isoは非常に軽量で、通常100MB以下です。これをすぐにProxmoxのISOストレージにアップロードしてください。

2. 仮想マシンの作成

VMをプロビジョニングする際は、動作を軽快にするために以下の設定を使用してください:

  • CPU: 「Host」タイプを選択します。これにより、VMがAES-NI命令を使用できるようになり、Kubernetesの暗号化処理が高速化されます。コントロールプレーンには2コア、ワーカーには最低2コアを割り当てます。
  • メモリ: 2GBでも動作しますが、システムオーバーヘッドをスワップなしで処理するには4GBが最適です。
  • ネットワーク: VirtIOブリッジを使用してください。これがProxmoxネットワークにおける最速のパスです。
  • ディスク: 20GBあれば十分です。OS自体が極小であるため、ディスク容量のほとんどを実際のコンテナイメージに使用できます。
  • マシンタイプ: モダンなLinux機能のサポートを向上させるため、q35を使用します。

VMの準備ができたら、ISOをマウントして起動順序を設定します。ルーターで静的IPにマッピングしておくことを強くお勧めします。TalosはAPI駆動のシステムであるため、隣接するノードがどこに存在するかを正確に把握しておく必要があります。

APIによるクラスター設定

SSHがないため、ローカルのワークステーションからtalosctlを使用してノードと通信します。このツールが、初期ディスク消去からカーネルのアップグレードまで、あらゆる操作を担当します。

1. talosctlのインストール

CLIのインストールは簡単です。macOSやLinuxでHomebrewを使用している場合:

brew install talosctl

Windowsユーザーは、GitHubからバイナリを直接取得してPathに追加できます。

2. クラスター設定の生成

クラスター名を定義し、最初のコントロールプレーンノードのIP(例:192.168.1.50)を指定します。

talosctl gen config my-home-cluster https://192.168.1.50:6443

このコマンドにより、4つの重要なファイルが作成されます:

  • controlplane.yaml: マスターノードの設定ファイル。
  • worker.yaml: 計算ノード(ワーカー)の設定ファイル。
  • talosconfig: ローカルクライアント用の認証情報。
  • secrets.yaml: クラスター間通信の暗号化に使用されるキー。

3. 設定の適用

ProxmoxのVMを起動します。これらは「メンテナンスモード」で待機し、指示を待ちます。ここで、ノートPCからノードへ設定をプッシュします:

# マスターノードの設定
talosctl apply-config --insecure --nodes 192.168.1.50 --file controlplane.yaml

# ワーカーノードの設定
talosctl apply-config --insecure --nodes 192.168.1.51 --file worker.yaml
talosctl apply-config --insecure --nodes 192.168.1.52 --file worker.yaml

--insecureフラグは初回のみ使用します。これにより、TLS証明書が生成される前にtalosctlが初期の信頼関係を構築できます。このコマンドの後、ノードは再起動し、ローカルディスクを消去して、約15秒でOSをインストールします。

4. クラスターのブートストラップ

この時点では、OSは動作していますが、Kubernetesのコントロールプレーンはまだアクティブではありません。初期セットアップをトリガーする必要があります。まず、ローカル環境を新しい設定に向けます:

export TALOSCONFIG=$(pwd)/talosconfig
talosctl config endpoint 192.168.1.50
talosctl config node 192.168.1.50

talosctl bootstrap

これにより、etcdの構成が開始されます。必要なコンテナイメージのプルとデータベースの初期化が終わるまで、2〜3分待ちます。

検証とモニタリング

クラスターがオンラインになったら、その健全性を検証する必要があります。sshしてhtopを実行することはできないため、可視化にはTalos APIを使用します。

1. Kubeconfigの取得

/etc/kubernetesから手動でファイルをコピーする必要はありません。TalosはAPI経由でkubeconfigを生成します:

talosctl kubeconfig ./kubeconfig
export KUBECONFIG=$(pwd)/kubeconfig

2. ノードステータスの確認

Kubernetesが新しいハードウェアを認識しているか確認します:

kubectl get nodes

ステータスがNotReadyと表示されても慌てないでください。TalosにはデフォルトでCNI(コンテナネットワークインターフェース)が含まれていません。モダンなホームラボには、Ciliumのインストールをお勧めします。これはFlannelのような古い選択肢よりも高速で、優れたネットワークインサイトを提供します。

3. ダッシュボードによるヘルスの監視

内部で何が起きているかを確認するには、内蔵のダッシュボードを使用します:

talosctl dashboard

これにより、リアルタイムのCPU使用率、メモリ負荷、内部サービスの健全性を示すターミナルUIが開きます。サービスが失敗している理由を知りたいですか?ログを直接ストリーミングできます:

talosctl logs controller-runtime

最後に

Proxmox上でTalosに切り替えることで、ワークフローは「個別のサーバー管理」から「統合されたプラットフォーム管理」へと進化します。ノードの挙動がおかしくなっても、ログのデバッグに時間を費やす必要はありません。ただリセットするだけです。この「ペットではなく家畜(Cattle, not pets)」という哲学は、本番環境の信頼性におけるゴールドスタンダードです。

これで、アップグレードが容易で、手動設定の差異による破損が起こり得ない、セキュアで最小限のクラスターが手に入りました。次のステップは?アプリケーションをデプロイし、永続ストレージを簡単に管理できるLonghornをチェックしてみましょう。

Share: