From e2e356964ad1ea4fa67d6f560b7ba43a5e4b5923 Mon Sep 17 00:00:00 2001 From: Balaji Subramaniam Date: Tue, 12 Sep 2017 14:33:12 -0700 Subject: [PATCH] Make CPU manager release allocated CPUs when container enters completed phase. --- pkg/kubelet/kuberuntime/kuberuntime_manager.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/pkg/kubelet/kuberuntime/kuberuntime_manager.go b/pkg/kubelet/kuberuntime/kuberuntime_manager.go index c2bdd238c9b..c160d612250 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 {