# cat /etc/origin/node/node-config.yaml ... kubeletArguments: ... feature-gates: - DevicePlugins=true # systemctl restart atomic-openshift-node
Device Manager is a Technology Preview feature. Technology Preview features are not supported with Red Hat production service level agreements (SLAs), might not be functionally complete, and Red Hat does not recommend to use them for production. These features provide early access to upcoming product features, enabling customers to test functionality and provide feedback during the development process. For more information on Red Hat Technology Preview features support scope, see https://access.redhat.com/support/offerings/techpreview/. |
Device Manager is a Kubelet feature that provides a mechanism for advertising specialized node hardware resources with the help of Kubelet plug-ins known as device plug-ins.
Any vendor can implement a device plug-in to advertise their specialized hardware without requiring any upstream code changes.
Device Manager advertises devices as Extended Resources. User pods can consume devices, advertised by Device Manager, using the same Limit/Request mechanism, which is used for requesting any other Extended Resource.
Upon start, the
device plug-in
registers itself with Device Manager invoking Register
on the
/var/lib/kubelet/device-plugins/kubelet.sock and starts a gRPC service at
/var/lib/kubelet/device-plugins/<plugin>.sock for serving Device Manager
requests.
Device Manager, while processing a new registration request, invokes
ListAndWatch
remote procedure call (RPC) at the device plug-in service. In
response, Device Manger gets a list of Device objects from the plug-in over a
gRPC stream. Device Manager will keep watching on the stream for new updates
from the plug-in. On the plug-in side, the plug-in will also keep the stream
open and whenever there is a change in the state of any of the devices, a new
device list is sent to the Device Manager over the same streaming connection.
While handling a new pod admission request, Kubelet passes requested Extended
Resources
to the Device Manager for device allocation. Device Manager checks in
its database to verify if a corresponding plug-in exists or not. If the plug-in exists
and there are free allocatable devices as well as per local cache, Allocate
RPC is invoked at that particular device plug-in.
Additionally, device plug-ins can also perform several other device-specific operations, such as driver installation, device initialization, and device resets. These functionalities vary from implementation to implementation.
Enable Device Manager to implement a device plug-in to advertise specialized hardware without any upstream code changes.
Enable Device Manager support on the target node or nodes:
# cat /etc/origin/node/node-config.yaml ... kubeletArguments: ... feature-gates: - DevicePlugins=true # systemctl restart atomic-openshift-node
Ensure that Device Manager was actually enabled by confirming that /var/lib/kubelet/device-plugins/kubelet.sock is created on the node. This is the UNIX domain socket on which the Device Manager gRPC server listens for new plug-in registrations. This sock file is created when the Kubelet is started only if Device Manager is enabled.