4.4. ModuleLoader イメージの使用
カーネルモジュール管理 (KMM) は、専用のモジュールローダーイメージで動作します。これらは、次の要件を満たす必要がある標準の OCI イメージです。
-
.ko
ファイルは/opt/lib/modules/${KERNEL_VERSION}
に配置する必要があります。 -
modprobe
およびsleep
バイナリーは、$PATH
変数で定義する必要があります。
4.4.1. depmod の実行
モジュールローダーイメージに複数のカーネルモジュールが含まれており、モジュールの 1 つが別のモジュールに依存している場合は、ビルドプロセスの最後に depmod
を実行して、依存関係とマップファイルを生成することを推奨します。
kernel-devel
パッケージをダウンロードするには、Red Hat Subscription が必要です。
手順
-
特定のカーネルバージョンの
modules.dep
および.map
ファイルを生成するには、depmod -b/opt ${KERNEL_VERSION}
を実行します。
4.4.1.1. Dockerfile の例
OpenShift Container Platform でイメージをビルドする場合は、Driver Tool Kit (DTK) の使用を検討してください。
詳細は、資格のあるビルドの使用 を参照してください。
apiVersion: v1 kind: ConfigMap metadata: name: kmm-ci-dockerfile data: dockerfile: | ARG DTK_AUTO FROM ${DTK_AUTO} as builder ARG KERNEL_VERSION WORKDIR /usr/src RUN ["git", "clone", "https://github.com/rh-ecosystem-edge/kernel-module-management.git"] WORKDIR /usr/src/kernel-module-management/ci/kmm-kmod RUN KERNEL_SRC_DIR=/lib/modules/${KERNEL_VERSION}/build make all FROM registry.redhat.io/ubi8/ubi-minimal ARG KERNEL_VERSION RUN microdnf install kmod COPY --from=builder /usr/src/kernel-module-management/ci/kmm-kmod/kmm_ci_a.ko /opt/lib/modules/${KERNEL_VERSION}/ COPY --from=builder /usr/src/kernel-module-management/ci/kmm-kmod/kmm_ci_b.ko /opt/lib/modules/${KERNEL_VERSION}/ RUN depmod -b /opt ${KERNEL_VERSION}
関連情報
4.4.2. クラスターでのビルド
KMM は、クラスター内にモジュールローダーイメージを構築できます。次のガイドラインに従ってください。
-
カーネルマッピングの build セクションを使用して
build
命令を提供します。 -
コンテナーイメージの
Dockerfile
をConfigMap
リソースのdockerfile
キーの下にコピーします。 -
ConfigMap
がModule
と同じ namespace にあることを確認します。
KMM は、containerImage
フィールドで指定されたイメージ名が存在するかどうかを確認します。その場合、ビルドはスキップされます。
それ以外の場合、KMM は Build
リソースを作成してイメージをビルドします。イメージがビルドされると、KMM はモジュールの調整を Module
します。以下の例を参照してください。
# ... - regexp: '^.+$' containerImage: "some.registry/org/<my_kmod>:${KERNEL_FULL_VERSION}" build: buildArgs: 1 - name: ARG_NAME value: <some_value> secrets: 2 - name: <some_kubernetes_secret> 3 baseImageRegistryTLS: insecure: false 4 insecureSkipTLSVerify: false 5 dockerfileConfigMap: 6 name: <my_kmod_dockerfile> registryTLS: insecure: false 7 insecureSkipTLSVerify: false 8
- 1
- オプション。
- 2
- オプション。
- 3
/run/secrets/some-kubernetes-secret
としてビルド Pod にマウントされます。- 4
- オプション: このパラメーターは使用しないでください。
true
に設定すると、ビルドはプレーン HTTP を使用して DockerfileFROM
命令でイメージをプルできます。 - 5
- オプション: このパラメーターは使用しないでください。
true
に設定すると、プレーン HTTP を使用して DockerfileFROM
命令でイメージをプルするときに、ビルドは TLS サーバー証明書の検証をスキップします。 - 6
- 必須。
- 7
- オプション: このパラメーターは使用しないでください。
true
に設定すると、KMM はプレーン HTTP を使用してコンテナーイメージがすでに存在するかどうかを確認できます。 - 8
- オプション: このパラメーターは使用しないでください。
true
に設定すると、コンテナーイメージがすでに存在するかどうかを確認するときに、KMM は TLS サーバー証明書の検証をスキップします。
4.4.3. Driver Toolkit の使用
Driver Toolkit (DTK) は、ビルドモジュールローダーイメージをビルドするための便利なベースイメージです。これには、クラスターで現在実行されている OpenShift バージョンのツールとライブラリーが含まれています。
手順
マルチステージの Dockerfile
の最初のステージとして DTK を使用します。
- カーネルモジュールをビルドします。
-
.ko
ファイルをubi-minimal
などの小さなエンドユーザーイメージにコピーします。 クラスター内ビルドで DTK を利用するには、
DTK_AUTO
ビルド引数を使用します。この値は、Build
リソースの作成時に KMM によって自動的に設定されます。以下の例を参照してください。ARG DTK_AUTO FROM ${DTK_AUTO} as builder ARG KERNEL_VERSION WORKDIR /usr/src RUN ["git", "clone", "https://github.com/rh-ecosystem-edge/kernel-module-management.git"] WORKDIR /usr/src/kernel-module-management/ci/kmm-kmod RUN KERNEL_SRC_DIR=/lib/modules/${KERNEL_VERSION}/build make all FROM registry.redhat.io/ubi8/ubi-minimal ARG KERNEL_VERSION RUN microdnf install kmod COPY --from=builder /usr/src/kernel-module-management/ci/kmm-kmod/kmm_ci_a.ko /opt/lib/modules/${KERNEL_VERSION}/ COPY --from=builder /usr/src/kernel-module-management/ci/kmm-kmod/kmm_ci_b.ko /opt/lib/modules/${KERNEL_VERSION}/ RUN depmod -b /opt ${KERNEL_VERSION}
関連情報