4.16. Day 1 커널 모듈 로드
커널 모듈 관리(KMM)는 일반적으로 Day 2 Operator입니다. 커널 모듈은 RHCOS(Linux) 서버의 초기화를 완료한 후에만 로드됩니다. 그러나 일부 시나리오에서는 커널 모듈을 이전 단계에서 로드해야 합니다. Day 1 기능을 사용하면 Linux systemd
초기화 단계에서 MCO(Machine Config Operator)를 사용하여 커널 모듈을 로드할 수 있습니다.
추가 리소스
4.16.1. Day 1 지원 사용 사례
Day 1 기능은 제한된 수의 사용 사례를 지원합니다. 주요 사용 사례는 NetworkManager 서비스 초기화 전에 OOT(out-of-tree) 커널 모듈을 로드하도록 허용하는 것입니다. initramfs
단계에서 커널 모듈 로드를 지원하지 않습니다.
Day 1 기능에 필요한 조건은 다음과 같습니다.
- 커널 모듈이 커널에 로드되지 않습니다.
- in-tree 커널 모듈은 커널에 로드되지만 OOT 커널 모듈로 언로드하고 교체할 수 있습니다. 즉 in-tree 모듈은 다른 커널 모듈에서 참조되지 않습니다.
- Day 1 기능이 작동하려면 노드에 작동하는 작동 중인 네트워크 인터페이스, 즉 해당 인터페이스의 in-tree 커널 드라이버가 있어야 합니다. OOT 커널 모듈은 기능 네트워크 드라이버를 대체할 네트워크 드라이버일 수 있습니다.
4.16.2. OOT 커널 모듈 로드 흐름
OOT(out-of-tree) 커널 모듈을 로드하면 MCO(Machine Config Operator)가 사용됩니다. 흐름 시퀀스는 다음과 같습니다.
프로세스
-
기존 실행 중인 클러스터에
MachineConfig
리소스를 적용합니다. 업데이트해야 하는 필수 노드를 식별하려면 적절한MachineConfigPool
리소스를 생성해야 합니다. -
MCO는 노드별로 재부팅 노드를 적용합니다. 재부팅된 노드에서 두 개의 새
systemd
서비스pull
service 및load
서비스가 배포됩니다. -
load
서비스는NetworkConfiguration
서비스 전에 실행되도록 구성되어 있습니다. 서비스는 사전 정의된 커널 모듈 이미지를 가져온 다음 해당 이미지를 사용하여 in-tree 모듈을 언로드하고 OOT 커널 모듈을 로드하려고 합니다. -
pull
서비스는 NetworkManager 서비스 후에 실행되도록 구성되어 있습니다. 이 서비스는 사전 구성된 커널 모듈 이미지가 노드의 파일 시스템에 있는지 확인합니다. 이 경우 서비스가 정상적으로 존재하며 서버는 부팅 프로세스를 계속합니다. 그렇지 않으면 이미지를 노드로 가져와서 나중에 노드를 재부팅합니다.
4.16.3. 커널 모듈 이미지
Day 1 기능은 Day 2 KMM 빌드에서 활용하는 동일한 DTK 기반 이미지를 사용합니다. 트리 외부 커널 모듈은 /opt/lib/modules/${kernelVersion}
에 있어야 합니다.
추가 리소스
4.16.4. in-tree 모듈 교체
Day 1 기능은 항상 in-tree 커널 모듈을 OOT 버전으로 대체하려고 합니다. in-tree 커널 모듈이 로드되지 않으면 흐름에 영향을 미치지 않습니다. 서비스는 OOT 커널 모듈을 진행하여 로드합니다.
4.16.5. MCO yaml 생성
KMM은 Day 1 기능에 대한 MCO YAML 매니페스트를 생성하는 API를 제공합니다.
ProduceMachineConfig(machineConfigName, machineConfigPoolRef, kernelModuleImage, kernelModuleName string) (string, error)
반환된 출력은 적용할 MCO YAML 매니페스트의 문자열 표현입니다. 이 YAML을 적용하는 것은 고객에게 달려 있습니다.
매개변수는 다음과 같습니다.
machineConfigName
-
MCO YAML 매니페스트 이름입니다. 이 매개변수는 MCO YAML 매니페스트 메타데이터의
name
매개변수로 설정됩니다. machineConfigPoolRef
-
대상 노드를 식별하는 데 사용되는
MachineConfigPool
이름입니다. kernelModuleImage
- OOT 커널 모듈이 포함된 컨테이너 이미지의 이름입니다.
kernelModuleName
- OOT 커널 모듈의 이름입니다. 이 매개변수는 in-tree 커널 모듈을 언로드하고(커널에 로드된 경우) OOT 커널 모듈을 로드하는 데 사용됩니다.
API는 KMM 소스 코드의 pkg/mcproducer
패키지에 있습니다. KMM Operator는 Day 1 기능을 사용하기 위해 실행할 필요가 없습니다. pkg/mcproducer
패키지를 operator/utility 코드로 가져와서 API를 호출한 다음 생성된 MCO YAML을 클러스터에 적용해야 합니다.
4.16.6. MachineConfigPool
MachineConfigPool
은 적용된 MCO의 영향을 받는 노드 컬렉션을 식별합니다.
kind: MachineConfigPool metadata: name: sfc spec: machineConfigSelector: 1 matchExpressions: - {key: machineconfiguration.openshift.io/role, operator: In, values: [worker, sfc]} nodeSelector: 2 matchLabels: node-role.kubernetes.io/sfc: "" paused: false maxUnavailable: 1
OCP 클러스터에는 사전 정의된 MachineConfigPool
이 있습니다.
-
worker
: 클러스터의 모든 작업자 노드 지정 -
master
: 클러스터의 모든 마스터 노드를 대상으로 지정
마스터 MachineConfigPool
을 대상으로 하도록 다음 MachineConfig
를 정의합니다.
metadata: labels: machineconfiguration.opensfhit.io/role: master
작업자 MachineConfigPool
을 대상으로 하도록 다음 MachineConfig
를 정의합니다.
metadata: labels: machineconfiguration.opensfhit.io/role: worker
추가 리소스