|
これは未公開の文書です SUSE® Virtual Clusters v1.2.0 (Dev). |
アーキテクチャ
仮想クラスターは、物理クラスター上にプロビジョニングされた孤立したKubernetesクラスターです。K3kは、軽量なフットプリントのために、Kubernetesクラスターの制御プレーンとしてK3sを活用します。
K3kは、仮想クラスターをデプロイするための2つのモードを提供します: - 共有(デフォルト) - 仮想
共有モード
デフォルトの*共有*モードは、K3sサーバーを制御プレーンとして使用し、 エージェントレスサーバー構成を持ちます。このオプションが有効になっている場合、サーバーはkubelet、コンテナランタイム、またはCNIを実行しません。サーバーは、K3kに特有の 仮想Kubeletプロバイダー実装を使用し、ホストクラスター上でワークロードやその他の必要なリソースをスケジュールします。このK3k仮想Kubeletプロバイダーは、共有ホストクラスター環境内でのリソースの反映とワークロードの実行を処理します。
ネットワーキングとストレージ
この共有インフラストラクチャのため、CNIはホストクラスターに設定されたものと同じです。利用可能なストレージについても同様で、ストレージクラスとボリュームはホストクラスターのものです。
必要な分離を提供するために、K3kはネットワークポリシーを活用します。
リソースの共有と制限
*共有*モードでは、K3kはKubernetesの「ResourceQuotas」と「LimitRanges」を活用してリソースの共有を管理し、制限を強制します。すべての仮想クラスターのワークロードがホストクラスターの同じ名前空間内で実行されるため、ResourceQuotasはこの名前空間に適用され、仮想クラスターによって消費される総リソースを制限します。LimitRangesは、ポッドのデフォルトのリソース要求と制限を設定するために使用され、ワークロードが明示的に指定しなくても合理的なリソース割り当てを持つことを保証します。
仮想クラスター内の各ポッドには、ポッド名、名前空間、クラスター名を組み合わせた一意の名前が割り当てられます。これにより、共有ホストクラスターの名前空間内での名前の衝突が防止されます。
ResourceQuotasは名前空間レベルで適用されることを理解することが重要です。これは、仮想クラスター内のすべてのポッドが同じクォータを共有することを意味します。これは仮想クラスター全体の制限を提供しますが、リソースの割り当てが動的であることも意味します。1つのワークロードがそのリソース割り当てを完全に使用していない場合、_同じ_仮想クラスター内の他のワークロードは、異なるデプロイメントやサービスに属していても、そのリソースを利用できます。
この動的な共有は、利点でもあり、課題でもあります。効率的なリソース利用を可能にしますが、ワークロードのリソース要求が異なる場合、予測不可能なパフォーマンスにつながる可能性もあります。さらに、このアプローチは、同じ仮想クラスター内のワークロード間で厳密なリソースの隔離を保証することを難しくします。
| GPUリソースの共有は、現在進行中の調査分野です。K3kはこの分野での潜在的な解決策を積極的に探求しています。 |
隔離とセキュリティ
共有モードの仮想クラスター間の隔離は、Kubernetesネットワークポリシーに大きく依存しています。ネットワークポリシーは、ポッドへのおよびポッドからのネットワークトラフィックを制御するルールを定義します。K3kはネットワークポリシーを構成し、1つの仮想クラスター内のポッドが他の仮想クラスターのポッドやホストクラスター自体のポッドと通信できないようにし、ネットワーク隔離の強固な基盤を提供します。
ネットワークポリシーは堅牢な隔離機能を提供しますが、その特性を理解することが重要です:
-
*CNI統合:*ネットワークポリシーは、サポートされているCNIプラグインとシームレスに統合されます。K3kはこの統合を活用してネットワーク隔離を強制します。
-
*細かな制御:*ネットワークポリシーはネットワークトラフィックに対する細かな制御を提供し、セキュリティポリシーを微調整できます。
-
*スケーラビリティ:*ネットワークポリシーは、仮想クラスターやアプリケーションの数が増えてもスケールが良く、環境が成長するにつれて一貫した隔離を保証します。
K3kはまた、Kubernetesポッドセキュリティアドミッション(PSA)を利用して、ポッドセキュリティ基準(PSS)に基づいて仮想クラスター内のセキュリティポリシーを強制します。PSSはポッドのために異なるセキュリティレベルを定義し、ポッドが実行できるアクションを制限します。PSAを構成して特定のPSSレベル(例えば、baseline`または`restricted)を仮想クラスターに適用することで、K3kはポッドが確立されたセキュリティのベストプラクティスに従うことを保証し、特権機能を使用したり、潜在的に危険な操作を実行したりすることを防ぎます。
PSA統合の重要な側面には以下が含まれます:
-
*ネームスペースレベルでの強制:*PSAの構成はネームスペースレベルで適用され、仮想クラスター内のすべてのポッドに一貫したセキュリティ姿勢を提供します。
-
*標準化されたプロファイル:*PSSは業界のベストプラクティスに沿った一連の事前定義されたセキュリティプロファイルを提供し、セキュリティ構成を簡素化し、基本的なセキュリティレベルを確保します。
共有モードアーキテクチャはセキュリティを考慮して設計されています。K3kは、ネットワークポリシーやPSAを含む複数のセキュリティ制御層を採用し、仮想クラスターとホストクラスターを保護します。共有ネームスペースモデルは慎重な構成と管理を必要としますが、これらの制御はマルチテナント環境でのワークロード実行のための堅牢なセキュリティ基盤を提供します。K3kは、進化する脅威に対処し、ユーザーに対して最高レベルの保護を確保するために、セキュリティメカニズムを継続的に評価し、強化しています。
仮想モード
K3kの`virtual`モードでは、完全に機能するK3sクラスター(サーバーおよびエージェントコンポーネントの両方を含む)が仮想クラスターとして展開されます。これらのK3sクラスターはホストクラスター内でポッドとして実行されます。各仮想クラスターには専用のK3sサーバーと1つ以上のK3sエージェントがあり、作業ノードとして機能します。このアプローチは強力な分離を提供し、各仮想クラスターは独立して動作し、それぞれのコントロールプレーンと作業ノードを持ちます。これらの仮想クラスターはホストクラスター上でポッドとして実行されますが、完全で独立したKubernetes環境として機能します。
ネットワーキングとストレージ
`virtual`モードの仮想クラスターはそれぞれ独自のネットワーキング設定を持ち、それぞれのK3sサーバーによって管理されています。各仮想クラスターは独自のCNIプラグインを実行し、それがK3sサーバー内で構成されており、他の仮想クラスターおよびホストクラスターから完全にネットワーク分離を提供します。仮想クラスターネットワークは最終的にホストクラスターのネットワークインフラストラクチャの上で動作しますが、ネットワーキングの設定とトラフィック管理は完全に分離されています。
リソースの共有と制限
`virtual`モードでのリソース共有は、仮想クラスターを構成するポッド(K3sサーバーポッドとK3sエージェントポッドの両方)にリソース制限を適用することによって管理されます。各ポッドには、特定のCPU、メモリ、およびその他のリソースが割り当てられます。仮想クラスター内で_within_実行されるワークロードは、これらの割り当てられたリソースを利用します。これは、仮想クラスター全体がその構成ポッドの制限によって決定される定義されたリソースプールを持つことを意味します。
このアプローチは、各仮想クラスターに利用可能なリソースを制御する明確で直接的な方法を提供します。ただし、各仮想クラスターがそのワークロードに対して十分な容量を持つことを確保するために、慎重なリソース計画が必要です。
隔離とセキュリティ
`virtual`モードは、各仮想クラスターのために展開された専用のK3sクラスターにより、強力な分離を提供します。各仮想クラスターが独自の制御プレーンとワーカーノードを実行するため、ワークロードは互いに、またホストクラスターから効果的に分離されています。このアーキテクチャは、1つの仮想クラスターが他の仮想クラスターやホストクラスターに影響を与えるリスクを最小限に抑えます。
`virtual`モードのセキュリティは、別々のK3sクラスターによって提供される固有の分離の恩恵を受けます。ただし、標準的なKubernetesのセキュリティベストプラクティスは依然として適用され、K3kは階層化されたセキュリティアプローチを強調しています。K3sサーバーポッドは、システムリソースへのアクセスを必要とする機能の性質上、しばしば特権を持って実行されますが、K3kは可能な限りこれらの特権を最小限に抑え、最小特権の原則に従うことを推奨しています。これは、完全な`privileged`モードに依存するのではなく、必要な機能を慎重に構成することによって達成できます。K3sのセキュリティベストプラクティスに関する詳細情報は、公式のK3sドキュメントにあります: https://docs.k3s.io/security(このリンクは、機能やその他の関連トピックに関する議論を含む一般的なセキュリティガイダンスを提供します)。
現在、仮想モードのセキュリティには、サーバーポッドがその機能の性質上、システムリソースへのアクセスを必要とするため、特権昇格のリスクがあります。
K3kコンポーネント
K3kは、2つの主要コンポーネントで構成されています:
-
*コントローラ:*K3kコントローラーは、ホストクラスター上で実行されるコアコンポーネントです。
Clusterカスタムリソース (CR) を監視し、仮想クラスターのライフサイクルを管理します。新しいClusterCR が作成されると、コントローラーは仮想クラスターを作成するために、ネームスペース、K3s サーバーおよびエージェントポッド、ネットワーク構成を含む必要なリソースをプロビジョニングします。 -
*CLI:*K3k CLI は、K3k と対話するためのコマンドラインインターフェースを提供します。ユーザーが仮想クラスターを簡単に作成、管理、アクセスできるようにします。CLI は、
ClusterCR の作成、仮想クラスターにアクセスするための kubeconfig の取得、その他の管理操作の実行など、一般的なタスクを簡素化します。
VirtualClusterPolicy
K3k は、VirtualClusterPolicy カスタムリソースを導入し、一般的な構成を設定し適用する方法と、K3k 環境内で仮想クラスターがどのように動作するかを定義します。
VCP の主な目的は、管理者が一元的に一貫したポリシーを管理し適用できるようにすることです。これにより、繰り返しの設定が減少し、組織の基準を満たし、K3k によって管理される仮想クラスターのセキュリティと運用の一貫性が向上します。
VirtualClusterPolicy は、1 つ以上の Kubernetes ネームスペースにバインドされます。バインドされると、VCP で定義されたルールは、そのネームスペース内で実行中または作成されるすべての K3k 仮想クラスターに適用されます。これにより、柔軟なポリシーの適用が可能になり、異なるネームスペースが独自の VCP を使用できる一方で、他のネームスペースは一貫したセットアップのために単一の VCP を共有できます。
VirtualClusterPolicy を活用する管理者の一般的な使用例には、次のようなものがあります:
-
仮想クラスターの運用モード(「共有」または「仮想」など)を定義すること。
-
仮想クラスターとそのワークロードが使用できるリソースの量を効果的に管理するために、リソースクォータと制限範囲をセットアップすること。
-
セキュリティ基準を強制すること、たとえば、ネームスペースの Pod Security Admission (PSA) ラベルを設定することによって。
K3k コントローラーは、VirtualClusterPolicy リソースと対応するネームスペースのバインディングを積極的に監視します。VCP が適用または更新されると、コントローラーは、定義された設定が対象のネームスペース内の関連する仮想クラスターおよびその関連リソースに強制されることを確認します。
VirtualClusterPolicy ができることについての詳細な情報や、さらに多くの例については、VirtualClusterPolicy コンセプト ページを参照してください。すべての仕様フィールドの完全なリストについては、VirtualClusterPolicyのAPIリファレンス を参照してください。
比較とトレードオフ
K3k は、仮想クラスターをデプロイするための 2 つの異なるモードを提供します:shared`と`virtual。各モードにはそれぞれの強みと弱みがあり、最適な選択はユーザーの特定のニーズと優先事項に依存します。情報に基づいた決定を下すための比較は次のとおりです:
| 機能 | 共有モード | 仮想モード |
|---|---|---|
アーキテクチャ |
エージェントレス K3s サーバーと仮想 Kubelet |
フル K3s クラスター(サーバーとエージェント)をポッドとして |
分離 |
ネットワークポリシー |
専用のコントロールプレーンとワーカーノードをポッドとして |
リソースの共有 |
動的なネームスペースレベルのリソースクォータ |
仮想クラスターのポッドに対するリソース制限 |
ネットワーキング |
ホストクラスターの CNI + ホストクラスターの Ingress コントローラー(オプション) |
仮想クラスターの独自のCNI + 仮想クラスターの独自のIngressコントローラー |
ストレージ |
ホストクラスターのストレージ |
独自のストレージプロバイダーを持ち込む |
セキュリティ |
ポッドセキュリティアドミッション(PSA)、ネットワークポリシー |
固有の分離、PSA、ネットワークポリシー |
パフォーマンス |
ホスト上で直接実行されるため、より小さなフットプリントで効率的 |
フルK3sクラスターを実行するための高いオーバーヘッド |
トレードオフ:
-
分離 vs.オーバーヘッド:`shared`モードはオーバーヘッドが低いですが、分離が弱く、`virtual`モードは強い分離を提供しますが、フルK3sクラスターを実行するため、オーバーヘッドが高くなる可能性があります。
-
リソースの共有:`shared`モードは、ネームスペース内で動的なリソースの共有を提供し、効率的ですが予測が難しい場合があります。`virtual`モードは各仮想クラスターに専用のリソースを提供し、より多くの制御を可能にしますが、慎重な計画が必要です。
適切なモードの選択方法についての詳細は、モードの選択を参照してください。