diff --git a/pkg/kubelet/cm/devicemanager/manager.go b/pkg/kubelet/cm/devicemanager/manager.go index 2dffa038a97..445cf34ddb8 100644 --- a/pkg/kubelet/cm/devicemanager/manager.go +++ b/pkg/kubelet/cm/devicemanager/manager.go @@ -940,9 +940,9 @@ func (m *ManagerImpl) GetDeviceRunContainerOptions(pod *v1.Pod, container *v1.Co podUID := string(pod.UID) contName := container.Name needsReAllocate := false - for k := range container.Resources.Limits { + for k, v := range container.Resources.Limits { resource := string(k) - if !m.isDevicePluginResource(resource) { + if !m.isDevicePluginResource(resource) || v.Value() == 0 { continue } err := m.callPreStartContainerIfNeeded(podUID, contName, resource) diff --git a/pkg/kubelet/cm/devicemanager/manager_test.go b/pkg/kubelet/cm/devicemanager/manager_test.go index 5c8c320223e..a607f964689 100644 --- a/pkg/kubelet/cm/devicemanager/manager_test.go +++ b/pkg/kubelet/cm/devicemanager/manager_test.go @@ -976,6 +976,21 @@ func TestDevicePreStartContainer(t *testing.T) { as.Equal(len(runContainerOpts.Devices), len(expectedResp.Devices)) as.Equal(len(runContainerOpts.Mounts), len(expectedResp.Mounts)) as.Equal(len(runContainerOpts.Envs), len(expectedResp.Envs)) + + pod2 := makePod(v1.ResourceList{ + v1.ResourceName(res1.resourceName): *resource.NewQuantity(int64(0), resource.DecimalSI)}) + activePods = append(activePods, pod2) + podsStub.updateActivePods(activePods) + err = testManager.Allocate(pod2, &pod2.Spec.Containers[0]) + as.Nil(err) + _, err = testManager.GetDeviceRunContainerOptions(pod2, &pod2.Spec.Containers[0]) + as.Nil(err) + select { + case <-time.After(time.Millisecond): + t.Log("When pod resourceQuantity is 0, PreStartContainer RPC stub will be skipped") + case <-ch: + break + } } func TestResetExtendedResource(t *testing.T) {