
- Instead of using cm.capacity field to communicate device plugin resource capacity, this PR changes to use an explicit cm.GetDevicePluginResourceCapacity() function that returns device plugin resource capacity as well as any inactive device plugin resource. Kubelet syncNodeStatus call this function during its periodic run to update node status capacity and allocatable. After this call, device plugin can remove the inactive device plugin resource from its allDevices field as the update is already pushed to API server. - Extends device plugin checkpoint data to record registered resources so that we can finish resource removing even upon kubelet restarts. - Passes sourcesReady from kubelet to device plugin to avoid removing inactive pods during grace period of kubelet restart.
64 lines
1.9 KiB
Go
64 lines
1.9 KiB
Go
/*
|
|
Copyright 2017 The Kubernetes Authors.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
*/
|
|
|
|
package deviceplugin
|
|
|
|
import (
|
|
"k8s.io/api/core/v1"
|
|
pluginapi "k8s.io/kubernetes/pkg/kubelet/apis/deviceplugin/v1alpha"
|
|
"k8s.io/kubernetes/pkg/kubelet/config"
|
|
"k8s.io/kubernetes/pkg/kubelet/lifecycle"
|
|
"k8s.io/kubernetes/plugin/pkg/scheduler/schedulercache"
|
|
)
|
|
|
|
// ManagerStub provides a simple stub implementation for the Device Manager.
|
|
type ManagerStub struct{}
|
|
|
|
// NewManagerStub creates a ManagerStub.
|
|
func NewManagerStub() (*ManagerStub, error) {
|
|
return &ManagerStub{}, nil
|
|
}
|
|
|
|
// Start simply returns nil.
|
|
func (h *ManagerStub) Start(activePods ActivePodsFunc, sourcesReady config.SourcesReady) error {
|
|
return nil
|
|
}
|
|
|
|
// Stop simply returns nil.
|
|
func (h *ManagerStub) Stop() error {
|
|
return nil
|
|
}
|
|
|
|
// Devices returns an empty map.
|
|
func (h *ManagerStub) Devices() map[string][]pluginapi.Device {
|
|
return make(map[string][]pluginapi.Device)
|
|
}
|
|
|
|
// Allocate simply returns nil.
|
|
func (h *ManagerStub) Allocate(node *schedulercache.NodeInfo, attrs *lifecycle.PodAdmitAttributes) error {
|
|
return nil
|
|
}
|
|
|
|
// GetDeviceRunContainerOptions simply returns nil.
|
|
func (h *ManagerStub) GetDeviceRunContainerOptions(pod *v1.Pod, container *v1.Container) *DeviceRunContainerOptions {
|
|
return nil
|
|
}
|
|
|
|
// GetCapacity simply returns nil capacity and empty removed resource list.
|
|
func (h *ManagerStub) GetCapacity() (v1.ResourceList, []string) {
|
|
return nil, []string{}
|
|
}
|