4.5. ツリー内モジュールをツリー外モジュールに置き換える
Kernel Module Management (KMM) を使用して、オンデマンドでカーネルにロードまたはアンロードできるカーネルモジュールをビルドできます。これらのモジュールは、システムを再起動することなくカーネルの機能を拡張します。モジュールは、ビルトインまたは動的にロードされるように設定できます。
動的にロードされるモジュールには、ツリー内モジュールとツリー外 (OOT) モジュールが含まれます。ツリー内モジュールは、すでにカーネルの一部として Linux カーネルツリーの内部にあります。ツリー外モジュールは、Linux カーネルツリーの外側にあります。これらは通常、ツリー内で出荷されるカーネルモジュールの新しいバージョンのテストや、非互換性に対処するなど、開発およびテストの目的で作成されます。
KMM によってロードされる一部のモジュールは、ノードにすでにロードされているツリー内モジュールを置き換える可能性があります。モジュールをロードする前にツリー内モジュールをアンロードするには、.spec.moduleLoader.container.inTreeModuleToRemove
フィールドを設定します。以下は、すべてのカーネルマッピングのモジュール置換の例です。
# ... spec: moduleLoader: container: modprobe: moduleName: mod_a inTreeModuleToRemove: mod_b
この例では、moduleLoader
Pod は、moduleLoader
イメージから mod_a
をロードする前に、inTreeModuleToRemove
を使用してツリー内の 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:6.0.15-300.fc37.x86_64 inTreeModuleToRemove: <module_name>
4.5.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}" build: buildArgs: 8 - name: ARG_NAME value: <some_value> secrets: - name: <some_kubernetes_secret> 9 baseImageRegistryTLS: 10 insecure: false insecureSkipTLSVerify: false 11 dockerfileConfigMap: 12 name: <my_kmod_dockerfile> sign: certSecret: name: <cert_secret> 13 keySecret: name: <key_secret> 14 filesToSign: - /opt/lib/modules/${KERNEL_FULL_VERSION}/<my_kmod>.ko registryTLS: 15 insecure: false 16 insecureSkipTLSVerify: false serviceAccountName: <sa_module_loader> 17 devicePlugin: 18 container: image: some.registry/org/device-plugin:latest 19 env: - name: MY_DEVICE_PLUGIN_ENV_VAR value: SOME_VALUE volumeMounts: 20 - mountPath: /some/mountPath name: <device_plugin_volume> volumes: 21 - name: <device_plugin_volume> configMap: name: <some_configmap> serviceAccountName: <sa_device_plugin> 22 imageRepoSecret: 23 name: <secret_name> selector: node-role.kubernetes.io/worker: ""
- 1 1 1
- 必須。
- 2
- オプション。
- 3
- オプション:
/firmware/*
をノード上の/var/lib/firmware/
にコピーします。 - 4
- オプション。
- 5
- 少なくとも 1 つのカーネル項目が必要です。
- 6
- 正規表現に一致するカーネルを実行しているノードごとに、KMM は
${KERNEL_FULL_VERSION}
をカーネルバージョンに置き換えて、containerImage
で指定されたイメージを実行するDaemonSet
リソースを作成します。 - 7
- その他のカーネルの場合は、
my-kmod
ConfigMap の Dockerfile を使用してイメージをビルドします。 - 8
- 任意。
- 9
- オプション:
some-kubernetes-secret
の値は、/run/secrets/some-kubernetes-secret
のビルド環境から取得できます。 - 10
- オプション: このパラメーターは使用しないでください。
true
に設定すると、ビルドはプレーン HTTP を使用して DockerfileFROM
命令のイメージをプルできます。 - 11
- オプション: このパラメーターは使用しないでください。
true
に設定すると、プレーン HTTP を使用して DockerfileFROM
命令でイメージをプルするときに、ビルドは TLS サーバー証明書の検証をスキップします。 - 12
- 必須。
- 13
- 必須: 鍵 'cert' を持つ公開セキュアブート鍵を保持するシークレット。
- 14
- 必須: 'key' という鍵が含まれるセキュアブート秘密鍵を保持するシークレット。
- 15
- オプション: このパラメーターは使用しないでください。
true
に設定すると、KMM はプレーン HTTP を使用してコンテナーイメージがすでに存在するかどうかを確認できます。 - 16
- オプション: このパラメーターは使用しないでください。
true
に設定すると、コンテナーイメージがすでに存在するかどうかを確認するときに、KMM は TLS サーバー証明書の検証をスキップします。 - 17
- 任意。
- 18
- 任意。
- 19
- 必須: デバイスプラグインセクションが存在する場合。
- 20
- 任意。
- 21
- 任意。
- 22
- 任意。
- 23
- オプション: モジュールローダーとデバイスプラグインイメージをプルするために使用されます。