Skip to content

Commit 056d73b

Browse files
committed
Add deviceManager in windows container manager
1 parent bc60bda commit 056d73b

File tree

2 files changed

+46
-10
lines changed

2 files changed

+46
-10
lines changed

pkg/kubelet/cm/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ go_library(
156156
],
157157
"@io_bazel_rules_go//go/platform:windows": [
158158
"//pkg/kubelet/cadvisor:go_default_library",
159+
"//pkg/kubelet/cm/devicemanager:go_default_library",
159160
"//staging/src/k8s.io/client-go/tools/record:go_default_library",
160161
"//vendor/k8s.io/utils/mount:go_default_library",
161162
],

pkg/kubelet/cm/container_manager_windows.go

Lines changed: 45 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import (
3636
podresourcesapi "k8s.io/kubernetes/pkg/kubelet/apis/podresources/v1alpha1"
3737
"k8s.io/kubernetes/pkg/kubelet/cadvisor"
3838
"k8s.io/kubernetes/pkg/kubelet/cm/cpumanager"
39+
"k8s.io/kubernetes/pkg/kubelet/cm/devicemanager"
3940
"k8s.io/kubernetes/pkg/kubelet/cm/topologymanager"
4041
"k8s.io/kubernetes/pkg/kubelet/config"
4142
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
@@ -52,6 +53,10 @@ type containerManagerImpl struct {
5253
cadvisorInterface cadvisor.Interface
5354
// Config of this node.
5455
nodeConfig NodeConfig
56+
// Interface for exporting and allocating devices reported by device plugins.
57+
deviceManager devicemanager.Manager
58+
// Interface for Topology resource co-ordination
59+
topologyManager topologymanager.Manager
5560
}
5661

5762
type noopWindowsResourceAllocator struct{}
@@ -79,6 +84,11 @@ func (cm *containerManagerImpl) Start(node *v1.Node,
7984
}
8085
}
8186

87+
// Starts device manager.
88+
if err := cm.deviceManager.Start(devicemanager.ActivePodsFunc(activePods), sourcesReady); err != nil {
89+
return err
90+
}
91+
8292
return nil
8393
}
8494

@@ -93,11 +103,23 @@ func NewContainerManager(mountUtil mount.Interface, cadvisorInterface cadvisor.I
93103
}
94104
capacity := cadvisor.CapacityFromMachineInfo(machineInfo)
95105

96-
return &containerManagerImpl{
106+
cm := &containerManagerImpl{
97107
capacity: capacity,
98108
nodeConfig: nodeConfig,
99109
cadvisorInterface: cadvisorInterface,
100-
}, nil
110+
}
111+
112+
klog.Infof("Creating device plugin manager: %t", devicePluginEnabled)
113+
if devicePluginEnabled {
114+
cm.deviceManager, err = devicemanager.NewManagerImpl(nil, cm.topologyManager)
115+
} else {
116+
cm.deviceManager, err = devicemanager.NewManagerStub()
117+
}
118+
if err != nil {
119+
return nil, err
120+
}
121+
122+
return cm, nil
101123
}
102124

103125
func (cm *containerManagerImpl) SystemCgroupsLimit() v1.ResourceList {
@@ -150,23 +172,36 @@ func (cm *containerManagerImpl) GetCapacity() v1.ResourceList {
150172
}
151173

152174
func (cm *containerManagerImpl) GetPluginRegistrationHandler() cache.PluginHandler {
153-
return nil
175+
return cm.deviceManager.GetWatcherHandler()
154176
}
155177

156178
func (cm *containerManagerImpl) GetDevicePluginResourceCapacity() (v1.ResourceList, v1.ResourceList, []string) {
157-
return nil, nil, []string{}
179+
return cm.deviceManager.GetCapacity()
158180
}
159181

160182
func (cm *containerManagerImpl) NewPodContainerManager() PodContainerManager {
161183
return &podContainerManagerStub{}
162184
}
163185

164186
func (cm *containerManagerImpl) GetResources(pod *v1.Pod, container *v1.Container) (*kubecontainer.RunContainerOptions, error) {
165-
return &kubecontainer.RunContainerOptions{}, nil
187+
opts := &kubecontainer.RunContainerOptions{}
188+
// Allocate should already be called during predicateAdmitHandler.Admit(),
189+
// just try to fetch device runtime information from cached state here
190+
devOpts, err := cm.deviceManager.GetDeviceRunContainerOptions(pod, container)
191+
if err != nil {
192+
return nil, err
193+
} else if devOpts == nil {
194+
return opts, nil
195+
}
196+
opts.Devices = append(opts.Devices, devOpts.Devices...)
197+
opts.Mounts = append(opts.Mounts, devOpts.Mounts...)
198+
opts.Envs = append(opts.Envs, devOpts.Envs...)
199+
opts.Annotations = append(opts.Annotations, devOpts.Annotations...)
200+
return opts, nil
166201
}
167202

168-
func (cm *containerManagerImpl) UpdatePluginResources(*schedulerframework.NodeInfo, *lifecycle.PodAdmitAttributes) error {
169-
return nil
203+
func (cm *containerManagerImpl) UpdatePluginResources(node *schedulerframework.NodeInfo, attrs *lifecycle.PodAdmitAttributes) error {
204+
return cm.deviceManager.UpdatePluginResources(node, attrs)
170205
}
171206

172207
func (cm *containerManagerImpl) InternalContainerLifecycle() InternalContainerLifecycle {
@@ -177,12 +212,12 @@ func (cm *containerManagerImpl) GetPodCgroupRoot() string {
177212
return ""
178213
}
179214

180-
func (cm *containerManagerImpl) GetDevices(_, _ string) []*podresourcesapi.ContainerDevices {
181-
return nil
215+
func (cm *containerManagerImpl) GetDevices(podUID, containerName string) []*podresourcesapi.ContainerDevices {
216+
return cm.deviceManager.GetDevices(podUID, containerName)
182217
}
183218

184219
func (cm *containerManagerImpl) ShouldResetExtendedResourceCapacity() bool {
185-
return false
220+
return cm.deviceManager.ShouldResetExtendedResourceCapacity()
186221
}
187222

188223
func (cm *containerManagerImpl) GetAllocateResourcesPodAdmitHandler() lifecycle.PodAdmitHandler {

0 commit comments

Comments
 (0)