This commit is contained in:
nmreadelf 2026-02-03 16:02:38 -08:00 committed by GitHub
commit 6964aa7d40
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 52 additions and 5 deletions

View file

@ -217,7 +217,7 @@ func setScheduling(a admission.Attributes, pod *api.Pod, runtimeClass *nodev1.Ru
}
func validateOverhead(a admission.Attributes, pod *api.Pod, runtimeClass *nodev1.RuntimeClass) (err error) {
if runtimeClass != nil && runtimeClass.Overhead != nil {
if runtimeClass != nil && runtimeClass.Overhead != nil && len(pod.Spec.Overhead) > 0 {
// If the Overhead set doesn't match what is provided in the RuntimeClass definition, reject the pod
nodeOverhead := &node.Overhead{}
if err := apinodev1.Convert_v1_Overhead_To_node_Overhead(runtimeClass.Overhead, nodeOverhead, nil); err != nil {

View file

@ -37,6 +37,11 @@ import (
"github.com/stretchr/testify/assert"
)
func setEmptyOverhead(pod *core.Pod) *core.Pod {
pod.Spec.Overhead = core.ResourceList{}
return pod
}
func newOverheadValidPod(name string, numContainers int, resources core.ResourceRequirements, setOverhead bool) *core.Pod {
pod := &core.Pod{
ObjectMeta: metav1.ObjectMeta{Name: name, Namespace: "test"},
@ -449,7 +454,7 @@ func TestValidate(t *testing.T) {
expectError bool
}{
{
name: "No Overhead in RunntimeClass, Overhead set in pod",
name: "No Overhead in RuntimeClass, Overhead set in pod",
runtimeClass: &nodev1.RuntimeClass{
ObjectMeta: metav1.ObjectMeta{Name: "foo"},
Handler: "bar",
@ -525,10 +530,10 @@ func TestValidateOverhead(t *testing.T) {
},
},
pod: newOverheadValidPod("no-requirements", 1, core.ResourceRequirements{}, false),
expectError: true,
expectError: false,
},
{
name: "No Overhead in RunntimeClass, Overhead set in pod",
name: "No Overhead in RuntimeClass, Overhead set in pod",
runtimeClass: &nodev1.RuntimeClass{
ObjectMeta: metav1.ObjectMeta{Name: "foo"},
Handler: "bar",
@ -537,11 +542,23 @@ func TestValidateOverhead(t *testing.T) {
expectError: true,
},
{
name: "No RunntimeClass, Overhead set in pod",
name: "No RuntimeClass, Overhead set in pod",
runtimeClass: nil,
pod: newOverheadValidPod("no-resource-req-no-overhead", 1, getGuaranteedRequirements(), true),
expectError: true,
},
{
name: "No RuntimeClass, empty Overhead set in pod",
runtimeClass: nil,
pod: setEmptyOverhead(newOverheadValidPod("no-resource-req-no-overhead", 1, getGuaranteedRequirements(), false)),
expectError: true,
},
{
name: "No RuntimeClass, Overhead is nil in pod",
runtimeClass: nil,
pod: newOverheadValidPod("no-resource-req-no-overhead", 1, getGuaranteedRequirements(), false),
expectError: false,
},
{
name: "Non-matching Overheads",
runtimeClass: &nodev1.RuntimeClass{
@ -557,6 +574,36 @@ func TestValidateOverhead(t *testing.T) {
pod: newOverheadValidPod("no-resource-req-no-overhead", 1, core.ResourceRequirements{}, true),
expectError: true,
},
{
name: "RuntimeClass is set, empty Overhead is in pod",
runtimeClass: &nodev1.RuntimeClass{
ObjectMeta: metav1.ObjectMeta{Name: "foo"},
Handler: "bar",
Overhead: &nodev1.Overhead{
PodFixed: corev1.ResourceList{
corev1.ResourceName(corev1.ResourceCPU): resource.MustParse("10"),
corev1.ResourceName(corev1.ResourceMemory): resource.MustParse("10G"),
},
},
},
pod: setEmptyOverhead(newOverheadValidPod("no-resource-req-no-overhead", 1, core.ResourceRequirements{}, false)),
expectError: true,
},
{
name: "RuntimeClass is set, Overhead is nil in pod",
runtimeClass: &nodev1.RuntimeClass{
ObjectMeta: metav1.ObjectMeta{Name: "foo"},
Handler: "bar",
Overhead: &nodev1.Overhead{
PodFixed: corev1.ResourceList{
corev1.ResourceName(corev1.ResourceCPU): resource.MustParse("10"),
corev1.ResourceName(corev1.ResourceMemory): resource.MustParse("10G"),
},
},
},
pod: newOverheadValidPod("no-resource-req-no-overhead", 1, core.ResourceRequirements{}, false),
expectError: false,
},
{
name: "Matching Overheads",
runtimeClass: &nodev1.RuntimeClass{