mirror of https://github.com/k3s-io/k3s
Invalidate resource requirements on extended resources with only request
set.pull/6/head
parent
761fdeacaa
commit
66c1c5e222
|
@ -4366,14 +4366,14 @@ func ValidateResourceRequirements(requirements *core.ResourceRequirements, fldPa
|
||||||
// Check that request <= limit.
|
// Check that request <= limit.
|
||||||
limitQuantity, exists := requirements.Limits[resourceName]
|
limitQuantity, exists := requirements.Limits[resourceName]
|
||||||
if exists {
|
if exists {
|
||||||
// For GPUs, not only requests can't exceed limits, they also can't be lower, i.e. must be equal.
|
// For non overcommitable resources, not only requests can't exceed limits, they also can't be lower, i.e. must be equal.
|
||||||
if quantity.Cmp(limitQuantity) != 0 && !helper.IsOvercommitAllowed(resourceName) {
|
if quantity.Cmp(limitQuantity) != 0 && !helper.IsOvercommitAllowed(resourceName) {
|
||||||
allErrs = append(allErrs, field.Invalid(reqPath, quantity.String(), fmt.Sprintf("must be equal to %s limit", resourceName)))
|
allErrs = append(allErrs, field.Invalid(reqPath, quantity.String(), fmt.Sprintf("must be equal to %s limit", resourceName)))
|
||||||
} else if quantity.Cmp(limitQuantity) > 0 {
|
} else if quantity.Cmp(limitQuantity) > 0 {
|
||||||
allErrs = append(allErrs, field.Invalid(reqPath, quantity.String(), fmt.Sprintf("must be less than or equal to %s limit", resourceName)))
|
allErrs = append(allErrs, field.Invalid(reqPath, quantity.String(), fmt.Sprintf("must be less than or equal to %s limit", resourceName)))
|
||||||
}
|
}
|
||||||
} else if resourceName == core.ResourceNvidiaGPU {
|
} else if !helper.IsOvercommitAllowed(resourceName) {
|
||||||
allErrs = append(allErrs, field.Invalid(reqPath, quantity.String(), fmt.Sprintf("must be equal to %s request", core.ResourceNvidiaGPU)))
|
allErrs = append(allErrs, field.Required(limPath, "Limit must be set for non overcommitable resources"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6848,6 +6848,28 @@ func TestValidatePod(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"invalid extended resource requirement without limit": {
|
||||||
|
expectedError: "Limit must be set",
|
||||||
|
spec: core.Pod{
|
||||||
|
ObjectMeta: metav1.ObjectMeta{Name: "123", Namespace: "ns"},
|
||||||
|
Spec: core.PodSpec{
|
||||||
|
Containers: []core.Container{
|
||||||
|
{
|
||||||
|
Name: "invalid",
|
||||||
|
Image: "image",
|
||||||
|
ImagePullPolicy: "IfNotPresent",
|
||||||
|
Resources: core.ResourceRequirements{
|
||||||
|
Requests: core.ResourceList{
|
||||||
|
core.ResourceName("example.com/a"): resource.MustParse("2"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
RestartPolicy: core.RestartPolicyAlways,
|
||||||
|
DNSPolicy: core.DNSClusterFirst,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
"invalid fractional extended resource in container request": {
|
"invalid fractional extended resource in container request": {
|
||||||
expectedError: "must be an integer",
|
expectedError: "must be an integer",
|
||||||
spec: core.Pod{
|
spec: core.Pod{
|
||||||
|
|
Loading…
Reference in New Issue