Skip to content

Commit

Permalink
Add device manager lifecycle improvement in the objectives.
Browse files Browse the repository at this point in the history
  • Loading branch information
vikaschoudhary16 committed Aug 14, 2018
1 parent 9bf41e5 commit f0ed7e9
Showing 1 changed file with 7 additions and 0 deletions.
7 changes: 7 additions & 0 deletions keps/sig-node/compute-device-assignment.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ The [Pod API Object](https://github.com/kubernetes/api/blob/master/core/v1/types
## Objectives

* To enable node monitoring agents to determine the set of devices that are in-use, and to obtain metadata about the container/pod using them.
* To enable persistance storage of device assignment information across node reboot/recreate/restart for improving device manager lifecycle.
* To enable consumption of network devices without direct coordination between CNI and Device Plugins.
* To enable pre-assignment of devices at scheduling time.

Expand All @@ -66,6 +67,10 @@ The [Pod API Object](https://github.com/kubernetes/api/blob/master/core/v1/types

![device monitoring architecture](https://user-images.githubusercontent.com/3262098/43926483-44331496-9bdf-11e8-82a0-14b47583b103.png)

### Device Manager Life-Cycle Improvement

* As a cluster operator, I want Kubelet(Device Manager) to be fault tolerant towards any disk failure/corruption while node reboot or recreation. Kubelet(Device Manager) should not be dependent on local checkpoint file for rebuilding device assignment state.

### Network Device Plugins

* As a _Device Vendor_, I manufacture network devices. Even though the Kubelet exposes different interfaces for network setup (CNI), and device lifecycle management (Device Plugin), I can enable consumption of my network devices without requiring communication between my CNI and Device Plugin implementations. This allows me to independently develop, test, and release my component for network setup, and my component for managing network devices without any dependencies between them. My Device Plugin exposes the set of network devices on the node, but does _not_ perform network setup when `Allocate` is called. Instead, when `CNI_ADD` is called on my CNI plugin, it queries the kubelet's `/pods` endpoint to discover the network devices it should perform network setup for:
Expand Down Expand Up @@ -145,6 +150,8 @@ type Manager interface {
GetResourceBindings(pod *v1.Pod) (*v1.ResourceBinding, bool)
}
```
Device Manager will remove checkpointing device assignment details to local file on disk and instead during initialization phase will build local device allocation cache quering pod objects from api-server.

#### Pod Admission and Device Allocation

During Kubelet pod admission, if `ComputeDevices` is found non-empty, specified devices will be allocated otherwise behaviour will remain same as it is today.
Expand Down

0 comments on commit f0ed7e9

Please sign in to comment.