5.5. 장치 플러그인 이해
장치 플러그인은 클러스터 전반에서 하드웨어 장치를 사용할 수 있는 일관되고 이식 가능한 솔루션을 제공합니다. 장치 플러그인은 확장 메커니즘을 통해 이러한 장치에 대한 지원을 제공하며, 이를 통해 이러한 장치를 컨테이너에서 사용할 수 있게 하고, 이러한 장치의 상태 검사를 제공하고, 안전하게 공유합니다.
OpenShift Container Platform은 장치 플러그인 API를 지원하지만, 장치 플러그인 컨테이너는 개별 공급업체에서만 지원됩니다.
장치 플러그인은 kubelet
외부의 노드에서 실행되는 gRPC 서비스로, 특정 하드웨어 리소스를 관리하는 역할을 합니다. 모든 장치 플러그인은 다음 원격 프로시저 호출(RPC)을 지원해야 합니다.
5.5.1. 예시 장치 플러그인 링크 복사링크가 클립보드에 복사되었습니다!
간편한 장치 플러그인 참조 구현을 위해 장치 관리자 코드에 스텁 장치 플러그인이 있습니다: vendor/k8s.io/kubernetes/pkg/kubelet/cm/deviceplugin/device_plugin_stub.go .
5.5.2. 장치 플러그인 배포 방법 링크 복사링크가 클립보드에 복사되었습니다!
- 데몬 세트는 장치 플러그인 배포에 권장되는 방법입니다.
- 시작할 때, 장치 플러그인은 장치 관리자에서 RPC를 제공하기 위해 노드의 /var/lib/kubelet/device-plugin/ 에 UNIX 도메인 소켓을 만들려고 시도합니다.
- 장치 플러그인은 하드웨어 리소스, 호스트 파일 시스템 액세스, 소켓 생성을 관리해야 하므로 권한이 있는 보안 컨텍스트에서 실행해야 합니다.
- 배포 단계에 대한 보다 구체적인 내용은 각 장치 플러그인 구현에서 확인할 수 있습니다.
5.5.3. 장치 관리자 이해 링크 복사링크가 클립보드에 복사되었습니다!
장치 관리자는 장치 플러그인이라고 하는 플러그인의 도움으로 특정 노드 하드웨어 리소스를 광고하는 메커니즘을 제공합니다.
업스트림 코드 변경없이 특수 하드웨어를 공개할 수 있습니다.
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가 호출됩니다.
또한, 장치 플러그인은 드라이버 설치, 장치 초기화, 장치 재설정 등 여러 가지 다른 장치별 작업을 수행할 수도 있습니다. 이러한 기능은 구현마다 다릅니다.
5.5.4. 장치 관리자 활성화 링크 복사링크가 클립보드에 복사되었습니다!
장치 관리자가 업스트림 코드를 변경하지 않고도 특수 하드웨어를 광고하는 장치 플러그인을 구현하도록 합니다.
장치 관리자는 장치 플러그인이라고 하는 플러그인의 도움으로 특정 노드 하드웨어 리소스를 광고하는 메커니즘을 제공합니다.
다음 명령을 입력하여 구성하려는 노드 유형에 대한 정적
MachineConfigPool
CRD와 연관된 레이블을 가져옵니다. 다음 중 하나를 실행합니다.Machine config를 표시합니다:
oc describe machineconfig <name>
# oc describe machineconfig <name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예를 들면 다음과 같습니다.
oc describe machineconfig 00-worker
# oc describe machineconfig 00-worker
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Name: 00-worker Namespace: Labels: machineconfiguration.openshift.io/role=worker
Name: 00-worker Namespace: Labels: machineconfiguration.openshift.io/role=worker
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 장치 관리자에 필요한 라벨입니다.
프로세스
구성 변경을 위한 사용자 정의 리소스 (CR)를 만듭니다.
장치 관리자 CR의 설정 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 장치 관리자를 만듭니다.
oc create -f devicemgr.yaml
$ oc create -f devicemgr.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
kubeletconfig.machineconfiguration.openshift.io/devicemgr created
kubeletconfig.machineconfiguration.openshift.io/devicemgr created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 노드에서 /var/lib/kubelet/device-plugins/kubelet.sock이 작성되었는지 확인하여 장치 관리자가 실제로 사용 가능한지 확인합니다. 이는 Device Manager gRPC 서버가 새로운 플러그인 등록을 수신하는 UNIX 도메인 소켓입니다. 이 소켓 파일은 장치 관리자가 활성화된 경우에만 Kubelet을 시작할 때 생성됩니다.