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가 부팅시 시작되도록합니다.

  1. RHEL 8 시스템을 등록합니다.

    # subscription-manager register
  2. RHEL 8 시스템에 서브스크립션을 연결합니다.

    # subscription-manager attach --auto
  3. 소프트웨어를 빌드하는 데 필요한 소프트웨어를 설치합니다.

    # yum install podman make git -y
  4. systemd 장치 파일을 만들 Ignition 설정 파일을 만듭니다.

    1. Ignition 설정 파일을 호스팅할 디렉터리를 만듭니다.

      $ mkdir kmods; cd kmods
    2. 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 키가 필요하지 않습니다.

  5. 다음 설정을 사용하는 기본 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.yamlworker 노드에 커널 모듈을 배포하도록 설정되어 있습니다. 마스터 노드에 배포하려면 역할을 worker에서 master로 변경하십시오. 이 두 가지 작업을 수행하려면 여러유형의 배포에 서로 다른 파일 이름을 사용하여 전체 프로세스를 반복할 수 있습니다.

  6. kmods-via-containers 소프트웨어를 가져옵니다:

    1. kmods-via-containers 저장소를 복제합니다.

      $ git clone https://github.com/kmods-via-containers/kmods-via-containers
    2. kvc-simple-kmod 저장소를 복제합니다.

      $ git clone https://github.com/kmods-via-containers/kvc-simple-kmod
  7. 모듈 소프트웨어를 가져옵니다. 이 예에서는 kvc-simple-kmod가 사용됩니다.
  8. 이전에 복제된 리포지토리를 사용하여 fakeroot 디렉터리를 만들고 Ignition을 통해 전달할 파일을 이 디렉터리에 배치합니다.

    1. 디렉터리를 만듭니다.

      $ FAKEROOT=$(mktemp -d)
    2. kmod-via-containers 디렉터리로 변경합니다.

      $ cd kmods-via-containers
    3. KVC 프레임워크 인스턴스를 설치합니다.

      $ make install DESTDIR=${FAKEROOT}/usr/local CONFDIR=${FAKEROOT}/etc/
    4. kvc-simple-kmod 디렉터리로 변경합니다.

      $ cd ../kvc-simple-kmod
    5. 인스턴스를 생성합니다.

      $ make install DESTDIR=${FAKEROOT}/usr/local CONFDIR=${FAKEROOT}/etc/
  9. filetranspiler라는 툴 및 종속 소프트웨어를 가져옵니다.

    $ cd .. ; sudo yum install -y python3
    git clone https://github.com/ashcrow/filetranspiler.git
  10. 최종 머신 구성 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
  11. 클러스터가 아직 작동하지 않은 경우 매니페스트 파일을 생성하고 해당 파일을 openshift 디렉터리에 추가합니다. 클러스터가 이미 실행중인 경우 다음과 같이 파일을 적용합니다.

    $ oc create -f 99-simple-kmod.yaml

    노드는 kmods-via-containers@simple-kmod.service 서비스를 시작하고 커널 모듈이 로드됩니다.

  12. 커널 모듈이 로드되었는지 확인하려면 oc debug node / <openshift-node>를 사용 후 chroot / host를 사용하여 노드에 로그인할 수 있습니다. 모듈을 나열하려면 lsmod 명령을 사용합니다.

    $ lsmod | grep simple_

    출력 예

    simple_procfs_kmod     16384  0
    simple_kmod            16384  0