mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-04 09:49:50 +00:00
Aggregate errors when checking limitrange
Return all errors at a time when resources violate limitrange to provide users better experience.
This commit is contained in:
parent
0f4fa4ed25
commit
287055930b
@ -29,6 +29,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/fields"
|
"k8s.io/kubernetes/pkg/fields"
|
||||||
"k8s.io/kubernetes/pkg/labels"
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
|
"k8s.io/kubernetes/pkg/util/errors"
|
||||||
"k8s.io/kubernetes/pkg/watch"
|
"k8s.io/kubernetes/pkg/watch"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -300,30 +301,31 @@ func sum(inputs []api.ResourceList) api.ResourceList {
|
|||||||
// the specified LimitRange. The pod may be modified to apply default resource
|
// the specified LimitRange. The pod may be modified to apply default resource
|
||||||
// requirements if not specified, and enumerated on the LimitRange
|
// requirements if not specified, and enumerated on the LimitRange
|
||||||
func PodLimitFunc(limitRange *api.LimitRange, pod *api.Pod) error {
|
func PodLimitFunc(limitRange *api.LimitRange, pod *api.Pod) error {
|
||||||
|
var errs []error
|
||||||
|
|
||||||
defaultResources := defaultContainerResourceRequirements(limitRange)
|
defaultResources := defaultContainerResourceRequirements(limitRange)
|
||||||
mergePodResourceRequirements(pod, &defaultResources)
|
mergePodResourceRequirements(pod, &defaultResources)
|
||||||
|
|
||||||
for i := range limitRange.Spec.Limits {
|
for i := range limitRange.Spec.Limits {
|
||||||
limit := limitRange.Spec.Limits[i]
|
limit := limitRange.Spec.Limits[i]
|
||||||
limitType := limit.Type
|
limitType := limit.Type
|
||||||
|
|
||||||
// enforce container limits
|
// enforce container limits
|
||||||
if limitType == api.LimitTypeContainer {
|
if limitType == api.LimitTypeContainer {
|
||||||
for j := range pod.Spec.Containers {
|
for j := range pod.Spec.Containers {
|
||||||
container := &pod.Spec.Containers[j]
|
container := &pod.Spec.Containers[j]
|
||||||
for k, v := range limit.Min {
|
for k, v := range limit.Min {
|
||||||
if err := minConstraint(limitType, k, v, container.Resources.Requests, container.Resources.Limits); err != nil {
|
if err := minConstraint(limitType, k, v, container.Resources.Requests, container.Resources.Limits); err != nil {
|
||||||
return err
|
errs = append(errs, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for k, v := range limit.Max {
|
for k, v := range limit.Max {
|
||||||
if err := maxConstraint(limitType, k, v, container.Resources.Requests, container.Resources.Limits); err != nil {
|
if err := maxConstraint(limitType, k, v, container.Resources.Requests, container.Resources.Limits); err != nil {
|
||||||
return err
|
errs = append(errs, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for k, v := range limit.MaxLimitRequestRatio {
|
for k, v := range limit.MaxLimitRequestRatio {
|
||||||
if err := limitRequestRatioConstraint(limitType, k, v, container.Resources.Requests, container.Resources.Limits); err != nil {
|
if err := limitRequestRatioConstraint(limitType, k, v, container.Resources.Requests, container.Resources.Limits); err != nil {
|
||||||
return err
|
errs = append(errs, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -341,20 +343,20 @@ func PodLimitFunc(limitRange *api.LimitRange, pod *api.Pod) error {
|
|||||||
podLimits := sum(containerLimits)
|
podLimits := sum(containerLimits)
|
||||||
for k, v := range limit.Min {
|
for k, v := range limit.Min {
|
||||||
if err := minConstraint(limitType, k, v, podRequests, podLimits); err != nil {
|
if err := minConstraint(limitType, k, v, podRequests, podLimits); err != nil {
|
||||||
return err
|
errs = append(errs, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for k, v := range limit.Max {
|
for k, v := range limit.Max {
|
||||||
if err := maxConstraint(limitType, k, v, podRequests, podLimits); err != nil {
|
if err := maxConstraint(limitType, k, v, podRequests, podLimits); err != nil {
|
||||||
return err
|
errs = append(errs, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for k, v := range limit.MaxLimitRequestRatio {
|
for k, v := range limit.MaxLimitRequestRatio {
|
||||||
if err := limitRequestRatioConstraint(limitType, k, v, podRequests, podLimits); err != nil {
|
if err := limitRequestRatioConstraint(limitType, k, v, podRequests, podLimits); err != nil {
|
||||||
return err
|
errs = append(errs, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return errors.NewAggregate(errs)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user