@@ -584,8 +584,10 @@ func (m *kubeGenericRuntimeManager) computePodResizeAction(pod *v1.Pod, containe
584
584
cpuRequest : container .Resources .Requests .Cpu ().MilliValue (),
585
585
}
586
586
587
- // Default current values to the desired values so that a resize isn't triggered for missing values.
588
- currentResources := desiredResources
587
+ currentResources := containerResources {
588
+ // memoryRequest isn't set by the runtime, so default it to the desired.
589
+ memoryRequest : desiredResources .memoryRequest ,
590
+ }
589
591
if kubeContainerStatus .Resources .MemoryLimit != nil {
590
592
currentResources .memoryLimit = kubeContainerStatus .Resources .MemoryLimit .Value ()
591
593
}
@@ -839,16 +841,21 @@ func (m *kubeGenericRuntimeManager) updatePodContainerResources(pod *v1.Pod, res
839
841
}
840
842
switch resourceName {
841
843
case v1 .ResourceMemory :
842
- return status .Resources .MemoryLimit .Equal (* container .Resources .Limits .Memory ())
844
+ actualLimit := nonNilQuantity (status .Resources .MemoryLimit )
845
+ return actualLimit .Equal (* container .Resources .Limits .Memory ())
843
846
case v1 .ResourceCPU :
844
- if ! status .Resources .CPULimit .Equal (* container .Resources .Limits .Cpu ()) {
847
+ actualLimit := nonNilQuantity (status .Resources .CPULimit )
848
+ actualRequest := nonNilQuantity (status .Resources .CPURequest )
849
+ desiredLimit := container .Resources .Limits .Cpu ()
850
+ desiredRequest := container .Resources .Requests .Cpu ()
851
+ if ! actualLimit .Equal (* desiredLimit ) {
845
852
return false // limits don't match
846
- } else if status . Resources . CPURequest . Equal (* container . Resources . Requests . Cpu () ) {
853
+ } else if actualRequest . Equal (* desiredRequest ) {
847
854
return true // requests & limits both match
848
855
}
849
856
// Consider requests equal if both are at or below MinShares.
850
- return status . Resources . CPURequest .MilliValue () <= cm .MinShares &&
851
- container . Resources . Requests . Cpu () .MilliValue () <= cm .MinShares
857
+ return actualRequest .MilliValue () <= cm .MinShares &&
858
+ desiredRequest .MilliValue () <= cm .MinShares
852
859
default :
853
860
return true // Shouldn't happen.
854
861
}
@@ -870,6 +877,15 @@ func (m *kubeGenericRuntimeManager) updatePodContainerResources(pod *v1.Pod, res
870
877
return nil
871
878
}
872
879
880
+ // nonNilQuantity returns a non-nil quantity. If the input is non-nil, it is returned. Otherwise a
881
+ // pointer to the zero value is returned.
882
+ func nonNilQuantity (q * resource.Quantity ) * resource.Quantity {
883
+ if q != nil {
884
+ return q
885
+ }
886
+ return & resource.Quantity {}
887
+ }
888
+
873
889
// computePodActions checks whether the pod spec has changed and returns the changes if true.
874
890
func (m * kubeGenericRuntimeManager ) computePodActions (ctx context.Context , pod * v1.Pod , podStatus * kubecontainer.PodStatus ) podActions {
875
891
klog .V (5 ).InfoS ("Syncing Pod" , "pod" , klog .KObj (pod ))
0 commit comments