diff --git a/pkg/features/kube_features.go b/pkg/features/kube_features.go index 4de8cf5fcd7..6a69d55601c 100644 --- a/pkg/features/kube_features.go +++ b/pkg/features/kube_features.go @@ -887,6 +887,7 @@ const ( // owner: @haircommander // kep: http://kep.k8s.io/4210 // alpha: v1.29 + // beta: v1.30 // ImageMaximumGCAge enables the Kubelet configuration field of the same name, allowing an admin // to specify the age after which an image will be garbage collected. ImageMaximumGCAge featuregate.Feature = "ImageMaximumGCAge" @@ -1007,6 +1008,8 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS HonorPVReclaimPolicy: {Default: false, PreRelease: featuregate.Alpha}, + ImageMaximumGCAge: {Default: true, PreRelease: featuregate.Beta}, + InTreePluginAWSUnregister: {Default: false, PreRelease: featuregate.Alpha}, InTreePluginAzureDiskUnregister: {Default: false, PreRelease: featuregate.Alpha}, @@ -1163,8 +1166,6 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS LoadBalancerIPMode: {Default: true, PreRelease: featuregate.Beta}, - ImageMaximumGCAge: {Default: false, PreRelease: featuregate.Alpha}, - UserNamespacesPodSecurityStandards: {Default: false, PreRelease: featuregate.Alpha}, SELinuxMount: {Default: false, PreRelease: featuregate.Alpha}, diff --git a/pkg/kubelet/apis/config/validation/validation.go b/pkg/kubelet/apis/config/validation/validation.go index 9db7e17f891..15ee8afaa97 100644 --- a/pkg/kubelet/apis/config/validation/validation.go +++ b/pkg/kubelet/apis/config/validation/validation.go @@ -84,7 +84,7 @@ func ValidateKubeletConfiguration(kc *kubeletconfig.KubeletConfiguration, featur allErrors = append(allErrors, fmt.Errorf("invalid configuration: imageGCLowThresholdPercent (--image-gc-low-threshold) %v must be less than imageGCHighThresholdPercent (--image-gc-high-threshold) %v", kc.ImageGCLowThresholdPercent, kc.ImageGCHighThresholdPercent)) } if kc.ImageMaximumGCAge.Duration != 0 && !localFeatureGate.Enabled(features.ImageMaximumGCAge) { - allErrors = append(allErrors, fmt.Errorf("invalid configuration: ImageMaximumGCAge feature gate is required for Kubelet configuration option ImageMaximumGCAge")) + allErrors = append(allErrors, fmt.Errorf("invalid configuration: ImageMaximumGCAge feature gate is required for Kubelet configuration option imageMaximumGCAge")) } if kc.ImageMaximumGCAge.Duration < 0 { allErrors = append(allErrors, fmt.Errorf("invalid configuration: imageMaximumGCAge %v must not be negative", kc.ImageMaximumGCAge.Duration)) diff --git a/pkg/kubelet/apis/config/validation/validation_test.go b/pkg/kubelet/apis/config/validation/validation_test.go index e50fd8741b5..b34048549ff 100644 --- a/pkg/kubelet/apis/config/validation/validation_test.go +++ b/pkg/kubelet/apis/config/validation/validation_test.go @@ -526,10 +526,11 @@ func TestValidateKubeletConfiguration(t *testing.T) { }, { name: "imageMaximumGCAge should not be specified without feature gate", configure: func(conf *kubeletconfig.KubeletConfiguration) *kubeletconfig.KubeletConfiguration { + conf.FeatureGates = map[string]bool{"ImageMaximumGCAge": false} conf.ImageMaximumGCAge = metav1.Duration{Duration: 1} return conf }, - errMsg: "invalid configuration: ImageMaximumGCAge feature gate is required for Kubelet configuration option ImageMaximumGCAge", + errMsg: "invalid configuration: ImageMaximumGCAge feature gate is required for Kubelet configuration option imageMaximumGCAge", }, { name: "imageMaximumGCAge should not be negative", configure: func(conf *kubeletconfig.KubeletConfiguration) *kubeletconfig.KubeletConfiguration {