14.2.2.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
저장소에 대한 포인터를 추가합니다. 여기에는 새로 설치된 커널과 일치해야하므로 새 커널 패키지가 포함되어 있어야합니다.
14.2.2.2.1. MachineConfig
개체를 통한 커널 모듈 프로비저닝
MachineConfig
개체로 커널 모듈 소프트웨어를 패키지하면 설치시 또는 Machine Config Operator를 통해 해당 소프트웨어를 작업자 또는 마스터 노드에 전달할 수 있습니다.
먼저 사용하려는 기본 Ignition 설정을 만듭니다 설치시 Ignition 설정에는 클러스터에서 core
사용자의 authorized_keys
파일에 추가할 ssh 공개 키가 포함됩니다. 나중에 MCO를 통해 MachineConfig
개체를 추가하는 경우 SSH 공개키가 필요하지 않습니다. 두 가지 유형 모두 샘플 simple-kmod 서비스는 kmds-via-containers@simple-kmod.service
가 필요한 systemd 장치 파일을 만듭니다.
systemd 장치는 업스트림 버그에 대한 해결 방법이며 kmods-via-containers@simple-kmod.service
가 부팅시 시작되도록합니다.
RHEL 8 시스템을 등록합니다.
# subscription-manager register
RHEL 8 시스템에 서브스크립션을 연결합니다.
# subscription-manager attach --auto
소프트웨어를 빌드하는 데 필요한 소프트웨어를 설치합니다.
# yum install podman make git -y
systemd 장치 파일을 만들 Ignition 설정 파일을 만듭니다.
Ignition 설정 파일을 호스팅할 디렉터리를 만듭니다.
$ mkdir kmods; cd kmods
systemd 장치 파일을 만들 Ignition 설정 파일을 만듭니다.
$ cat <<EOF > ./baseconfig.ign { "ignition": { "version": "3.1.0" }, "passwd": { "users": [ { "name": "core", "groups": ["sudo"], "sshAuthorizedKeys": [ "ssh-rsa AAAA" ] } ] }, "systemd": { "units": [{ "name": "require-kvc-simple-kmod.service", "enabled": true, "contents": "[Unit]\nRequires=kmods-via-containers@simple-kmod.service\n[Service]\nType=oneshot\nExecStart=/usr/bin/true\n\n[Install]\nWantedBy=multi-user.target" }] } } EOF
참고openshift-install
중에 파일을 사용하려면 공개 SSH 키를baseconfig.ign
파일에 추가해야 합니다. MCO를 통해MachineConfig
개체를 생성하는 경우 공개 SSH 키가 필요하지 않습니다.
다음 설정을 사용하는 기본 MCO YAML 스니펫을 만듭니다.
$ cat <<EOF > mc-base.yaml apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: labels: machineconfiguration.openshift.io/role: worker name: 10-kvc-simple-kmod spec: config: EOF
참고mc-base.yaml
은worker
노드에 커널 모듈을 배포하도록 설정되어 있습니다. 마스터 노드에 배포하려면 역할을worker
에서master
로 변경하십시오. 이 두 가지 작업을 수행하려면 여러유형의 배포에 서로 다른 파일 이름을 사용하여 전체 프로세스를 반복할 수 있습니다.kmods-via-containers
소프트웨어를 가져옵니다:kmods-via-containers
저장소를 복제합니다.$ git clone https://github.com/kmods-via-containers/kmods-via-containers
kvc-simple-kmod
저장소를 복제합니다.$ git clone https://github.com/kmods-via-containers/kvc-simple-kmod
-
모듈 소프트웨어를 가져옵니다. 이 예에서는
kvc-simple-kmod
가 사용됩니다. 이전에 복제된 리포지토리를 사용하여 fakeroot 디렉터리를 만들고 Ignition을 통해 전달할 파일을 이 디렉터리에 배치합니다.
디렉터리를 만듭니다.
$ FAKEROOT=$(mktemp -d)
kmod-via-containers
디렉터리로 변경합니다.$ cd kmods-via-containers
KVC 프레임워크 인스턴스를 설치합니다.
$ make install DESTDIR=${FAKEROOT}/usr/local CONFDIR=${FAKEROOT}/etc/
kvc-simple-kmod
디렉터리로 변경합니다.$ cd ../kvc-simple-kmod
인스턴스를 생성합니다.
$ make install DESTDIR=${FAKEROOT}/usr/local CONFDIR=${FAKEROOT}/etc/
filetranspiler
라는 툴 및 종속 소프트웨어를 가져옵니다.$ cd .. ; sudo yum install -y python3 git clone https://github.com/ashcrow/filetranspiler.git
최종 머신 구성 YAML (
mc.yaml
)을 생성하고 이를 전달하려는 파일과 함께 기본 Ignition 설정, 기본 머신 구성 및 fakeroot 디렉터리를 포함합니다.$ ./filetranspiler/filetranspile -i ./baseconfig.ign \ -f ${FAKEROOT} --format=yaml --dereference-symlinks \ | sed 's/^/ /' | (cat mc-base.yaml -) > 99-simple-kmod.yaml
클러스터가 아직 작동하지 않은 경우 매니페스트 파일을 생성하고 해당 파일을
openshift
디렉터리에 추가합니다. 클러스터가 이미 실행중인 경우 다음과 같이 파일을 적용합니다.$ oc create -f 99-simple-kmod.yaml
노드는
kmods-via-containers@simple-kmod.service
서비스를 시작하고 커널 모듈이 로드됩니다.커널 모듈이 로드되었는지 확인하려면
oc debug node / <openshift-node>
를 사용 후chroot / host를
사용하여 노드에 로그인할 수 있습니다. 모듈을 나열하려면lsmod
명령을 사용합니다.$ lsmod | grep simple_
출력 예
simple_procfs_kmod 16384 0 simple_kmod 16384 0