@@ -57,6 +57,7 @@ import (
57
57
"k8s.io/kubernetes/pkg/kubelet/lifecycle"
58
58
"k8s.io/kubernetes/pkg/kubelet/logs"
59
59
"k8s.io/kubernetes/pkg/kubelet/metrics"
60
+ "k8s.io/kubernetes/pkg/kubelet/pleg"
60
61
proberesults "k8s.io/kubernetes/pkg/kubelet/prober/results"
61
62
"k8s.io/kubernetes/pkg/kubelet/runtimeclass"
62
63
"k8s.io/kubernetes/pkg/kubelet/sysctl"
@@ -797,6 +798,22 @@ func (m *kubeGenericRuntimeManager) updatePodContainerResources(pod *v1.Pod, res
797
798
"pod" , format .Pod (pod ), "resourceName" , resourceName )
798
799
return err
799
800
}
801
+ resizeKey := fmt .Sprintf ("%s:resize:%s" , container .Name , resourceName )
802
+ resizeCondition := pleg .RunningContainerWatchCondition (container .Name , func (status * kubecontainer.Status ) bool {
803
+ if status .Resources == nil {
804
+ return false
805
+ }
806
+ switch resourceName {
807
+ case v1 .ResourceMemory :
808
+ return status .Resources .MemoryLimit .Equal (* container .Resources .Limits .Memory ())
809
+ case v1 .ResourceCPU :
810
+ return status .Resources .CPURequest .Equal (* container .Resources .Requests .Cpu ()) &&
811
+ status .Resources .CPULimit .Equal (* container .Resources .Limits .Cpu ())
812
+ default :
813
+ return true // Shouldn't happen.
814
+ }
815
+ })
816
+ m .runtimeHelper .SetPodWatchCondition (pod .UID , resizeKey , resizeCondition )
800
817
// If UpdateContainerResources is error-free, it means desired values for 'resourceName' was accepted by runtime.
801
818
// So we update currentContainerResources for 'resourceName', which is our view of most recently configured resources.
802
819
// Note: We can't rely on GetPodStatus as runtime may lag in actuating the resource values it just accepted.
0 commit comments