Merge pull request #96781 from fighterhit/fix-kukelet-device-plugin-bug

Fix: kubelet return error when device plugin sets PreStartRequired true while creating pods with 0 resource
This commit is contained in:
Kubernetes Prow Robot 2021-01-25 17:59:00 -08:00 committed by GitHub
commit 06a7e2bacf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 2 deletions

View File

@ -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)

View File

@ -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) {