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-container
systemd 서비스가 추가되어 로드됩니다.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