4.7. ツリー内モジュールをツリー外モジュールに置き換える


Kernel Module Management (KMM) を使用して、オンデマンドでカーネルにロードまたはアンロードできるカーネルモジュールをビルドできます。これらのモジュールは、システムを再起動することなくカーネルの機能を拡張します。モジュールは、ビルトインまたは動的にロードされるように設定できます。

動的にロードされるモジュールには、ツリー内モジュールとツリー外 (OOT) モジュールが含まれます。ツリー内モジュールは、すでにカーネルの一部として Linux カーネルツリーの内部にあります。ツリー外モジュールは、Linux カーネルツリーの外側にあります。これらは通常、ツリー内で出荷されるカーネルモジュールの新しいバージョンのテストや、非互換性に対処するなど、開発およびテストの目的で作成されます。

KMM によってロードされているモジュールの一部は、ノードにすでにロードされているツリー内モジュールを置き換えることができます。モジュールをロードする前にツリー内モジュールをアンロードするには、.spec.moduleLoader.container.inTreeModulesToRemove フィールドの値をアンロードするモジュールに設定します。以下の例は、すべてのカーネルマッピングのモジュール置換を示しています。

# ...
spec:
  moduleLoader:
    container:
      modprobe:
        moduleName: mod_a

      inTreeModulesToRemove: [mod_a, mod_b]
Copy to Clipboard Toggle word wrap

この例では、moduleLoader Pod は、moduleLoader イメージから mod_a をロードする前に、inTreeModulesToRemove を使用してツリー内の mod_a および mod_b をアンロードします。moduleLoader`pod is terminated and `mod_a がアンロードされても、mod_b は再ロードされません。

以下は、特定のカーネルマッピングのモジュール置換の例です。

# ...
spec:
  moduleLoader:
    container:
      kernelMappings:
        - literal: 6.0.15-300.fc37.x86_64
          containerImage: "some.registry/org/my-kmod:${KERNEL_FULL_VERSION}"
          inTreeModulesToRemove: [<module_name>, <module_name>]
Copy to Clipboard Toggle word wrap

4.7.1. Module CR の例

以下は、アノテーション付きの Module の例です。

apiVersion: kmm.sigs.x-k8s.io/v1beta1
kind: Module
metadata:
  name: <my_kmod>
spec:
  moduleLoader:
    container:
      modprobe:
        moduleName: <my_kmod> 
1

        dirName: /opt 
2

        firmwarePath: /firmware 
3

        parameters:  
4

          - param=1
      kernelMappings:  
5

        - literal: 6.0.15-300.fc37.x86_64
          containerImage: some.registry/org/my-kmod:6.0.15-300.fc37.x86_64
        - regexp: '^.+\fc37\.x86_64$' 
6

          containerImage: "some.other.registry/org/<my_kmod>:${KERNEL_FULL_VERSION}"
        - regexp: '^.+$' 
7

          containerImage: "some.registry/org/<my_kmod>:${KERNEL_FULL_VERSION}"  
8

          build:
            buildArgs:  
9

              - name: ARG_NAME
                value: <some_value>
            secrets:
              - name: <some_kubernetes_secret>  
10

            baseImageRegistryTLS: 
11

              insecure: false
              insecureSkipTLSVerify: false  
12

            dockerfileConfigMap:  
13

              name: <my_kmod_dockerfile>
          sign:
            certSecret:
              name: <cert_secret>  
14

            keySecret:
              name: <key_secret>  
15

            filesToSign:
              - /opt/lib/modules/${KERNEL_FULL_VERSION}/<my_kmod>.ko
          registryTLS: 
16

            insecure: false 
17

            insecureSkipTLSVerify: false
    serviceAccountName: <sa_module_loader>  
18

  devicePlugin:  
19

    container:
      image: some.registry/org/device-plugin:latest  
20

      env:
        - name: MY_DEVICE_PLUGIN_ENV_VAR
          value: SOME_VALUE
      volumeMounts:  
21

        - mountPath: /some/mountPath
          name: <device_plugin_volume>
    volumes:  
22

      - name: <device_plugin_volume>
        configMap:
          name: <some_configmap>
    serviceAccountName: <sa_device_plugin> 
23

  imageRepoSecret:  
24

    name: <secret_name>
  selector:
    node-role.kubernetes.io/worker: ""
Copy to Clipboard Toggle word wrap
1 1 1
必須。
2
任意。
3
オプション: このパスの内容を、kmm-operator-manager-config config map の worker.setFirmwareClassPath (/var/lib/firmware に事前設定) で指定されたパスにコピーします。このアクションは、カーネルモジュールを挿入するために modprobe が呼び出される前に発生します。
4
任意。
5
少なくとも 1 つのカーネル項目が必要です。
6
正規表現に一致するカーネルを実行している各ノードについて、KMM はタグまたはダイジェストが含まれているかどうかを確認します。コンテナーイメージにタグまたはダイジェストを指定していない場合、検証 Webhook はエラーを返し、モジュールを適用しません。
7
その他のカーネルの場合は、my-kmod ConfigMap の Dockerfile を使用してイメージをビルドします。
8
お客様の kmods を保持するコンテナーイメージ。このコンテナーには cp バイナリーが含まれている必要があります。
9
任意。
10
オプション: some-kubernetes-secret の値は、/run/secrets/some-kubernetes-secret のビルド環境から取得できます。
11
このフィールドは効果がありません。kmod イメージをビルドするか、kmod イメージ内で kmod に署名する場合は、信頼できない認証局 (CA) によって署名された証明書を提供するレジストリーから、ベースイメージを時折プルすることを推奨します。KMM がその CA を信頼するには、クラスターの CA バンドルを置き換えて新しい CA も信頼する必要があります。

クラスターの CA バンドルを置き換える方法は、関連情報を参照してください。

12
オプション: このパラメーターは使用しないでください。true に設定すると、プレーン HTTP を使用して Dockerfile FROM 命令でイメージをプルするときに、ビルドで TLS サーバー証明書の検証がスキップされます。
13
必須。
14
必須: 鍵 'cert' を持つ公開セキュアブート鍵を保持するシークレット。
15
必須: 'key' という鍵が含まれるセキュアブート秘密鍵を保持するシークレット。
16
オプション: このパラメーターは使用しないでください。true に設定すると、KMM がプレーン HTTP を使用してコンテナーイメージがすでに存在するかどうかを確認することが許可されます。
17
オプション: このパラメーターは使用しないでください。true に設定すると、コンテナーイメージがすでに存在するかどうかを確認するときに、KMM で TLS サーバー証明書の検証がスキップされます。
18
任意。
19
任意。
20
必須: デバイスプラグインセクションが存在する場合。
21
任意。
22
任意。
23
任意。
24
オプション: モジュールローダーとデバイスプラグインイメージをプルするために使用されます。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat