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 が必要です。

手順

  1. 特定のカーネルバージョンの 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 命令を提供します。
  • コンテナーイメージの DockerfileConfigMap リソースの dockerfile キーの下にコピーします。
  • ConfigMapModule と同じ 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 を使用して Dockerfile FROM 命令でイメージをプルできます。
5
オプション: このパラメーターは使用しないでください。true に設定すると、プレーン HTTP を使用して Dockerfile FROM 命令でイメージをプルするときに、ビルドは TLS サーバー証明書の検証をスキップします。
6
必須。
7
オプション: このパラメーターは使用しないでください。true に設定すると、KMM はプレーン HTTP を使用してコンテナーイメージがすでに存在するかどうかを確認できます。
8
オプション: このパラメーターは使用しないでください。true に設定すると、コンテナーイメージがすでに存在するかどうかを確認するときに、KMM は TLS サーバー証明書の検証をスキップします。

4.4.3. Driver Toolkit の使用

Driver Toolkit (DTK) は、ビルドモジュールローダーイメージをビルドするための便利なベースイメージです。これには、クラスターで現在実行されている OpenShift バージョンのツールとライブラリーが含まれています。

手順

マルチステージの Dockerfile の最初のステージとして DTK を使用します。

  1. カーネルモジュールをビルドします。
  2. .ko ファイルを ubi-minimal などの小さなエンドユーザーイメージにコピーします。
  3. クラスター内ビルドで 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}