4.8. Construction et signature d'une image de conteneur ModuleLoader
Utilisez cette procédure si vous disposez d'un code source et que vous devez d'abord créer votre image.
Le fichier YAML suivant construit une nouvelle image de conteneur en utilisant le code source du référentiel. L'image produite est sauvegardée dans le registre avec un nom temporaire, et cette image temporaire est ensuite signée en utilisant les paramètres de la section sign.
Le nom de l'image temporaire est basé sur le nom de l'image finale et est fixé à <containerImage>:<tag>-<namespace>_<module name>_kmm_unsigned.
Par exemple, en utilisant le fichier YAML suivant, Kernel Module Management (KMM) construit une image nommée example.org/repository/minimal-driver:final-default_example-module_kmm_unsigned contenant la compilation avec des kmods non signés et l'envoie au registre. Il crée ensuite une deuxième image nommée example.org/repository/minimal-driver:final qui contient les kmods signés. C'est cette seconde image qui est chargée par l'objet DaemonSet et qui déploie les kmods sur les nœuds du cluster.
Une fois signée, l'image temporaire peut être supprimée du registre en toute sécurité. Elle sera reconstruite si nécessaire.
Conditions préalables
-
Les secrets
keySecretetcertSecretont été créés.
Procédure
Appliquer le fichier YAML :
--- apiVersion: v1 kind: ConfigMap metadata: name: example-module-dockerfile namespace: default 1 data: Dockerfile: | ARG DTK_AUTO ARG KERNEL_VERSION FROM ${DTK_AUTO} as builder WORKDIR /build/ RUN git clone -b main --single-branch https://github.com/rh-ecosystem-edge/kernel-module-management.git WORKDIR kernel-module-management/ci/kmm-kmod/ RUN make FROM registry.access.redhat.com/ubi8/ubi:latest ARG KERNEL_VERSION RUN yum -y install kmod && yum clean all RUN mkdir -p /opt/lib/modules/${KERNEL_VERSION} COPY --from=builder /build/kernel-module-management/ci/kmm-kmod/*.ko /opt/lib/modules/${KERNEL_VERSION}/ RUN /usr/sbin/depmod -b /opt --- apiVersion: kmm.sigs.x-k8s.io/v1beta1 kind: Module metadata: name: example-module namespace: default 2 spec: moduleLoader: serviceAccountName: default 3 container: modprobe: moduleName: simple_kmod kernelMappings: - regexp: '^.*\.x86_64$' containerImage: < the name of the final driver container to produce> build: dockerfileConfigMap: name: example-module-dockerfile sign: keySecret: name: <private key secret name> certSecret: name: <certificate secret name> filesToSign: - /opt/lib/modules/4.18.0-348.2.1.el8_5.x86_64/kmm_ci_a.ko imageRepoSecret: 4 name: repo-pull-secret selector: # top-level selector kubernetes.io/arch: amd64
- 1 2
namespace- Remplacerdefaultpar un espace de noms valide.- 3
serviceAccountName- Le compte par défautserviceAccountNamene dispose pas des autorisations nécessaires pour exécuter un module privilégié. Pour plus d'informations sur la création d'un compte de service, voir "Création de comptes de service" dans le paragraphe "Ressources supplémentaires" de cette section.- 4
imageRepoSecret- Utilisé commeimagePullSecretsdans l'objetDaemonSetet pour tirer et pousser pour les fonctions de construction et de signature.
Ressources supplémentaires
Pour plus d'informations sur la création d'un compte de service, voir Création de comptes de service.