mirror of
https://github.com/optim-enterprises-bv/kubernetes.git
synced 2025-11-03 03:38:15 +00:00
Merge pull request #128186 from sreeram-venkitesh/117767-in-place-pod-vertical-scaling-version-skew
Updated version skew strategy for InPlacePodVerticalScaling
This commit is contained in:
@@ -5503,6 +5503,10 @@ func ValidatePodResize(newPod, oldPod *core.Pod, opts PodValidationOptions) fiel
|
||||
allErrs = append(allErrs, field.Invalid(specPath, newPod.Status.QOSClass, "Pod QOS Class may not change as a result of resizing"))
|
||||
}
|
||||
|
||||
if !isPodResizeRequestSupported(*oldPod) {
|
||||
allErrs = append(allErrs, field.Forbidden(specPath, "Pod running on node without support for resize"))
|
||||
}
|
||||
|
||||
// Ensure that only CPU and memory resources are mutable.
|
||||
originalCPUMemPodSpec := *newPod.Spec.DeepCopy()
|
||||
var newContainers []core.Container
|
||||
@@ -5543,6 +5547,23 @@ func ValidatePodResize(newPod, oldPod *core.Pod, opts PodValidationOptions) fiel
|
||||
return allErrs
|
||||
}
|
||||
|
||||
// isPodResizeRequestSupported checks whether the pod is running on a node with InPlacePodVerticalScaling enabled.
|
||||
func isPodResizeRequestSupported(pod core.Pod) bool {
|
||||
// TODO: Remove this after GA+3 releases of InPlacePodVerticalScaling
|
||||
// This code handles the version skew as described in the KEP.
|
||||
// For handling version skew we're only allowing to update the Pod's Resources
|
||||
// if the Pod already has Pod.Status.ContainerStatuses[i].Resources. This means
|
||||
// that the apiserver would only allow updates to Pods running on Nodes with
|
||||
// the InPlacePodVerticalScaling feature gate enabled.
|
||||
for _, c := range pod.Status.ContainerStatuses {
|
||||
if c.State.Running != nil {
|
||||
return c.Resources != nil
|
||||
}
|
||||
}
|
||||
// No running containers. We cannot tell whether the node supports resize at this point, so we assume it does.
|
||||
return true
|
||||
}
|
||||
|
||||
// ValidatePodBinding tests if required fields in the pod binding are legal.
|
||||
func ValidatePodBinding(binding *core.Binding) field.ErrorList {
|
||||
allErrs := field.ErrorList{}
|
||||
|
||||
Reference in New Issue
Block a user