1.3. 노드에 커널 모듈 추가
대부분의 일반적인 하드웨어의 경우 컴퓨터가 시작되면 Linux 커널에 이러한 하드웨어를 사용하는 데 필요한 장치 드라이버 모듈이 포함됩니다. 그러나 일부 하드웨어의 경우 해당 모듈은 Linux에서 제공되지 않습니다. 따라서 각 호스트 컴퓨터에 대해 이러한 모듈을 제공하는 방법을 찾아야합니다. 이 단계에서는 OpenShift Container Platform 클러스터 노드에 대해 이를 수행하는 방법을 설명합니다.
이 프로세스에 따라 커널 모듈을 처음 배포할 때 현재 커널에서 모듈을 사용할 수 있게 됩니다. 새 커널이 설치되면 kmods-via-containers 소프트웨어가 다시 빌드되고 모듈이 배포되어 새 커널과 호환되는 버전의 모듈을 사용할 수 있습니다.
이 기능이 각 노드에서 모듈을 최신 상태로 유지하는 방법은 다음과 같습니다.
- 새 커널이 설치되었는지 감지하기 위해 부팅시 시작되는 각 노드에 systemd 서비스를 추가합니다.
- 새로운 커널이 감지되면 서비스는 모듈을 다시 빌드하여 커널에 설치합니다.
이 단계에 필요한 소프트웨어에 대한 자세한 내용은 kmods-via-containers github 사이트를 참조하십시오.
다음의 몇 가지 중요 사항에 유의하십시오.
- 이 단계는 기술 프리뷰입니다.
- 
						소프트웨어 툴과 샘플은 공식 RPM 형식으로 제공되지 않으며 현재 이 절차에 명시된 비공식 github.com사이트에서만 구할 수 있습니다.
- 이 절차를 통해 추가할 수 있는 타사 커널 모듈은 Red Hat에서 지원하지 않습니다.
- 
						이 절차에서는 커널 모듈을 빌드하는 데 필요한 소프트웨어가 RHEL 8 컨테이너에 배포됩니다. 노드가 새 커널을 가져 오면 각 노드에서 모듈이 자동으로 다시 빌드됩니다. 따라서 각 노드는 모듈을 다시 빌드하는 데 필요한 커널 및 관련 패키지가 포함된 yum저장소에 액세스해야 합니다. 해당 콘텐츠는 유효한 RHEL 서브스크립션을 통해 효과적으로 사용할 수 있습니다.
1.3.1. 커널 모듈 컨테이너 빌드 및 테스트
커널 모듈을 OpenShift Container Platform 클러스터에 배포하기 전에 별도의 RHEL 시스템에서 프로세스를 테스트할 수 있습니다. 커널 모듈의 소스 코드, KVC 프레임 워크 및 kmod-via-containers 소프트웨어를 수집합니다. 다음으로 모듈을 빌드하고 테스트합니다. RHEL 8 시스템에서 이를 수행하려면 다음 프로세스를 따르십시오.
프로세스
- RHEL 8 시스템을 등록합니다. - subscription-manager register - # subscription-manager register- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- RHEL 8 시스템에 서브스크립션을 연결합니다. - subscription-manager attach --auto - # subscription-manager attach --auto- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 소프트웨어 및 컨테이너를 빌드하는 데 필요한 소프트웨어를 설치합니다. - yum install podman make git -y - # yum install podman make git -y- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- kmod-via-containers저장소를 복제합니다.- 저장소의 폴더를 만듭니다. - mkdir kmods; cd kmods - $ mkdir kmods; cd kmods- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 저장소를 복제합니다. - git clone https://github.com/kmods-via-containers/kmods-via-containers - $ git clone https://github.com/kmods-via-containers/kmods-via-containers- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
- RHEL 8 빌드 호스트에 KVC 프레임 워크 인스턴스를 설치하여 모듈을 테스트합니다. - kmods-via-containersystemd 서비스가 추가되어 로드됩니다.- kmod-via-containers디렉터리로 변경합니다.- cd kmods-via-containers/ - $ cd kmods-via-containers/- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- KVC 프레임워크 인스턴스를 설치합니다. - sudo make install - $ sudo make install- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- systemd 관리자 설정을 다시로드합니다. - sudo systemctl daemon-reload - $ sudo systemctl daemon-reload- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
- 커널 모듈의 소스 코드를 가져옵니다. 소스 코드는 제어할 수 없지만 다른 사람이 제공하는 타사 모듈을 빌드하는 데 사용될 수 있습니다. 다음과 같이 시스템에 복제할 수있는 - kvc-simple-kmod예제에 표시된 내용과 유사한 내용이 필요합니다.- cd .. ; git clone https://github.com/kmods-via-containers/kvc-simple-kmod - $ cd .. ; git clone https://github.com/kmods-via-containers/kvc-simple-kmod- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 설정 파일 - simple-kmod.conf을 편집하고 Dockerfile의 이름을- Dockerfile.rhel로 변경합니다.- kvc-simple-kmod디렉터리로 변경합니다.- cd kvc-simple-kmod - $ cd kvc-simple-kmod- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- Dockerfile의 이름을 바꿉니다. - cat simple-kmod.conf - $ cat simple-kmod.conf- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - Dockerfile 예 - KMOD_CONTAINER_BUILD_CONTEXT="https://github.com/kmods-via-containers/kvc-simple-kmod.git" KMOD_CONTAINER_BUILD_FILE=Dockerfile.rhel KMOD_SOFTWARE_VERSION=dd1a7d4 KMOD_NAMES="simple-kmod simple-procfs-kmod" - KMOD_CONTAINER_BUILD_CONTEXT="https://github.com/kmods-via-containers/kvc-simple-kmod.git" KMOD_CONTAINER_BUILD_FILE=Dockerfile.rhel KMOD_SOFTWARE_VERSION=dd1a7d4 KMOD_NAMES="simple-kmod simple-procfs-kmod"- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
- 커널 모듈의 - kmods-via-containers @.service인스턴스 (이 예제에서는- simple-kmod)를 만듭니다.- sudo make install - $ sudo make install- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- kmods-via-containers @.service인스턴스를 활성화합니다.- sudo kmods-via-containers build simple-kmod $(uname -r) - $ sudo kmods-via-containers build simple-kmod $(uname -r)- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- systemd 서비스를 활성화하고 시작합니다. - sudo systemctl enable kmods-via-containers@simple-kmod.service --now - $ sudo systemctl enable kmods-via-containers@simple-kmod.service --now- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 서비스 상태를 확인합니다. - sudo systemctl status kmods-via-containers@simple-kmod.service - $ sudo systemctl status kmods-via-containers@simple-kmod.service- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 출력 예 - ● kmods-via-containers@simple-kmod.service - Kmods Via Containers - simple-kmod Loaded: loaded (/etc/systemd/system/kmods-via-containers@.service; enabled; vendor preset: disabled) Active: active (exited) since Sun 2020-01-12 23:49:49 EST; 5s ago...- ● kmods-via-containers@simple-kmod.service - Kmods Via Containers - simple-kmod Loaded: loaded (/etc/systemd/system/kmods-via-containers@.service; enabled; vendor preset: disabled) Active: active (exited) since Sun 2020-01-12 23:49:49 EST; 5s ago...- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
- 커널 모듈이 로드되었는지 확인하려면 - lsmod명령을 사용하여 모듈을 나열하십시오.- lsmod | grep simple_ - $ lsmod | grep simple_- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 출력 예 - simple_procfs_kmod 16384 0 simple_kmod 16384 0 - simple_procfs_kmod 16384 0 simple_kmod 16384 0- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 선택사항. 다른 방법을 사용하여 - simple-kmod예제가 작동하는지 확인합니다.- dmesg를 사용하여 커널 링 버퍼에 "Hello world"메시지를 찾으십시오.- dmesg | grep 'Hello world' - $ dmesg | grep 'Hello world'- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 출력 예 - [ 6420.761332] Hello world from simple_kmod. - [ 6420.761332] Hello world from simple_kmod.- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- /proc에서- simple-procfs-kmod의 값을 확인합니다.- sudo cat /proc/simple-procfs-kmod - $ sudo cat /proc/simple-procfs-kmod- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 출력 예 - simple-procfs-kmod number = 0 - simple-procfs-kmod number = 0- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- spkut명령을 실행하여 모듈에 대한 자세한 정보를 가져옵니다.- sudo spkut 44 - $ sudo spkut 44- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 출력 예 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
시스템이 부팅될 때 이 서비스는 새 커널이 실행 중인지를 확인합니다. 새 커널이 있으면 서비스는 새 버전의 커널 모듈을 빌드한 다음 로드합니다. 모듈이 이미 구축 된 경우 이를 로드합니다.
1.3.2. OpenShift Container Platform에 커널 모듈 프로비저닝
OpenShift Container Platform 클러스터를 처음 부팅할 때 커널 모듈을 활성화할 필요가 있는지 여부에 따라 다음 두 가지 방법 중 하나로 커널 모듈을 배포하도록 설정할 수 있습니다.
- 
							클러스터 설치시 커널 모듈 프로비저닝 (day-1): MachineConfig개체를 통해 콘텐츠를 작성하고 매니페스트 파일 세트와 함께openshift-install에 제공할 수 있습니다.
- Machine Config Operator를 통해 커널 모듈 프로비저닝 (day-2): 커널 모듈을 추가하기 위해 클러스터가 가동 될 때까지 대기할 경우 MCO (Machine Config Operator)를 통해 커널 모듈 소프트웨어를 배포할 수 있습니다.
두 경우 모두 새 커널이 감지되면 각 노드에서 커널 소프트웨어 패키지 및 관련 소프트웨어 패키지를 가져올 수 있어야 합니다. 해당 콘텐츠를 가져올 수 있도록 각 노드를 설정할 수있는 몇 가지 방법이 있습니다.
- 각 노드에 RHEL 인타이틀먼트를 제공합니다.
- 
							/ etc / pki / entitlement디렉터리에서 기존 RHEL 호스트의 RHEL 인타이틀먼트를 취득하고 Ignition 설정을 빌드할 때 제공하는 다른 파일과 동일한 위치에 복사합니다.
- 
							Dockerfile에서 커널 및 기타 패키지가 포함된 yum저장소에 대한 포인터를 추가합니다. 여기에는 새로 설치된 커널과 일치해야하므로 새 커널 패키지가 포함되어 있어야합니다.
1.3.2.1. MachineConfig 개체를 통한 커널 모듈 프로비저닝
						MachineConfig 개체로 커널 모듈 소프트웨어를 패키지하면 설치시 또는 Machine Config Operator를 통해 해당 소프트웨어를 작업자 또는 컨트롤 플레인 노드에 전달할 수 있습니다.
					
프로세스
- RHEL 8 시스템을 등록합니다. - subscription-manager register - # subscription-manager register- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- RHEL 8 시스템에 서브스크립션을 연결합니다. - subscription-manager attach --auto - # subscription-manager attach --auto- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 소프트웨어를 빌드하는 데 필요한 소프트웨어를 설치합니다. - yum install podman make git -y - # yum install podman make git -y- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 커널 모듈 및 툴을 호스팅할 디렉터리를 생성합니다. - mkdir kmods; cd kmods - $ mkdir kmods; cd kmods- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- kmods-via-containers소프트웨어를 가져옵니다:- kmods-via-containers저장소를 복제합니다.- git clone https://github.com/kmods-via-containers/kmods-via-containers - $ git clone https://github.com/kmods-via-containers/kmods-via-containers- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- kvc-simple-kmod저장소를 복제합니다.- git clone https://github.com/kmods-via-containers/kvc-simple-kmod - $ git clone https://github.com/kmods-via-containers/kvc-simple-kmod- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
- 
								모듈 소프트웨어를 가져옵니다. 이 예에서는 kvc-simple-kmod가 사용됩니다.
- 이전에 복제된 리포지토리를 사용하여 fakeroot 디렉터리를 만들고 Ignition을 통해 전달할 파일을 이 디렉터리에 배치합니다. - 디렉터리를 만듭니다. - FAKEROOT=$(mktemp -d) - $ FAKEROOT=$(mktemp -d)- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- kmod-via-containers디렉터리로 변경합니다.- cd kmods-via-containers - $ cd kmods-via-containers- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- KVC 프레임워크 인스턴스를 설치합니다. - make install DESTDIR=${FAKEROOT}/usr/local CONFDIR=${FAKEROOT}/etc/- $ make install DESTDIR=${FAKEROOT}/usr/local CONFDIR=${FAKEROOT}/etc/- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- kvc-simple-kmod디렉터리로 변경합니다.- cd ../kvc-simple-kmod - $ cd ../kvc-simple-kmod- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 인스턴스를 생성합니다. - make install DESTDIR=${FAKEROOT}/usr/local CONFDIR=${FAKEROOT}/etc/- $ make install DESTDIR=${FAKEROOT}/usr/local CONFDIR=${FAKEROOT}/etc/- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
- 다음 명령을 실행하여 fakeroot 디렉토리를 복제하고 모든 심볼릭 링크를 대상 복사본으로 교체합니다. - cd .. && rm -rf kmod-tree && cp -Lpr ${FAKEROOT} kmod-tree- $ cd .. && rm -rf kmod-tree && cp -Lpr ${FAKEROOT} kmod-tree- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 커널 모듈 트리를 포함하는 Butane 구성 파일 - 99-simple-kmod.bu를 생성하고 systemd 서비스를 활성화합니다.참고- Butane에 대한 자세한 내용은 “Butane 을 사용하여 머신 구성 생성”을 참조하십시오. - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- 컨트롤 플레인 노드에 배포하려면worker를master로 변경합니다. 컨트롤 플레인 및 작업자 노드에 모두 배포하려면 각 노드 유형에 대해 이러한 지침의 나머지 부분을 한 번씩 수행합니다.
 
- Butane을 사용하여 전달할 파일과 구성이 포함된 머신 구성 YAML 파일 - 99-simple-kmod.yaml을 생성합니다.- butane 99-simple-kmod.bu --files-dir . -o 99-simple-kmod.yaml - $ butane 99-simple-kmod.bu --files-dir . -o 99-simple-kmod.yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 클러스터가 아직 작동하지 않은 경우 매니페스트 파일을 생성하고 해당 파일을 - openshift디렉터리에 추가합니다. 클러스터가 이미 실행중인 경우 다음과 같이 파일을 적용합니다.- oc create -f 99-simple-kmod.yaml - $ oc create -f 99-simple-kmod.yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 노드는 - kmods-via-containers@simple-kmod.service서비스를 시작하고 커널 모듈이 로드됩니다.
- 커널 모듈이 로드되었는지 확인하려면 - oc debug node / <openshift-node>를 사용 후- chroot / host를사용하여 노드에 로그인할 수 있습니다. 모듈을 나열하려면- lsmod명령을 사용합니다.- lsmod | grep simple_ - $ lsmod | grep simple_- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 출력 예 - simple_procfs_kmod 16384 0 simple_kmod 16384 0 - simple_procfs_kmod 16384 0 simple_kmod 16384 0- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow