diff --git a/cmd/kube-apiserver/app/plugins.go b/cmd/kube-apiserver/app/plugins.go index 94d1edf770a..3b34695efa7 100644 --- a/cmd/kube-apiserver/app/plugins.go +++ b/cmd/kube-apiserver/app/plugins.go @@ -35,6 +35,5 @@ import ( _ "github.com/GoogleCloudPlatform/kubernetes/plugin/pkg/admission/namespace/autoprovision" _ "github.com/GoogleCloudPlatform/kubernetes/plugin/pkg/admission/namespace/exists" _ "github.com/GoogleCloudPlatform/kubernetes/plugin/pkg/admission/namespace/lifecycle" - _ "github.com/GoogleCloudPlatform/kubernetes/plugin/pkg/admission/resourcedefaults" _ "github.com/GoogleCloudPlatform/kubernetes/plugin/pkg/admission/resourcequota" ) diff --git a/plugin/pkg/admission/resourcedefaults/admission.go b/plugin/pkg/admission/resourcedefaults/admission.go deleted file mode 100644 index 3e3882b07a4..00000000000 --- a/plugin/pkg/admission/resourcedefaults/admission.go +++ /dev/null @@ -1,73 +0,0 @@ -/* -Copyright 2014 Google Inc. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package resourcedefaults - -import ( - "io" - - "github.com/GoogleCloudPlatform/kubernetes/pkg/admission" - "github.com/GoogleCloudPlatform/kubernetes/pkg/api" - "github.com/GoogleCloudPlatform/kubernetes/pkg/api/resource" - "github.com/GoogleCloudPlatform/kubernetes/pkg/client" -) - -func init() { - admission.RegisterPlugin("ResourceDefaults", func(client client.Interface, config io.Reader) (admission.Interface, error) { - return NewResourceDefaults(), nil - }) -} - -const ( - defaultMemory string = "512Mi" - defaultCPU string = "1" -) - -// resourceDefaults is an implementation of admission.Interface which applies default resource limits (cpu/memory) -// It is useful for clusters that do not want to support unlimited usage constraints, but instead supply sensible defaults -type resourceDefaults struct{} - -func (resourceDefaults) Admit(a admission.Attributes) (err error) { - // ignore deletes, only process create and update - if a.GetOperation() == "DELETE" { - return nil - } - - // we only care about pods - if a.GetResource() != "pods" { - return nil - } - - // get the pod, so we can validate each of the containers within have default mem / cpu constraints - obj := a.GetObject() - pod := obj.(*api.Pod) - for index := range pod.Spec.Containers { - if pod.Spec.Containers[index].Resources.Limits == nil { - pod.Spec.Containers[index].Resources.Limits = api.ResourceList{} - } - if pod.Spec.Containers[index].Resources.Limits.Memory().Value() == 0 { - pod.Spec.Containers[index].Resources.Limits[api.ResourceMemory] = resource.MustParse(defaultMemory) - } - if pod.Spec.Containers[index].Resources.Limits.Cpu().Value() == 0 { - pod.Spec.Containers[index].Resources.Limits[api.ResourceCPU] = resource.MustParse(defaultCPU) - } - } - return nil -} - -func NewResourceDefaults() admission.Interface { - return new(resourceDefaults) -} diff --git a/plugin/pkg/admission/resourcedefaults/admission_test.go b/plugin/pkg/admission/resourcedefaults/admission_test.go deleted file mode 100644 index b0a0ddd8039..00000000000 --- a/plugin/pkg/admission/resourcedefaults/admission_test.go +++ /dev/null @@ -1,98 +0,0 @@ -/* -Copyright 2014 Google Inc. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package resourcedefaults - -import ( - "testing" - - "github.com/GoogleCloudPlatform/kubernetes/pkg/admission" - "github.com/GoogleCloudPlatform/kubernetes/pkg/api" - "github.com/GoogleCloudPlatform/kubernetes/pkg/api/resource" -) - -func TestAdmission(t *testing.T) { - namespace := "default" - - handler := NewResourceDefaults() - pod := api.Pod{ - ObjectMeta: api.ObjectMeta{Name: "123", Namespace: "ns"}, - Spec: api.PodSpec{ - Volumes: []api.Volume{{Name: "vol"}}, - Containers: []api.Container{{Name: "ctr", Image: "image"}}, - }, - } - - err := handler.Admit(admission.NewAttributesRecord(&pod, namespace, "pods", "CREATE")) - if err != nil { - t.Errorf("Unexpected error returned from admission handler") - } - - for i := range pod.Spec.Containers { - memory := pod.Spec.Containers[i].Resources.Limits.Memory().String() - cpu := pod.Spec.Containers[i].Resources.Limits.Cpu().String() - if memory != "512Mi" { - t.Errorf("Unexpected memory value %s", memory) - } - if cpu != "1" { - t.Errorf("Unexpected cpu value %s", cpu) - } - } -} - -func TestIgnoreAdmission(t *testing.T) { - namespace := "default" - - handler := NewResourceDefaults() - pod := api.Pod{ - ObjectMeta: api.ObjectMeta{Name: "123", Namespace: "ns"}, - Spec: api.PodSpec{ - Volumes: []api.Volume{{Name: "vol"}}, - Containers: []api.Container{ - { - Name: "ctr", - Image: "image", - Resources: api.ResourceRequirements{ - Limits: getResourceLimits("2", "750Mi"), - }, - }, - }, - }, - } - - err := handler.Admit(admission.NewAttributesRecord(&pod, namespace, "pods", "CREATE")) - if err != nil { - t.Errorf("Unexpected error returned from admission handler") - } - - for i := range pod.Spec.Containers { - memory := pod.Spec.Containers[i].Resources.Limits.Memory().String() - cpu := pod.Spec.Containers[i].Resources.Limits.Cpu().String() - if memory != "750Mi" { - t.Errorf("Unexpected memory value %s", memory) - } - if cpu != "2" { - t.Errorf("Unexpected cpu value %s", cpu) - } - } -} - -func getResourceLimits(cpu, memory string) api.ResourceList { - res := api.ResourceList{} - res[api.ResourceCPU] = resource.MustParse(cpu) - res[api.ResourceMemory] = resource.MustParse(memory) - return res -} diff --git a/plugin/pkg/admission/resourcedefaults/doc.go b/plugin/pkg/admission/resourcedefaults/doc.go deleted file mode 100644 index 38f10213b6f..00000000000 --- a/plugin/pkg/admission/resourcedefaults/doc.go +++ /dev/null @@ -1,24 +0,0 @@ -/* -Copyright 2014 Google Inc. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Package resourcedefaults contains an example plug-in that -// cluster operators can use to prevent unlimited CPU and -// Memory usage for a container. It intercepts all pod -// create and update requests and applies a default -// Memory and CPU quantity if none is supplied. -// This plug-in can be enhanced in the future to make the default value -// configurable via the admission control configuration file. -package resourcedefaults