Device Manager provides a mechanism for advertising specialized node hardware resources
with the help of plug-ins known as device plug-ins.
You can advertise specialized hardware without requiring any upstream code changes.
|
OpenShift Container Platform supports the device plug-in API, but the device plug-in
Containers are supported by individual vendors.
|
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.