diff --git a/pkg/kubelet/kuberuntime/kuberuntime_manager.go b/pkg/kubelet/kuberuntime/kuberuntime_manager.go index 28b82ac90f5..fff809dae9c 100644 --- a/pkg/kubelet/kuberuntime/kuberuntime_manager.go +++ b/pkg/kubelet/kuberuntime/kuberuntime_manager.go @@ -474,6 +474,17 @@ func (m *kubeGenericRuntimeManager) computePodActions(pod *v1.Pod, podStatus *ku // check the status of containers. for idx, container := range pod.Spec.Containers { containerStatus := podStatus.FindContainerStatusByName(container.Name) + + // Call internal container post-stop lifecycle hook for any non-running container so that any + // allocated cpus are released immediately. If the container is restarted, cpus will be re-allocated + // to it. + if containerStatus != nil && containerStatus.State != kubecontainer.ContainerStateRunning { + if err := m.internalLifecycle.PostStopContainer(containerStatus.ID.ID); err != nil { + glog.Errorf("internal container post-stop lifecycle hook failed for container %v in pod %v with error %v", + container.Name, pod.Name, err) + } + } + // If container does not exist, or is not running, check whether we // need to restart it. if containerStatus == nil || containerStatus.State != kubecontainer.ContainerStateRunning {