4.5. in-tree 모듈을 out-of-tree 모듈로 교체
KMM(커널 모듈 관리)을 사용하여 필요에 따라 커널에 로드하거나 언로드할 수 있는 커널 모듈을 빌드할 수 있습니다. 이러한 모듈은 시스템을 재부팅할 필요 없이 커널의 기능을 확장합니다. 모듈은 기본 제공 또는 동적으로 로드됨으로 구성할 수 있습니다.
동적으로 로드된 모듈에는 in-tree 모듈 및 OOT(out-of-tree) 모듈이 포함됩니다. in-tree 모듈은 Linux 커널 트리 내부에 있습니다. 즉, 이미 커널에 포함되어 있습니다. out-of-tree 모듈은 Linux 커널 트리 외부에 있습니다. 일반적으로 트리에 제공된 커널 모듈의 새 버전을 테스트하거나 비호환성을 처리하는 등 개발 및 테스트 목적으로 작성됩니다.
KMM에 의해 로드된 일부 모듈은 이미 노드에 로드된 in-tree 모듈을 교체할 수 있습니다. 모듈을 로드하기 전에 in-tree 모듈을 언로드하려면 .spec.moduleLoader.container.inTreeModuleToRemove 필드를 설정합니다. 다음은 모든 커널 매핑의 모듈 교체를 위한 예입니다.
# ...
spec:
moduleLoader:
container:
modprobe:
moduleName: mod_a
inTreeModuleToRemove: mod_b
이 예에서 moduleLoader Pod는 inTreeModuleToRemove 을 사용하여 moduleLoader 이미지에서 mod_a 를 로드하기 전에 in-tree 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. 모듈 CR의 예 링크 복사링크가 클립보드에 복사되었습니다!
다음은 주석 처리 Module 예제입니다.
apiVersion: kmm.sigs.x-k8s.io/v1beta1
kind: Module
metadata:
name: <my_kmod>
spec:
moduleLoader:
container:
modprobe:
moduleName: <my_kmod>
dirName: /opt
firmwarePath: /firmware
parameters:
- param=1
kernelMappings:
- 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$'
containerImage: "some.other.registry/org/<my_kmod>:${KERNEL_FULL_VERSION}"
- regexp: '^.+$'
containerImage: "some.registry/org/<my_kmod>:${KERNEL_FULL_VERSION}"
build:
buildArgs:
- name: ARG_NAME
value: <some_value>
secrets:
- name: <some_kubernetes_secret>
baseImageRegistryTLS:
insecure: false
insecureSkipTLSVerify: false
dockerfileConfigMap:
name: <my_kmod_dockerfile>
sign:
certSecret:
name: <cert_secret>
keySecret:
name: <key_secret>
filesToSign:
- /opt/lib/modules/${KERNEL_FULL_VERSION}/<my_kmod>.ko
registryTLS:
insecure: false
insecureSkipTLSVerify: false
serviceAccountName: <sa_module_loader>
devicePlugin:
container:
image: some.registry/org/device-plugin:latest
env:
- name: MY_DEVICE_PLUGIN_ENV_VAR
value: SOME_VALUE
volumeMounts:
- mountPath: /some/mountPath
name: <device_plugin_volume>
volumes:
- name: <device_plugin_volume>
configMap:
name: <some_configmap>
serviceAccountName: <sa_device_plugin>
imageRepoSecret:
name: <secret_name>
selector:
node-role.kubernetes.io/worker: ""
- 1 1 1
- 필수 항목입니다.
- 2
- 선택 사항:
- 3
- 선택 사항:
/firmware/*를 노드의/var/lib/firmware/로 복사합니다. - 4
- 선택 사항:
- 5
- 하나 이상의 커널 항목이 필요합니다.
- 6
- 정규 표현식과 일치하는 커널을 실행하는 각 노드의 KMM은
${KERNEL_FULL_VERSION}을 사용하여containerImage에 지정된 이미지를 실행하는DaemonSet리소스를 커널 버전으로 대체합니다. - 7
- 다른 커널의 경우
my-kmodConfigMap의 Dockerfile을 사용하여 이미지를 빌드합니다. - 8
- 선택 사항:
- 9
- 선택 사항:
some-kubernetes-secret의 값은/run/secrets/some-kubernetes-secret의 빌드 환경에서 가져올 수 있습니다. - 10
- 선택 사항: 이 매개변수를 사용하지 마십시오.
true로 설정하면 빌드에서 일반 HTTP를 사용하여 DockerfileFROM명령에서 이미지를 가져올 수 있습니다. - 11
- 선택 사항: 이 매개변수를 사용하지 마십시오.
true로 설정하면 빌드에서 일반 HTTP를 사용하여 DockerfileFROM명령에서 이미지를 가져올 때 모든 TLS 서버 인증서 검증을 건너뜁니다. - 12
- 필수 항목입니다.
- 13
- 필수: 'cert' 키가 있는 공용 secureboot 키를 보유한 시크릿입니다.
- 14
- 필수: 키가 'key'인 개인 secureboot 키를 보유한 시크릿입니다.
- 15
- 선택 사항: 이 매개변수를 사용하지 마십시오.
true로 설정하면 KMM이 일반 HTTP를 사용하여 컨테이너 이미지가 이미 존재하는지 확인할 수 있습니다. - 16
- 선택 사항: 이 매개변수를 사용하지 마십시오.
true로 설정하면 KMM은 컨테이너 이미지가 이미 존재하는지 확인할 때 모든 TLS 서버 인증서 검증을 건너뜁니다. - 17
- 선택 사항:
- 18
- 선택 사항:
- 19
- 필수: 장치 플러그인 섹션이 있는 경우
- 20
- 선택 사항:
- 21
- 선택 사항:
- 22
- 선택 사항:
- 23
- 선택 사항: 모듈 로더 및 장치 플러그인 이미지를 가져오는 데 사용됩니다.