diff --git a/pkg/apis/core/v1/defaults.go b/pkg/apis/core/v1/defaults.go index f4d1a84dd97..4a2b8b399ac 100644 --- a/pkg/apis/core/v1/defaults.go +++ b/pkg/apis/core/v1/defaults.go @@ -22,6 +22,8 @@ import ( v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/intstr" + utilfeature "k8s.io/apiserver/pkg/util/feature" + "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/util/parsers" "k8s.io/utils/pointer" ) @@ -157,6 +159,27 @@ func SetDefaults_Pod(obj *v1.Pod) { } } } + if utilfeature.DefaultFeatureGate.Enabled(features.InPlacePodVerticalScaling) { + // For normal containers, set resize restart policy to default value (RestartNotRequired), if not specified. + resizePolicySpecified := make(map[v1.ResourceName]bool) + for _, p := range obj.Spec.Containers[i].ResizePolicy { + resizePolicySpecified[p.ResourceName] = true + } + if _, found := resizePolicySpecified[v1.ResourceCPU]; !found { + obj.Spec.Containers[i].ResizePolicy = append(obj.Spec.Containers[i].ResizePolicy, + v1.ContainerResizePolicy{ + ResourceName: v1.ResourceCPU, + RestartPolicy: v1.RestartNotRequired, + }) + } + if _, found := resizePolicySpecified[v1.ResourceMemory]; !found { + obj.Spec.Containers[i].ResizePolicy = append(obj.Spec.Containers[i].ResizePolicy, + v1.ContainerResizePolicy{ + ResourceName: v1.ResourceMemory, + RestartPolicy: v1.RestartNotRequired, + }) + } + } } for i := range obj.Spec.InitContainers { if obj.Spec.InitContainers[i].Resources.Limits != nil { diff --git a/pkg/apis/core/v1/defaults_test.go b/pkg/apis/core/v1/defaults_test.go index 5c9688471e3..256e29bf158 100644 --- a/pkg/apis/core/v1/defaults_test.go +++ b/pkg/apis/core/v1/defaults_test.go @@ -322,6 +322,9 @@ func testPodDefaults(t *testing.T, featuresEnabled bool) { ".Spec.Volumes[0].VolumeSource.ScaleIO.StorageMode": `"ThinProvisioned"`, ".Spec.Volumes[0].VolumeSource.Secret.DefaultMode": `420`, } + if featuresEnabled { + expectedDefaults[".Spec.Containers[0].ResizePolicy"] = `[{"resourceName":"cpu","restartPolicy":"RestartNotRequired"},{"resourceName":"memory","restartPolicy":"RestartNotRequired"}]` + } defaults := detectDefaults(t, pod, reflect.ValueOf(pod)) if !reflect.DeepEqual(expectedDefaults, defaults) { t.Errorf("Defaults for PodSpec changed. This can cause spurious restarts of containers on API server upgrade.")