Skip to content

Commit 2fb37e2

Browse files
authored
Merge pull request kubernetes#127670 from Jefftree/port-kcm-feature
Port all remaining features to versioned
2 parents 8bc073a + d918804 commit 2fb37e2

File tree

7 files changed

+147
-120
lines changed

7 files changed

+147
-120
lines changed

hack/verify-test-featuregates.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ fi
4343

4444

4545
# ensure all generic features are added in alphabetic order
46-
lines=$(git grep 'genericfeatures[.].*:' -- pkg/features/kube_features.go)
46+
lines=$(git grep 'genericfeatures[.].*:' -- pkg/features/versioned_kube_features.go)
4747
sorted_lines=$(echo "$lines" | sort -f)
4848
if [[ "$lines" != "$sorted_lines" ]]; then
4949
echo "Generic features in pkg/features/kube_features.go not sorted" >&2

pkg/features/kube_features.go

Lines changed: 18 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ package features
1818

1919
import (
2020
"k8s.io/apimachinery/pkg/util/runtime"
21-
genericfeatures "k8s.io/apiserver/pkg/features"
2221
utilfeature "k8s.io/apiserver/pkg/util/feature"
2322
clientfeatures "k8s.io/client-go/features"
2423
"k8s.io/component-base/featuregate"
@@ -157,12 +156,6 @@ const (
157156
// Enables kubelet to detect CSI volume condition and send the event of the abnormal volume to the corresponding pod that is using it.
158157
CSIVolumeHealth featuregate.Feature = "CSIVolumeHealth"
159158

160-
// owner: @nckturner
161-
// kep: http://kep.k8s.io/2699
162-
// alpha: v1.27
163-
// Enable webhooks in cloud controller manager
164-
CloudControllerManagerWebhook featuregate.Feature = "CloudControllerManagerWebhook"
165-
166159
// owner: @adrianreber
167160
// kep: https://kep.k8s.io/2008
168161
// alpha: v1.25
@@ -233,7 +226,9 @@ const (
233226

234227
// owner: @HirazawaUi
235228
// kep: http://kep.k8s.io/4004
236-
// Deprecated: v1.29 (default off)
229+
// alpha: v1.29
230+
// Deprecated: v1.31 (default off)
231+
//
237232
// DisableNodeKubeProxyVersion disable the status.nodeInfo.kubeProxyVersion field of v1.Node
238233
DisableNodeKubeProxyVersion featuregate.Feature = "DisableNodeKubeProxyVersion"
239234

@@ -615,6 +610,14 @@ const (
615610
// Allow users to recover from volume expansion failure
616611
RecoverVolumeExpansionFailure featuregate.Feature = "RecoverVolumeExpansionFailure"
617612

613+
// owner: @AkihiroSuda
614+
// kep: https://kep.k8s.io/3857
615+
// alpha: v1.30
616+
// beta: v1.31
617+
//
618+
// Allows recursive read-only mounts.
619+
RecursiveReadOnlyMounts featuregate.Feature = "RecursiveReadOnlyMounts"
620+
618621
// owner: @adrianmoisey
619622
// kep: https://kep.k8s.io/4427
620623
// alpha: v1.32
@@ -759,6 +762,12 @@ const (
759762
// Enables a StatefulSet to start from an arbitrary non zero ordinal
760763
StatefulSetStartOrdinal featuregate.Feature = "StatefulSetStartOrdinal"
761764

765+
// owner: @ahutsunshine
766+
// beta: v1.30
767+
//
768+
// Allows namespace indexer for namespace scope resources in apiserver cache to accelerate list operations.
769+
StorageNamespaceIndex featuregate.Feature = "StorageNamespaceIndex"
770+
762771
// owner: @nilekhc
763772
// kep: https://kep.k8s.io/4192
764773
// alpha: v1.30
@@ -909,27 +918,13 @@ const (
909918
// releases.
910919
UserNamespacesPodSecurityStandards featuregate.Feature = "UserNamespacesPodSecurityStandards"
911920

912-
// owner: @ahutsunshine
913-
// beta: v1.30
914-
//
915-
// Allows namespace indexer for namespace scope resources in apiserver cache to accelerate list operations.
916-
StorageNamespaceIndex featuregate.Feature = "StorageNamespaceIndex"
917-
918921
// owner: @jsafrane
919922
// kep: https://kep.k8s.io/1710
920923
// alpha: v1.30
921924
// Speed up container startup by mounting volumes with the correct SELinux label
922925
// instead of changing each file on the volumes recursively.
923926
SELinuxMount featuregate.Feature = "SELinuxMount"
924927

925-
// owner: @AkihiroSuda
926-
// kep: https://kep.k8s.io/3857
927-
// alpha: v1.30
928-
// beta: v1.31
929-
//
930-
// Allows recursive read-only mounts.
931-
RecursiveReadOnlyMounts featuregate.Feature = "RecursiveReadOnlyMounts"
932-
933928
// owner: @everpeace
934929
// kep: https://kep.k8s.io/3619
935930
// alpha: v1.31
@@ -964,29 +959,4 @@ func init() {
964959
//
965960
// Entries are separated from each other with blank lines to avoid sweeping gofmt changes
966961
// when adding or removing one entry.
967-
var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureSpec{
968-
// inherited features from generic apiserver, relisted here to get a conflict if it is changed
969-
// unintentionally on either side:
970-
971-
genericfeatures.KMSv1: {Default: false, PreRelease: featuregate.Deprecated},
972-
973-
// features with duplicate definition in apiserver/controller-manager
974-
975-
CloudControllerManagerWebhook: {Default: false, PreRelease: featuregate.Alpha},
976-
977-
InPlacePodVerticalScaling: {Default: false, PreRelease: featuregate.Alpha},
978-
979-
// features that enable backwards compatibility but are scheduled to be removed
980-
// ...
981-
HPAScaleToZero: {Default: false, PreRelease: featuregate.Alpha},
982-
983-
AllowDNSOnlyNodeCSR: {Default: false, PreRelease: featuregate.Deprecated}, // remove after 1.33
984-
985-
AllowInsecureKubeletCertificateSigningRequests: {Default: false, PreRelease: featuregate.Deprecated}, // remove in 1.33
986-
987-
DisableNodeKubeProxyVersion: {Default: false, PreRelease: featuregate.Deprecated}, // default on in 1.33
988-
989-
StorageNamespaceIndex: {Default: true, PreRelease: featuregate.Beta},
990-
991-
RecursiveReadOnlyMounts: {Default: true, PreRelease: featuregate.Beta},
992-
}
962+
var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureSpec{}

pkg/features/versioned_kube_features.go

Lines changed: 45 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"k8s.io/apimachinery/pkg/util/version"
2222
genericfeatures "k8s.io/apiserver/pkg/features"
2323
"k8s.io/component-base/featuregate"
24+
kcmfeatures "k8s.io/controller-manager/pkg/features"
2425
)
2526

2627
// defaultVersionedKubernetesFeatureGates consists of all known Kubernetes-specific feature keys with VersionedSpecs.
@@ -34,6 +35,14 @@ import (
3435
//
3536
// Entries are alphabetized.
3637
var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate.VersionedSpecs{
38+
AllowDNSOnlyNodeCSR: {
39+
{Version: version.MustParse("1.31"), Default: false, PreRelease: featuregate.Deprecated},
40+
},
41+
42+
AllowInsecureKubeletCertificateSigningRequests: {
43+
{Version: version.MustParse("1.31"), Default: false, PreRelease: featuregate.Deprecated},
44+
},
45+
3746
AllowOverwriteTerminationGracePeriodSeconds: {
3847
{Version: version.MustParse("1.32"), Default: false, PreRelease: featuregate.Deprecated},
3948
},
@@ -56,6 +65,10 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate
5665
{Version: version.MustParse("1.31"), Default: false, PreRelease: featuregate.Alpha},
5766
},
5867

68+
kcmfeatures.CloudControllerManagerWebhook: {
69+
{Version: version.MustParse("1.27"), Default: false, PreRelease: featuregate.Alpha},
70+
},
71+
5972
ClusterTrustBundle: {
6073
{Version: version.MustParse("1.27"), Default: false, PreRelease: featuregate.Alpha},
6174
},
@@ -146,6 +159,11 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate
146159
{Version: version.MustParse("1.31"), Default: true, PreRelease: featuregate.GA, LockToDefault: true},
147160
},
148161

162+
DisableNodeKubeProxyVersion: {
163+
{Version: version.MustParse("1.29"), Default: false, PreRelease: featuregate.Alpha},
164+
{Version: version.MustParse("1.31"), Default: false, PreRelease: featuregate.Deprecated},
165+
},
166+
149167
DRAControlPlaneController: {
150168
{Version: version.MustParse("1.26"), Default: false, PreRelease: featuregate.Alpha},
151169
},
@@ -232,6 +250,11 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate
232250
{Version: version.MustParse("1.24"), Default: true, PreRelease: featuregate.GA, LockToDefault: true},
233251
},
234252

253+
genericfeatures.KMSv1: {
254+
{Version: version.MustParse("1.28"), Default: true, PreRelease: featuregate.Deprecated},
255+
{Version: version.MustParse("1.29"), Default: false, PreRelease: featuregate.Deprecated},
256+
},
257+
235258
genericfeatures.MutatingAdmissionPolicy: {
236259
{Version: version.MustParse("1.30"), Default: false, PreRelease: featuregate.Alpha},
237260
},
@@ -251,6 +274,12 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate
251274
{Version: version.MustParse("1.31"), Default: true, PreRelease: featuregate.Beta},
252275
},
253276

277+
genericfeatures.RetryGenerateName: {
278+
{Version: version.MustParse("1.30"), Default: false, PreRelease: featuregate.Alpha},
279+
{Version: version.MustParse("1.31"), Default: true, PreRelease: featuregate.Beta},
280+
{Version: version.MustParse("1.32"), Default: true, LockToDefault: true, PreRelease: featuregate.GA},
281+
},
282+
254283
genericfeatures.SeparateCacheWatchRPC: {
255284
{Version: version.MustParse("1.28"), Default: true, PreRelease: featuregate.Beta},
256285
},
@@ -331,6 +360,10 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate
331360
{Version: version.MustParse("1.30"), Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.32
332361
},
333362

363+
HPAScaleToZero: {
364+
{Version: version.MustParse("1.16"), Default: false, PreRelease: featuregate.Alpha},
365+
},
366+
334367
ImageMaximumGCAge: {
335368
{Version: version.MustParse("1.29"), Default: false, PreRelease: featuregate.Alpha},
336369
{Version: version.MustParse("1.30"), Default: true, PreRelease: featuregate.Beta},
@@ -340,6 +373,10 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate
340373
{Version: version.MustParse("1.31"), Default: false, PreRelease: featuregate.Alpha},
341374
},
342375

376+
InPlacePodVerticalScaling: {
377+
{Version: version.MustParse("1.27"), Default: false, PreRelease: featuregate.Alpha},
378+
},
379+
343380
InTreePluginPortworxUnregister: {
344381
{Version: version.MustParse("1.23"), Default: false, PreRelease: featuregate.Alpha},
345382
},
@@ -541,6 +578,10 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate
541578
RecoverVolumeExpansionFailure: {
542579
{Version: version.MustParse("1.23"), Default: false, PreRelease: featuregate.Alpha},
543580
},
581+
RecursiveReadOnlyMounts: {
582+
{Version: version.MustParse("1.30"), Default: false, PreRelease: featuregate.Alpha},
583+
{Version: version.MustParse("1.31"), Default: true, PreRelease: featuregate.Beta},
584+
},
544585

545586
RelaxedDNSSearchValidation: {
546587
{Version: version.MustParse("1.32"), Default: false, PreRelease: featuregate.Alpha},
@@ -585,6 +626,10 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate
585626
{Version: version.MustParse("1.29"), Default: true, PreRelease: featuregate.Beta},
586627
},
587628

629+
StorageNamespaceIndex: {
630+
{Version: version.MustParse("1.30"), Default: true, PreRelease: featuregate.Beta},
631+
},
632+
588633
ServiceAccountTokenJTI: {
589634
{Version: version.MustParse("1.29"), Default: false, PreRelease: featuregate.Alpha},
590635
{Version: version.MustParse("1.30"), Default: true, PreRelease: featuregate.Beta},
@@ -698,9 +743,4 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate
698743
WindowsHostNetwork: {
699744
{Version: version.MustParse("1.26"), Default: true, PreRelease: featuregate.Alpha},
700745
},
701-
genericfeatures.RetryGenerateName: {
702-
{Version: version.MustParse("1.30"), Default: false, PreRelease: featuregate.Alpha},
703-
{Version: version.MustParse("1.31"), Default: true, PreRelease: featuregate.Beta},
704-
{Version: version.MustParse("1.32"), Default: true, LockToDefault: true, PreRelease: featuregate.GA},
705-
},
706746
}

staging/src/k8s.io/apiserver/pkg/features/kube_features.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,11 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate
363363
{Version: version.MustParse("1.24"), Default: true, PreRelease: featuregate.GA, LockToDefault: true},
364364
},
365365

366+
KMSv1: {
367+
{Version: version.MustParse("1.28"), Default: true, PreRelease: featuregate.Deprecated},
368+
{Version: version.MustParse("1.29"), Default: false, PreRelease: featuregate.Deprecated},
369+
},
370+
366371
MutatingAdmissionPolicy: {
367372
{Version: version.MustParse("1.30"), Default: false, PreRelease: featuregate.Alpha},
368373
},
@@ -448,9 +453,6 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate
448453
},
449454
}
450455

451-
// defaultKubernetesFeatureGates consists of all known Kubernetes-specific feature keys.
452-
// To add a new feature, define a key for it above and add it here. The features will be
453-
// available throughout Kubernetes binaries.
454-
var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureSpec{
455-
KMSv1: {Default: false, PreRelease: featuregate.Deprecated},
456-
}
456+
// defaultKubernetesFeatureGates consists of legacy unversioned Kubernetes-specific feature keys.
457+
// Please do not add to this struct and use defaultVersionedKubernetesFeatureGates instead.
458+
var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureSpec{}

staging/src/k8s.io/controller-manager/pkg/features/kube_features.go

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ limitations under the License.
1717
package features
1818

1919
import (
20+
"k8s.io/apimachinery/pkg/util/version"
2021
"k8s.io/component-base/featuregate"
2122
)
2223

@@ -39,12 +40,14 @@ const (
3940
CloudControllerManagerWebhook featuregate.Feature = "CloudControllerManagerWebhook"
4041
)
4142

42-
func SetupCurrentKubernetesSpecificFeatureGates(featuregates featuregate.MutableFeatureGate) error {
43-
return featuregates.Add(cloudPublicFeatureGates)
43+
func SetupCurrentKubernetesSpecificFeatureGates(featuregates featuregate.MutableVersionedFeatureGate) error {
44+
return featuregates.AddVersioned(versionedCloudPublicFeatureGates)
4445
}
4546

46-
// cloudPublicFeatureGates consists of cloud-specific feature keys.
47-
// To add a new feature, define a key for it at k8s.io/api/pkg/features and add it here.
48-
var cloudPublicFeatureGates = map[featuregate.Feature]featuregate.FeatureSpec{
49-
CloudControllerManagerWebhook: {Default: false, PreRelease: featuregate.Alpha},
47+
// versionedCloudPublicFeatureGates consists of versioned cloud-specific feature keys.
48+
// To add a new feature, define a key for it above and add it here.
49+
var versionedCloudPublicFeatureGates = map[featuregate.Feature]featuregate.VersionedSpecs{
50+
CloudControllerManagerWebhook: {
51+
{Version: version.MustParse("1.27"), Default: false, PreRelease: featuregate.Alpha},
52+
},
5053
}
Lines changed: 0 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,3 @@
1-
- name: AllowDNSOnlyNodeCSR
2-
versionedSpecs:
3-
- default: false
4-
lockToDefault: false
5-
preRelease: Deprecated
6-
version: ""
7-
- name: AllowInsecureKubeletCertificateSigningRequests
8-
versionedSpecs:
9-
- default: false
10-
lockToDefault: false
11-
preRelease: Deprecated
12-
version: ""
13-
- name: CloudControllerManagerWebhook
14-
versionedSpecs:
15-
- default: false
16-
lockToDefault: false
17-
preRelease: Alpha
18-
version: ""
191
- name: ComponentSLIs
202
versionedSpecs:
213
- default: true
@@ -28,30 +10,6 @@
2810
lockToDefault: false
2911
preRelease: Beta
3012
version: ""
31-
- name: DisableNodeKubeProxyVersion
32-
versionedSpecs:
33-
- default: false
34-
lockToDefault: false
35-
preRelease: Deprecated
36-
version: ""
37-
- name: HPAScaleToZero
38-
versionedSpecs:
39-
- default: false
40-
lockToDefault: false
41-
preRelease: Alpha
42-
version: ""
43-
- name: InPlacePodVerticalScaling
44-
versionedSpecs:
45-
- default: false
46-
lockToDefault: false
47-
preRelease: Alpha
48-
version: ""
49-
- name: KMSv1
50-
versionedSpecs:
51-
- default: false
52-
lockToDefault: false
53-
preRelease: Deprecated
54-
version: ""
5513
- name: LoggingAlphaOptions
5614
versionedSpecs:
5715
- default: false
@@ -64,15 +22,3 @@
6422
lockToDefault: false
6523
preRelease: Beta
6624
version: ""
67-
- name: RecursiveReadOnlyMounts
68-
versionedSpecs:
69-
- default: true
70-
lockToDefault: false
71-
preRelease: Beta
72-
version: ""
73-
- name: StorageNamespaceIndex
74-
versionedSpecs:
75-
- default: true
76-
lockToDefault: false
77-
preRelease: Beta
78-
version: ""

0 commit comments

Comments
 (0)