この文書は自動機械翻訳技術を使用して翻訳されています。 正確な翻訳を提供するように努めておりますが、翻訳された内容の完全性、正確性、信頼性については一切保証いたしません。 相違がある場合は、元の英語版 英語 が優先され、正式なテキストとなります。

アーキテクチャ

サーバーとエージェント

  • サーバーノードは、`k3s server`コマンドを実行しているホストとして定義され、制御プレーンおよびデータストアコンポーネントはK3sによって管理されます。

  • エージェントノードは、データストアや制御プレーンのコンポーネントを持たずに、`k3s agent`コマンドを実行しているホストとして定義されます。

  • サーバーとエージェントの両方がkubelet、コンテナランタイム、およびCNIを実行します。エージェントレスサーバーの実行に関する詳細は、高度なオプションドキュメントを参照してください。

how it works k3s revised

埋め込みDBを使用した単一サーバーのセットアップ

以下の図は、埋め込みSQLiteデータベースを持つ単一ノードK3sサーバーのクラスターの例を示しています。

この構成では、各エージェントノードは同じサーバーノードに登録されます。K3sユーザーは、サーバーノード上でK3s APIを呼び出すことによってKubernetesリソースを操作できます。

K3sアーキテクチャ(単一サーバー)

高可用性K3s

単一サーバークラスターはさまざまなユースケースに対応できますが、Kubernetes制御プレーンのアップタイムが重要な環境では、高可用性構成でK3sを実行できます。高可用性K3sクラスターは次のように構成されます:

  • 埋め込みDB

  • 外部DB

  • Kubernetes APIを提供し、他の制御プレーンサービスを実行する三つ以上の*サーバーノード*

  • 埋め込みetcdデータストア(単一サーバーセットアップで使用される埋め込みSQLiteデータストアとは対照的)

K3sアーキテクチャ(高可用性サーバー)

  • Kubernetes APIを提供し、他の制御プレーンサービスを実行する二つ以上の*サーバーノード*

  • 外部データストア(MySQL、PostgreSQL、またはetcdなど)

K3sアーキテクチャと高可用性サーバーおよび外部DB

エージェントノードの固定登録アドレス

高可用性サーバー構成では、各ノードは下の図に示すように、固定登録アドレスを使用してKubernetes APIに登録することもできます。

登録後、エージェントノードはサーバーノードの1つに直接接続を確立します。

エージェント登録高可用性

エージェントノード登録の仕組み

エージェントノードは、k3s agent`プロセスによって開始されたWebSocket接続で登録され、その接続はエージェントプロセスの一部として実行されるクライアント側のロードバランサーによって維持されます。最初に、エージェントはポート6443のローカルロードバランサーを介してスーパーバイザー(およびkube-apiserver)に接続します。ロードバランサーは接続先の利用可能なエンドポイントのリストを維持します。デフォルト(および最初にのみ)のエンドポイントは、--server`アドレスからのホスト名によってシードされます。クラスターに接続すると、エージェントはデフォルトの名前空間にあるKubernetesサービスエンドポイントリストからkube-apiserverアドレスのリストを取得します。これらのエンドポイントはロードバランサーに追加され、クラスター内のすべてのサーバーへの安定した接続を維持し、個々のサーバーの障害に耐えるkube-apiserverへの接続を提供します。

エージェントは、ノードクラスターシークレットとともに、/etc/rancher/node/password`に保存されたノード用のランダムに生成されたパスワードを使用してサーバーに登録します。サーバーは、個々のノードのパスワードをKubernetesシークレットとして保存し、その後の試行は同じパスワードを使用する必要があります。ノードパスワードシークレットは、`kube-system`名前空間に<host>.node-password.k3s`というテンプレートを使用した名前で保存されます。これはノードIDの整合性を保護するために行われます。

エージェントの`/etc/rancher/node`ディレクトリが削除された場合、または既存の名前を使用してノードを再参加させたい場合は、ノードをクラスターから削除する必要があります。これにより、古いノードエントリとノードパスワードシークレットの両方がクリーンアップされ、ノードがクラスターに(再)参加できるようになります。

ホスト名を頻繁に再利用するが、ノードパスワードシークレットを削除することができない場合、--with-node-id`フラグを使用してK3sサーバーまたはエージェントを起動することで、ユニークなノードIDがホスト名に自動的に追加されます。有効にすると、ノードIDも/etc/rancher/node/`に保存されます。