Documentation ¶
Index ¶
- type ActivePodsFunc
- type DeviceRunContainerOptions
- type Manager
- type ManagerImpl
- func (m *ManagerImpl) Allocate(pod *v1.Pod, container *v1.Container) error
- func (m *ManagerImpl) DeRegisterPlugin(pluginName string)
- func (m *ManagerImpl) GetCapacity() (v1.ResourceList, v1.ResourceList, []string)
- func (m *ManagerImpl) GetDeviceRunContainerOptions(pod *v1.Pod, container *v1.Container) (*DeviceRunContainerOptions, error)
- func (m *ManagerImpl) GetDevices(podUID, containerName string) []*podresourcesapi.ContainerDevices
- func (m *ManagerImpl) GetTopologyHints(pod *v1.Pod, container *v1.Container) map[string][]topologymanager.TopologyHint
- func (m *ManagerImpl) GetWatcherHandler() cache.PluginHandler
- func (m *ManagerImpl) Register(ctx context.Context, r *pluginapi.RegisterRequest) (*pluginapi.Empty, error)
- func (m *ManagerImpl) RegisterPlugin(pluginName string, endpoint string, versions []string) error
- func (m *ManagerImpl) ShouldResetExtendedResourceCapacity() bool
- func (m *ManagerImpl) Start(activePods ActivePodsFunc, sourcesReady config.SourcesReady) error
- func (m *ManagerImpl) Stop() error
- func (m *ManagerImpl) UpdateAllocatedDevices()
- func (m *ManagerImpl) UpdatePluginResources(node *schedulerframework.NodeInfo, attrs *lifecycle.PodAdmitAttributes) error
- func (m *ManagerImpl) ValidatePlugin(pluginName string, endpoint string, versions []string) error
- type ManagerStub
- func (h *ManagerStub) Allocate(pod *v1.Pod, container *v1.Container) error
- func (h *ManagerStub) GetCapacity() (v1.ResourceList, v1.ResourceList, []string)
- func (h *ManagerStub) GetDeviceRunContainerOptions(pod *v1.Pod, container *v1.Container) (*DeviceRunContainerOptions, error)
- func (h *ManagerStub) GetDevices(_, _ string) []*podresourcesapi.ContainerDevices
- func (h *ManagerStub) GetTopologyHints(pod *v1.Pod, container *v1.Container) map[string][]topologymanager.TopologyHint
- func (h *ManagerStub) GetWatcherHandler() cache.PluginHandler
- func (h *ManagerStub) ShouldResetExtendedResourceCapacity() bool
- func (h *ManagerStub) Start(activePods ActivePodsFunc, sourcesReady config.SourcesReady) error
- func (h *ManagerStub) Stop() error
- func (h *ManagerStub) UpdateAllocatedDevices()
- func (h *ManagerStub) UpdatePluginResources(node *schedulerframework.NodeInfo, attrs *lifecycle.PodAdmitAttributes) error
- type PodReusableDevices
- type Stub
- func (m *Stub) Allocate(ctx context.Context, r *pluginapi.AllocateRequest) (*pluginapi.AllocateResponse, error)
- func (m *Stub) GetDevicePluginOptions(ctx context.Context, e *pluginapi.Empty) (*pluginapi.DevicePluginOptions, error)
- func (m *Stub) GetInfo(ctx context.Context, req *watcherapi.InfoRequest) (*watcherapi.PluginInfo, error)
- func (m *Stub) ListAndWatch(e *pluginapi.Empty, s pluginapi.DevicePlugin_ListAndWatchServer) error
- func (m *Stub) NotifyRegistrationStatus(ctx context.Context, status *watcherapi.RegistrationStatus) (*watcherapi.RegistrationStatusResponse, error)
- func (m *Stub) PreStartContainer(ctx context.Context, r *pluginapi.PreStartContainerRequest) (*pluginapi.PreStartContainerResponse, error)
- func (m *Stub) Register(kubeletEndpoint, resourceName string, pluginSockDir string) error
- func (m *Stub) SetAllocFunc(f stubAllocFunc)
- func (m *Stub) Start() error
- func (m *Stub) Stop() error
- func (m *Stub) Update(devs []*pluginapi.Device)
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type ActivePodsFunc ¶
ActivePodsFunc is a function that returns a list of pods to reconcile.
type DeviceRunContainerOptions ¶
type DeviceRunContainerOptions struct { // The environment variables list. Envs []kubecontainer.EnvVar // The mounts for the container. Mounts []kubecontainer.Mount // The host devices mapped into the container. Devices []kubecontainer.DeviceInfo // The Annotations for the container Annotations []kubecontainer.Annotation }
DeviceRunContainerOptions contains the combined container runtime settings to consume its allocated devices.
type Manager ¶
type Manager interface { // Start starts device plugin registration service. Start(activePods ActivePodsFunc, sourcesReady config.SourcesReady) error // Allocate configures and assigns devices to a container in a pod. From // the requested device resources, Allocate will communicate with the // owning device plugin to allow setup procedures to take place, and for // the device plugin to provide runtime settings to use the device // (environment variables, mount points and device files). Allocate(pod *v1.Pod, container *v1.Container) error // UpdatePluginResources updates node resources based on devices already // allocated to pods. The node object is provided for the device manager to // update the node capacity to reflect the currently available devices. UpdatePluginResources(node *schedulerframework.NodeInfo, attrs *lifecycle.PodAdmitAttributes) error // Stop stops the manager. Stop() error // GetDeviceRunContainerOptions checks whether we have cached containerDevices // for the passed-in <pod, container> and returns its DeviceRunContainerOptions // for the found one. An empty struct is returned in case no cached state is found. GetDeviceRunContainerOptions(pod *v1.Pod, container *v1.Container) (*DeviceRunContainerOptions, error) // GetCapacity returns the amount of available device plugin resource capacity, resource allocatable // and inactive device plugin resources previously registered on the node. GetCapacity() (v1.ResourceList, v1.ResourceList, []string) GetWatcherHandler() cache.PluginHandler // GetDevices returns information about the devices assigned to pods and containers GetDevices(podUID, containerName string) []*podresourcesapi.ContainerDevices // ShouldResetExtendedResourceCapacity returns whether the extended resources should be reset or not, // depending on the checkpoint file availability. Absence of the checkpoint file strongly indicates // the node has been recreated. ShouldResetExtendedResourceCapacity() bool // TopologyManager HintProvider provider indicates the Device Manager implements the Topology Manager Interface // and is consulted to make Topology aware resource alignments GetTopologyHints(pod *v1.Pod, container *v1.Container) map[string][]topologymanager.TopologyHint // UpdateAllocatedDevices frees any Devices that are bound to terminated pods. UpdateAllocatedDevices() }
Manager manages all the Device Plugins running on a node.
type ManagerImpl ¶
type ManagerImpl struct {
// contains filtered or unexported fields
}
ManagerImpl is the structure in charge of managing Device Plugins.
func NewManagerImpl ¶
func NewManagerImpl(numaNodeInfo cputopology.NUMANodeInfo, topologyAffinityStore topologymanager.Store) (*ManagerImpl, error)
NewManagerImpl creates a new manager.
func (*ManagerImpl) Allocate ¶
Allocate is the call that you can use to allocate a set of devices from the registered device plugins.
func (*ManagerImpl) DeRegisterPlugin ¶ added in v1.12.0
func (m *ManagerImpl) DeRegisterPlugin(pluginName string)
DeRegisterPlugin deregisters the plugin TODO work on the behavior for deregistering plugins e.g: Should we delete the resource
func (*ManagerImpl) GetCapacity ¶
func (m *ManagerImpl) GetCapacity() (v1.ResourceList, v1.ResourceList, []string)
GetCapacity is expected to be called when Kubelet updates its node status. The first returned variable contains the registered device plugin resource capacity. The second returned variable contains the registered device plugin resource allocatable. The third returned variable contains previously registered resources that are no longer active. Kubelet uses this information to update resource capacity/allocatable in its node status. After the call, device plugin can remove the inactive resources from its internal list as the change is already reflected in Kubelet node status. Note in the special case after Kubelet restarts, device plugin resource capacities can temporarily drop to zero till corresponding device plugins re-register. This is OK because cm.UpdatePluginResource() run during predicate Admit guarantees we adjust nodeinfo capacity for already allocated pods so that they can continue to run. However, new pods requiring device plugin resources will not be scheduled till device plugin re-registers.
func (*ManagerImpl) GetDeviceRunContainerOptions ¶
func (m *ManagerImpl) GetDeviceRunContainerOptions(pod *v1.Pod, container *v1.Container) (*DeviceRunContainerOptions, error)
GetDeviceRunContainerOptions checks whether we have cached containerDevices for the passed-in <pod, container> and returns its DeviceRunContainerOptions for the found one. An empty struct is returned in case no cached state is found.
func (*ManagerImpl) GetDevices ¶ added in v1.13.0
func (m *ManagerImpl) GetDevices(podUID, containerName string) []*podresourcesapi.ContainerDevices
GetDevices returns the devices used by the specified container
func (*ManagerImpl) GetTopologyHints ¶ added in v1.16.0
func (m *ManagerImpl) GetTopologyHints(pod *v1.Pod, container *v1.Container) map[string][]topologymanager.TopologyHint
GetTopologyHints implements the TopologyManager HintProvider Interface which ensures the Device Manager is consulted when Topology Aware Hints for each container are created.
func (*ManagerImpl) GetWatcherHandler ¶ added in v1.12.0
func (m *ManagerImpl) GetWatcherHandler() cache.PluginHandler
GetWatcherHandler returns the plugin handler
func (*ManagerImpl) Register ¶
func (m *ManagerImpl) Register(ctx context.Context, r *pluginapi.RegisterRequest) (*pluginapi.Empty, error)
Register registers a device plugin.
func (*ManagerImpl) RegisterPlugin ¶ added in v1.12.0
func (m *ManagerImpl) RegisterPlugin(pluginName string, endpoint string, versions []string) error
RegisterPlugin starts the endpoint and registers it TODO: Start the endpoint and wait for the First ListAndWatch call
before registering the plugin
func (*ManagerImpl) ShouldResetExtendedResourceCapacity ¶ added in v1.14.9
func (m *ManagerImpl) ShouldResetExtendedResourceCapacity() bool
ShouldResetExtendedResourceCapacity returns whether the extended resources should be zeroed or not, depending on whether the node has been recreated. Absence of the checkpoint file strongly indicates the node has been recreated.
func (*ManagerImpl) Start ¶
func (m *ManagerImpl) Start(activePods ActivePodsFunc, sourcesReady config.SourcesReady) error
Start starts the Device Plugin Manager and start initialization of podDevices and allocatedDevices information from checkpointed state and starts device plugin registration service.
func (*ManagerImpl) Stop ¶
func (m *ManagerImpl) Stop() error
Stop is the function that can stop the gRPC server. Can be called concurrently, more than once, and is safe to call without a prior Start.
func (*ManagerImpl) UpdateAllocatedDevices ¶ added in v1.16.11
func (m *ManagerImpl) UpdateAllocatedDevices()
UpdateAllocatedDevices frees any Devices that are bound to terminated pods.
func (*ManagerImpl) UpdatePluginResources ¶ added in v1.18.0
func (m *ManagerImpl) UpdatePluginResources(node *schedulerframework.NodeInfo, attrs *lifecycle.PodAdmitAttributes) error
UpdatePluginResources updates node resources based on devices already allocated to pods.
func (*ManagerImpl) ValidatePlugin ¶ added in v1.12.0
func (m *ManagerImpl) ValidatePlugin(pluginName string, endpoint string, versions []string) error
ValidatePlugin validates a plugin if the version is correct and the name has the format of an extended resource
type ManagerStub ¶
type ManagerStub struct{}
ManagerStub provides a simple stub implementation for the Device Manager.
func NewManagerStub ¶
func NewManagerStub() (*ManagerStub, error)
NewManagerStub creates a ManagerStub.
func (*ManagerStub) GetCapacity ¶
func (h *ManagerStub) GetCapacity() (v1.ResourceList, v1.ResourceList, []string)
GetCapacity simply returns nil capacity and empty removed resource list.
func (*ManagerStub) GetDeviceRunContainerOptions ¶
func (h *ManagerStub) GetDeviceRunContainerOptions(pod *v1.Pod, container *v1.Container) (*DeviceRunContainerOptions, error)
GetDeviceRunContainerOptions simply returns nil.
func (*ManagerStub) GetDevices ¶ added in v1.13.0
func (h *ManagerStub) GetDevices(_, _ string) []*podresourcesapi.ContainerDevices
GetDevices returns nil
func (*ManagerStub) GetTopologyHints ¶ added in v1.16.0
func (h *ManagerStub) GetTopologyHints(pod *v1.Pod, container *v1.Container) map[string][]topologymanager.TopologyHint
GetTopologyHints returns an empty TopologyHint map
func (*ManagerStub) GetWatcherHandler ¶ added in v1.12.0
func (h *ManagerStub) GetWatcherHandler() cache.PluginHandler
GetWatcherHandler returns plugin watcher interface
func (*ManagerStub) ShouldResetExtendedResourceCapacity ¶ added in v1.14.9
func (h *ManagerStub) ShouldResetExtendedResourceCapacity() bool
ShouldResetExtendedResourceCapacity returns false
func (*ManagerStub) Start ¶
func (h *ManagerStub) Start(activePods ActivePodsFunc, sourcesReady config.SourcesReady) error
Start simply returns nil.
func (*ManagerStub) UpdateAllocatedDevices ¶ added in v1.16.11
func (h *ManagerStub) UpdateAllocatedDevices()
UpdateAllocatedDevices returns nothing
func (*ManagerStub) UpdatePluginResources ¶ added in v1.18.0
func (h *ManagerStub) UpdatePluginResources(node *schedulerframework.NodeInfo, attrs *lifecycle.PodAdmitAttributes) error
UpdatePluginResources simply returns nil.
type PodReusableDevices ¶ added in v1.18.0
PodReusableDevices is a map by pod name of devices to reuse.
type Stub ¶
type Stub struct {
// contains filtered or unexported fields
}
Stub implementation for DevicePlugin.
func NewDevicePluginStub ¶
func NewDevicePluginStub(devs []*pluginapi.Device, socket string, name string, preStartContainerFlag bool) *Stub
NewDevicePluginStub returns an initialized DevicePlugin Stub.
func (*Stub) Allocate ¶
func (m *Stub) Allocate(ctx context.Context, r *pluginapi.AllocateRequest) (*pluginapi.AllocateResponse, error)
Allocate does a mock allocation
func (*Stub) GetDevicePluginOptions ¶
func (m *Stub) GetDevicePluginOptions(ctx context.Context, e *pluginapi.Empty) (*pluginapi.DevicePluginOptions, error)
GetDevicePluginOptions returns DevicePluginOptions settings for the device plugin.
func (*Stub) GetInfo ¶ added in v1.12.0
func (m *Stub) GetInfo(ctx context.Context, req *watcherapi.InfoRequest) (*watcherapi.PluginInfo, error)
GetInfo is the RPC which return pluginInfo
func (*Stub) ListAndWatch ¶
ListAndWatch lists devices and update that list according to the Update call
func (*Stub) NotifyRegistrationStatus ¶ added in v1.12.0
func (m *Stub) NotifyRegistrationStatus(ctx context.Context, status *watcherapi.RegistrationStatus) (*watcherapi.RegistrationStatusResponse, error)
NotifyRegistrationStatus receives the registration notification from watcher
func (*Stub) PreStartContainer ¶
func (m *Stub) PreStartContainer(ctx context.Context, r *pluginapi.PreStartContainerRequest) (*pluginapi.PreStartContainerResponse, error)
PreStartContainer resets the devices received
func (*Stub) Register ¶
Register registers the device plugin for the given resourceName with Kubelet.
func (*Stub) SetAllocFunc ¶
func (m *Stub) SetAllocFunc(f stubAllocFunc)
SetAllocFunc sets allocFunc of the device plugin