4.13. Day 1 カーネルモジュールのロード


Kernel Module Management (KMM) は通常、Day 2 Operator です。カーネルモジュールは、Linux (RHCOS) サーバーの初期化が完了しなければロードされません。ただし、シナリオによっては、カーネルモジュールを早い段階でロードする必要があります。Day 1 機能を使用すると、Linux systemd の初期化段階で Machine Config Operator (MCO) を使用してカーネルモジュールをロードできます。

4.13.1. Day 1 のサポート対象ユースケース

Day 1 機能がサポートするユースケースの数は限られています。主なユースケースは、NetworkManager サービスの初期化前にツリー外 (OOT) のカーネルモジュールをロードできるようにすることです。initramfs 段階でのカーネルモジュールのロードはサポートされていません。

Day 1 機能に必要な条件は次のとおりです。

  • カーネルモジュールはカーネルにロードされていない。
  • ツリー内カーネルモジュールがカーネルにロードされているが、アンロードして OOT カーネルモジュールに置き換えることができる。これは、ツリー内モジュールが他のカーネルモジュールから参照されていないことを意味します。
  • Day 1 機能が正常に機能するためには、ノードに機能するネットワークインターフェイス、つまりそのインターフェイス用のツリー内カーネルドライバーが必要。OOT カーネルモジュールは、正常に機能するネットワークドライバーを置き換えるネットワークドライバーにできます。

4.13.2. OOT カーネルモジュールのローディングフロー

ツリー外 (OOT) カーネルモジュールのロードには、Machine Config Operator (MCO) が利用されます。フローシーケンスは次のとおりです。

手順

  1. MachineConfig リソースを実行中の既存クラスターに適用します。更新する必要があるノードを特定するには、適切な MachineConfigPool リソースを作成する必要があります。
  2. MCO はノードごとに再起動を適用します。再起動されたノードには、pull サービスと load サービスという 2 つの新しい systemd サービスがデプロイされます。
  3. load サービスは、NetworkConfiguration サービスの前に実行されるように設定されています。サービスは、事前定義されたカーネルモジュールイメージをプルし、次にそのイメージを使用してツリー内モジュールをアンロードし、OOT カーネルモジュールをロードしようとします。
  4. pull サービスは、NetworkManager サービスの後に実行されるように設定されています。サービスは、事前設定されたカーネルモジュールイメージがノードのファイルシステム上に配置されているか確認します。そのようになっている場合、サービスは正常に存在し、サーバーはブートプロセスを続行します。そうでない場合は、イメージをノードにプルし、その後ノードを再起動します。

4.13.3. カーネルモジュールイメージ

Day 1 機能は、Day 2 KMM ビルドで利用されるのと同じ DTK ベースのイメージを使用します。ツリー外のカーネルモジュールは、/opt/lib/modules/${kernelVersion} の配下にある必要があります。

関連情報

4.13.4. ツリー内モジュールの置き換え

Day 1 機能は常に、ツリー内のカーネルモジュールを OOT バージョンに置き換えようとします。ツリー内カーネルモジュールがロードされていない場合、フローは影響を受けません。サービスは続行し、OOT カーネルモジュールをロードします。

4.13.5. MCO yaml の作成

KMM は、Day 1 機能の MCO YAML マニフェストの作成に使用する API を提供します。

ProduceMachineConfig(machineConfigName, machineConfigPoolRef, kernelModuleImage, kernelModuleName string) (string, error)

返される出力は、適用される MCO YAML マニフェストの文字列表現です。この YAML を適用するかどうかはお客様が判断します。

パラメーターは以下のとおりです。

machineConfigName
MCO YAML マニフェストの名前。このパラメーターは、MCO YAML マニフェストのメタデータの name パラメーターとして設定されます。
machineConfigPoolRef
ターゲットノードを識別するために使用される MachineConfigPool 名。
kernelModuleImage
OOT カーネルモジュールを含むコンテナーイメージの名前。
kernelModuleName
OOT カーネルモジュールの名前。このパラメーターは、ツリー内カーネルモジュール (カーネルにロードされている場合) のアンロードと OOT カーネルモジュールのロードの両方に使用されます。

API は、KMM ソースコードの pkg/mcproducer パッケージの下にあります。Day 1 機能を使用するために KMM Operator を実行する必要はありません。必要なのは、pkg/mcproducer パッケージを Operator/ユーティリティーコードにインポートし、API を呼び出し、生成された MCO YAML をクラスターに適用することだけです。

4.13.6. MachineConfigPool

MachineConfigPool は、適用された MCO の影響を受けるノードのコレクションを識別します。

kind: MachineConfigPool
metadata:
  name: sfc
spec:
  machineConfigSelector: 1
    matchExpressions:
      - {key: machineconfiguration.openshift.io/role, operator: In, values: [worker, sfc]}
  nodeSelector: 2
    matchLabels:
      node-role.kubernetes.io/sfc: ""
  paused: false
  maxUnavailable: 1
1
MachineConfig 内のラベルと一致します。
2
ノード上のラベルと一致します。

OCP クラスターには、事前定義された MachineConfigPool があります。

  • worker: クラスター内のすべてのワーカーノードをターゲットにします
  • master : クラスター内のすべてのマスターノードをターゲットにします

マスター MachineConfigPool をターゲットにするために、次の MachineConfig を定義します。

metadata:
  labels:
    machineconfiguration.opensfhit.io/role: master

ワーカー MachineConfigPool をターゲットにするために、次の MachineConfig を定義します。

metadata:
  labels:
    machineconfiguration.opensfhit.io/role: worker
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.