4.11. KMM ハブおよびスポーク
ハブおよびスポークシナリオでは、多くのスポーククラスターが中央の強力なハブクラスターに接続されます。Kernel Module Management (KMM) は、ハブおよびスポーク環境で動作するために Red Hat Advanced Cluster Management (RHACM) に依存します。
KMM は、KMM 機能の分離によりハブおよびスポーク環境と互換性があります。ManagedClusterModule
カスタムリソース定義 (CRD) は、既存の Module
CRD をラップし、選択したスポーククラスターに拡張するために提供されています。また、ハブクラスター上でイメージを構築し、モジュールに署名する新しいスタンドアロンコントローラーである KMM-Hub も提供されます。
ハブおよびスポークのセットアップでは、スポークはハブクラスターによって集中管理される、リソースに制約のある集中的なクラスターです。スポークは、リソースを大量に消費する機能を無効にした状態で、KMM の単一クラスターエディションを実行します。KMM をこの環境に適応させるには、ハブが高価なタスクを処理しながら、スポークで実行されるワークロードを最小限に抑える必要があります。
カーネルモジュールイメージの構築と .ko
ファイルへの署名は、ハブ上で実行する必要があります。モジュールローダーおよびデバイスプラグイン DaemonSet
のスケジューリングは、スポーク上でのみ実行できます。
4.11.1. KMM-Hub
KMM プロジェクトは、ハブクラスター専用の KMM エディションである KMM-Hub を提供します。KMM-Hub は、スポーク上で実行しているすべてのカーネルバージョンを監視し、カーネルモジュールを受け取る必要があるクラスター上のノードを決定します。
KMM-Hub は、イメージのビルドや kmod 署名などの計算集約型タスクをすべて実行し、RHACM を介してスポークに転送されるようにトリミングされた Module
を準備します。
KMM-Hub を使用してハブクラスターにカーネルモジュールをロードすることはできません。カーネルモジュールをロードするには、KMM の通常版をインストールします。
関連情報
4.11.2. KMM-Hub のインストール
次のいずれかの方法を使用して、KMM-Hub をインストールできます。
- Operator Lifecycle Manager (OLM) の使用
- KMM リソースの作成
関連情報
4.11.2.1. Operator Lifecycle Manager を使用した KMM-Hub のインストール
OpenShift コンソールの Operators セクションを使用して、KMM-Hub をインストールします。
4.11.2.2. KMM リソースの作成による KMM-Hub のインストール
手順
-
KMM-Hub をプログラムでインストールする場合は、次のリソースを使用して、
Namespace
リソース、OperatorGroup
リソース、およびSubscription
リソースを作成できます。
--- apiVersion: v1 kind: Namespace metadata: name: openshift-kmm-hub --- apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: kernel-module-management-hub namespace: openshift-kmm-hub --- apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: kernel-module-management-hub namespace: openshift-kmm-hub spec: channel: stable installPlanApproval: Automatic name: kernel-module-management-hub source: redhat-operators sourceNamespace: openshift-marketplace
4.11.3. ManagedClusterModule
CRD の使用
ManagedClusterModule
カスタムリソース定義 (CRD) を使用して、スポーククラスターでのカーネルモジュールのデプロイメントを設定します。この CRD はクラスタースコープであり、Module
仕様をラップし、次の追加フィールドを追加します。
apiVersion: hub.kmm.sigs.x-k8s.io/v1beta1 kind: ManagedClusterModule metadata: name: <my-mcm> # No namespace, because this resource is cluster-scoped. spec: moduleSpec: 1 selector: 2 node-wants-my-mcm: 'true' spokeNamespace: <some-namespace> 3 selector: 4 wants-my-mcm: 'true'
ビルドまたは署名の命令が .spec.moduleSpec
に存在すると、その Pod はオペレーターの namespace のハブクラスター上で実行します。
.spec.selector
が 1 つ以上の ManagedCluster
リソースと一致すると、KMM-Hub は対応する namespace に ManifestWork
リソースを作成します。ManifestWork
には、カーネルマッピングは保持されていますが、すべての build
と sign
サブセクションが削除された、トリミングされた Module
リソースが含まれています。タグで終わるイメージ名を含む containerImage
フィールドは、同等のダイジェストに置き換えられます。
4.11.4. スポーク上で KMM の実行
Kernel Module Management (KMM) をスポークにインストールしたら、それ以上の操作は必要ありません。ハブから ManagedClusterModule
オブジェクトを作成して、スポーククラスターにカーネルモジュールをデプロイします。
手順
RHACM Policy
オブジェクトを通じて KMM をスポーククラスターにインストールできます。OperatorHub から KMM をインストールし、軽量スポークモードで実行することに加えて、Policy
は、RHACM エージェントが Module
リソースを管理できるようにするために必要な追加の RBAC を設定します。
次の RHACM ポリシーを使用して、スポーククラスターに KMM をインストールします。
--- apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: name: install-kmm spec: remediationAction: enforce disabled: false policy-templates: - objectDefinition: apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: install-kmm spec: severity: high object-templates: - complianceType: mustonlyhave objectDefinition: apiVersion: v1 kind: Namespace metadata: name: openshift-kmm - complianceType: mustonlyhave objectDefinition: apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: kmm namespace: openshift-kmm spec: upgradeStrategy: Default - complianceType: mustonlyhave objectDefinition: apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: kernel-module-management namespace: openshift-kmm spec: channel: stable config: env: - name: KMM_MANAGED 1 value: "1" installPlanApproval: Automatic name: kernel-module-management source: redhat-operators sourceNamespace: openshift-marketplace - complianceType: mustonlyhave objectDefinition: apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: kmm-module-manager rules: - apiGroups: [kmm.sigs.x-k8s.io] resources: [modules] verbs: [create, delete, get, list, patch, update, watch] - complianceType: mustonlyhave objectDefinition: apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: klusterlet-kmm subjects: - kind: ServiceAccount name: klusterlet-work-sa namespace: open-cluster-management-agent roleRef: kind: ClusterRole name: kmm-module-manager apiGroup: rbac.authorization.k8s.io --- apiVersion: apps.open-cluster-management.io/v1 kind: PlacementRule metadata: name: all-managed-clusters spec: clusterSelector: 2 matchExpressions: [] --- apiVersion: policy.open-cluster-management.io/v1 kind: PlacementBinding metadata: name: install-kmm placementRef: apiGroup: apps.open-cluster-management.io kind: PlacementRule name: all-managed-clusters subjects: - apiGroup: policy.open-cluster-management.io kind: Policy name: install-kmm