diff --git a/pkg/kubelet/cm/devicemanager/manager.go b/pkg/kubelet/cm/devicemanager/manager.go index 9f3c40a8993..ca90b3ca349 100644 --- a/pkg/kubelet/cm/devicemanager/manager.go +++ b/pkg/kubelet/cm/devicemanager/manager.go @@ -833,6 +833,7 @@ func (m *ManagerImpl) allocateContainerResources(pod *v1.Pod, container *v1.Cont podUID := string(pod.UID) contName := container.Name allocatedDevicesUpdated := false + needsUpdateCheckpoint := false // Extended resources are not allowed to be overcommitted. // Since device plugin advertises extended resources, // therefore Requests must be equal to Limits and iterating @@ -858,6 +859,8 @@ func (m *ManagerImpl) allocateContainerResources(pod *v1.Pod, container *v1.Cont continue } + needsUpdateCheckpoint = true + startRPCTime := time.Now() // Manager.Allocate involves RPC calls to device plugin, which // could be heavy-weight. Therefore we want to perform this operation outside @@ -906,8 +909,11 @@ func (m *ManagerImpl) allocateContainerResources(pod *v1.Pod, container *v1.Cont m.mutex.Unlock() } - // Checkpoints device to container allocation information. - return m.writeCheckpoint() + if needsUpdateCheckpoint { + return m.writeCheckpoint() + } + + return nil } // GetDeviceRunContainerOptions checks whether we have cached containerDevices