2.10. 포드를 사용하여 외부 리소스에 액세스하기 위한 장치 플러그인 사용


장치 플러그인을 사용하면 사용자 정의 코드를 작성하지 않고도 OpenShift Container Platform 포드에서 특정 장치 유형(GPU, InfiniBand 또는 공급업체별 초기화 및 설정이 필요한 기타 유사한 컴퓨팅 리소스)을 사용할 수 있습니다.

2.10.1. 장치 플러그인 이해

장치 플러그인은 클러스터 전반에서 하드웨어 장치를 사용할 수 있는 일관되고 이식 가능한 솔루션을 제공합니다. 장치 플러그인은 확장 메커니즘을 통해 이러한 장치에 대한 지원을 제공하며, 이를 통해 이러한 장치를 컨테이너에서 사용할 수 있게 하고, 이러한 장치의 상태 검사를 제공하고, 안전하게 공유합니다.

중요

OpenShift Container Platform은 장치 플러그인 API를 지원하지만, 장치 플러그인 컨테이너는 개별 공급업체에서만 지원됩니다.

장치 플러그인은 kubelet 외부의 노드에서 실행되는 gRPC 서비스로, 특정 하드웨어 리소스를 관리하는 역할을 합니다. 모든 장치 플러그인은 다음 원격 프로시저 호출(RPC)을 지원해야 합니다.

service DevicePlugin {
      // GetDevicePluginOptions returns options to be communicated with Device
      // Manager
      rpc GetDevicePluginOptions(Empty) returns (DevicePluginOptions) {}

      // ListAndWatch returns a stream of List of Devices
      // Whenever a Device state change or a Device disappears, ListAndWatch
      // returns the new list
      rpc ListAndWatch(Empty) returns (stream ListAndWatchResponse) {}

      // Allocate is called during container creation so that the Device
      // Plug-in can run device specific operations and instruct Kubelet
      // of the steps to make the Device available in the container
      rpc Allocate(AllocateRequest) returns (AllocateResponse) {}

      // PreStartcontainer is called, if indicated by Device Plug-in during
      // registration phase, before each container start. Device plug-in
      // can run device specific operations such as resetting the device
      // before making devices available to the container
      rpc PreStartcontainer(PreStartcontainerRequest) returns (PreStartcontainerResponse) {}
}
Copy to Clipboard Toggle word wrap

2.10.1.1. 예시 장치 플러그인

참고

간편한 장치 플러그인 참조 구현을 위해 장치 관리자 코드에 스텁 장치 플러그인이 있습니다: vendor/k8s.io/kubernetes/pkg/kubelet/cm/deviceplugin/device_plugin_stub.go .

2.10.1.2. 장치 플러그인 배포 방법

  • 데몬 세트는 장치 플러그인 배포에 권장되는 방법입니다.
  • 시작할 때, 장치 플러그인은 장치 관리자에서 RPC를 제공하기 위해 노드의 /var/lib/kubelet/device-plugin/ 에 UNIX 도메인 소켓을 만들려고 시도합니다.
  • 장치 플러그인은 하드웨어 리소스, 호스트 파일 시스템 액세스, 소켓 생성을 관리해야 하므로 권한이 있는 보안 컨텍스트에서 실행해야 합니다.
  • 배포 단계에 대한 보다 구체적인 내용은 각 장치 플러그인 구현에서 확인할 수 있습니다.

2.10.2. 장치 관리자 이해

장치 관리자는 장치 플러그인이라고 하는 플러그인의 도움으로 특정 노드 하드웨어 리소스를 광고하는 메커니즘을 제공합니다.

업스트림 코드 변경없이 특수 하드웨어를 공개할 수 있습니다.

중요

OpenShift Container Platform은 장치 플러그인 API를 지원하지만, 장치 플러그인 컨테이너는 개별 공급업체에서만 지원됩니다.

장치 관리자는 장치를 확장 리소스(Extended Resources)으로 공개합니다. 사용자 pod는 다른 확장 리소스 를 요청하는 데 사용되는 동일한 제한/요청 메커니즘을 사용하여 장치 관리자에 의해 공개된 장치를 사용할 수 있습니다.

시작할 때, 장치 플러그인은 /var/lib/kubelet/device-plugins/kubelet.sock 에서 Register를 호출하여 장치 관리자에 자체를 등록하고, 장치 관리자 요청을 처리하기 위해 /var/lib/kubelet/device-plugins/<plugin>.sock 에서 gRPC 서비스를 시작합니다.

장치 관리자는 새로운 등록 요청을 처리하는 동안 장치 플러그인 서비스에서 ListAndWatch 원격 프로시저 호출(RPC)을 호출합니다. 이에 대한 응답으로 장치 관리자는 gRPC 스트림을 통해 플러그인으로부터 Device 개체 목록을 가져옵니다. 장치 관리자는 플러그인의 새로운 업데이트가 있는지 스트림을 계속 감시합니다. 플러그인 측에서는 플러그인이 스트림을 열어 두고 장치 상태가 변경될 때마다 동일한 스트리밍 연결을 통해 새 장치 목록이 장치 관리자로 전송됩니다.

새로운 pod 승인 요청을 처리하는 동안 Kubelet은 장치 할당을 위해 요청된 Extended Resources를 장치 관리자에게 전달합니다. 장치 관리자는 데이터베이스를 확인하여 해당 플러그인이 있는지 확인합니다. 플러그인이 존재하고 할당 가능한 여유 장치와 로컬 캐시가 있는 경우, 해당 장치 플러그인에서 Allocate RPC가 호출됩니다.

또한, 장치 플러그인은 드라이버 설치, 장치 초기화, 장치 재설정 등 여러 가지 다른 장치별 작업을 수행할 수도 있습니다. 이러한 기능은 구현마다 다릅니다.

2.10.3. 장치 관리자 활성화

장치 관리자가 업스트림 코드를 변경하지 않고도 특수 하드웨어를 광고하는 장치 플러그인을 구현하도록 합니다.

장치 관리자는 장치 플러그인이라고 하는 플러그인의 도움으로 특정 노드 하드웨어 리소스를 광고하는 메커니즘을 제공합니다.

  1. 다음 명령을 입력하여 구성하려는 노드 유형에 대한 정적 MachineConfigPool CRD와 연관된 레이블을 가져옵니다. 다음 중 하나를 실행합니다.

    1. Machine config를 표시합니다:

      # oc describe machineconfig <name>
      Copy to Clipboard Toggle word wrap

      예를 들면 다음과 같습니다.

      # oc describe machineconfig 00-worker
      Copy to Clipboard Toggle word wrap

      출력 예

      Name:         00-worker
      Namespace:
      Labels:       machineconfiguration.openshift.io/role=worker 
      1
      Copy to Clipboard Toggle word wrap

      1
      장치 관리자에 필요한 라벨입니다.

프로세스

  1. 구성 변경을 위한 사용자 정의 리소스 (CR)를 만듭니다.

    장치 관리자 CR의 설정 예

    apiVersion: machineconfiguration.openshift.io/v1
    kind: KubeletConfig
    metadata:
      name: devicemgr 
    1
    
    spec:
      machineConfigPoolSelector:
        matchLabels:
           machineconfiguration.openshift.io: devicemgr 
    2
    
      kubeletConfig:
        feature-gates:
          - DevicePlugins=true 
    3
    Copy to Clipboard Toggle word wrap

    1
    CR에 이름을 지정합니다.
    2
    Machine Config Pool에서 라벨을 입력합니다.
    3
    DevicePlugins를 'true'로 설정합니다.
  2. 장치 관리자를 만듭니다.

    $ oc create -f devicemgr.yaml
    Copy to Clipboard Toggle word wrap

    출력 예

    kubeletconfig.machineconfiguration.openshift.io/devicemgr created
    Copy to Clipboard Toggle word wrap

  3. 노드에서 /var/lib/kubelet/device-plugins/kubelet.sock이 작성되었는지 확인하여 장치 관리자가 실제로 사용 가능한지 확인합니다. 이는 Device Manager gRPC 서버가 새로운 플러그인 등록을 수신하는 UNIX 도메인 소켓입니다. 이 소켓 파일은 장치 관리자가 활성화된 경우에만 Kubelet을 시작할 때 생성됩니다.
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat