k8s.io/kubernetes@v1.31.0-alpha.0.0.20240520171757-56147500dadc/pkg/features/kube_features.go (about)

     1  /*
     2  Copyright 2017 The Kubernetes Authors.
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8      http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  
    17  package features
    18  
    19  import (
    20  	apiextensionsfeatures "k8s.io/apiextensions-apiserver/pkg/features"
    21  	"k8s.io/apimachinery/pkg/util/runtime"
    22  	genericfeatures "k8s.io/apiserver/pkg/features"
    23  	utilfeature "k8s.io/apiserver/pkg/util/feature"
    24  	clientfeatures "k8s.io/client-go/features"
    25  	"k8s.io/component-base/featuregate"
    26  )
    27  
    28  const (
    29  	// Every feature gate should add method here following this template:
    30  	//
    31  	// // owner: @username
    32  	// // kep: https://kep.k8s.io/NNN
    33  	// // alpha: v1.X
    34  	// MyFeature featuregate.Feature = "MyFeature"
    35  	//
    36  	// Feature gates should be listed in alphabetical, case-sensitive
    37  	// (upper before any lower case character) order. This reduces the risk
    38  	// of code conflicts because changes are more likely to be scattered
    39  	// across the file.
    40  
    41  	// owner: @ttakahashi21 @mkimuram
    42  	// kep: https://kep.k8s.io/3294
    43  	// alpha: v1.26
    44  	//
    45  	// Enable usage of Provision of PVCs from snapshots in other namespaces
    46  	CrossNamespaceVolumeDataSource featuregate.Feature = "CrossNamespaceVolumeDataSource"
    47  
    48  	// owner: @thockin
    49  	// deprecated: v1.29
    50  	//
    51  	// Enables Service.status.ingress.loadBanace to be set on
    52  	// services of types other than LoadBalancer.
    53  	AllowServiceLBStatusOnNonLB featuregate.Feature = "AllowServiceLBStatusOnNonLB"
    54  
    55  	// owner: @bswartz
    56  	// alpha: v1.18
    57  	// beta: v1.24
    58  	//
    59  	// Enables usage of any object for volume data source in PVCs
    60  	AnyVolumeDataSource featuregate.Feature = "AnyVolumeDataSource"
    61  
    62  	// owner: @tallclair
    63  	// beta: v1.4
    64  	AppArmor featuregate.Feature = "AppArmor"
    65  
    66  	// owner: @tallclair
    67  	// beta: v1.30
    68  	AppArmorFields featuregate.Feature = "AppArmorFields"
    69  
    70  	// owner: @danwinship
    71  	// alpha: v1.27
    72  	// beta: v1.29
    73  	// GA: v1.30
    74  	//
    75  	// Enables dual-stack --node-ip in kubelet with external cloud providers
    76  	CloudDualStackNodeIPs featuregate.Feature = "CloudDualStackNodeIPs"
    77  
    78  	// owner: @ahmedtd
    79  	// alpha: v1.26
    80  	//
    81  	// Enable ClusterTrustBundle objects and Kubelet integration.
    82  	ClusterTrustBundle featuregate.Feature = "ClusterTrustBundle"
    83  
    84  	// owner: @ahmedtd
    85  	// alpha: v1.28
    86  	//
    87  	// Enable ClusterTrustBundle Kubelet projected volumes.  Depends on ClusterTrustBundle.
    88  	ClusterTrustBundleProjection featuregate.Feature = "ClusterTrustBundleProjection"
    89  
    90  	// owner: @szuecs
    91  	// alpha: v1.12
    92  	//
    93  	// Enable nodes to change CPUCFSQuotaPeriod
    94  	CPUCFSQuotaPeriod featuregate.Feature = "CustomCPUCFSQuotaPeriod"
    95  
    96  	// owner: @ConnorDoyle, @fromanirh (only for GA graduation)
    97  	// alpha: v1.8
    98  	// beta: v1.10
    99  	// GA: v1.26
   100  	//
   101  	// Alternative container-level CPU affinity policies.
   102  	CPUManager featuregate.Feature = "CPUManager"
   103  
   104  	// owner: @fromanirh
   105  	// alpha: v1.23
   106  	// beta: see below.
   107  	//
   108  	// Allow fine-tuning of cpumanager policies, experimental, alpha-quality options
   109  	// Per https://groups.google.com/g/kubernetes-sig-architecture/c/Nxsc7pfe5rw/m/vF2djJh0BAAJ
   110  	// We want to avoid a proliferation of feature gates. This feature gate:
   111  	// - will guard *a group* of cpumanager options whose quality level is alpha.
   112  	// - will never graduate to beta or stable.
   113  	// See https://groups.google.com/g/kubernetes-sig-architecture/c/Nxsc7pfe5rw/m/vF2djJh0BAAJ
   114  	// for details about the removal of this feature gate.
   115  	CPUManagerPolicyAlphaOptions featuregate.Feature = "CPUManagerPolicyAlphaOptions"
   116  
   117  	// owner: @fromanirh
   118  	// beta: v1.23
   119  	// beta: see below.
   120  	//
   121  	// Allow fine-tuning of cpumanager policies, experimental, beta-quality options
   122  	// Per https://groups.google.com/g/kubernetes-sig-architecture/c/Nxsc7pfe5rw/m/vF2djJh0BAAJ
   123  	// We want to avoid a proliferation of feature gates. This feature gate:
   124  	// - will guard *a group* of cpumanager options whose quality level is beta.
   125  	// - is thus *introduced* as beta
   126  	// - will never graduate to stable.
   127  	// See https://groups.google.com/g/kubernetes-sig-architecture/c/Nxsc7pfe5rw/m/vF2djJh0BAAJ
   128  	// for details about the removal of this feature gate.
   129  	CPUManagerPolicyBetaOptions featuregate.Feature = "CPUManagerPolicyBetaOptions"
   130  
   131  	// owner: @fromanirh
   132  	// alpha: v1.22
   133  	// beta: v1.23
   134  	//
   135  	// Allow the usage of options to fine-tune the cpumanager policies.
   136  	CPUManagerPolicyOptions featuregate.Feature = "CPUManagerPolicyOptions"
   137  
   138  	// owner: @trierra
   139  	// alpha: v1.23
   140  	//
   141  	// Enables the Portworx in-tree driver to Portworx migration feature.
   142  	CSIMigrationPortworx featuregate.Feature = "CSIMigrationPortworx"
   143  
   144  	// owner: @fengzixu
   145  	// alpha: v1.21
   146  	//
   147  	// Enables kubelet to detect CSI volume condition and send the event of the abnormal volume to the corresponding pod that is using it.
   148  	CSIVolumeHealth featuregate.Feature = "CSIVolumeHealth"
   149  
   150  	// owner: @nckturner
   151  	// kep:  http://kep.k8s.io/2699
   152  	// alpha: v1.27
   153  	// Enable webhooks in cloud controller manager
   154  	CloudControllerManagerWebhook featuregate.Feature = "CloudControllerManagerWebhook"
   155  
   156  	// owner: @adrianreber
   157  	// kep: https://kep.k8s.io/2008
   158  	// alpha: v1.25
   159  	// beta: v1.30
   160  	//
   161  	// Enables container Checkpoint support in the kubelet
   162  	ContainerCheckpoint featuregate.Feature = "ContainerCheckpoint"
   163  
   164  	// owner: @helayoty
   165  	// beta: v1.28
   166  	// Set the scheduled time as an annotation in the job.
   167  	CronJobsScheduledAnnotation featuregate.Feature = "CronJobsScheduledAnnotation"
   168  
   169  	// owner: @elezar
   170  	// kep: http://kep.k8s.io/4009
   171  	// alpha: v1.28
   172  	// beta: v1.29
   173  	//
   174  	// Add support for CDI Device IDs in the Device Plugin API.
   175  	DevicePluginCDIDevices featuregate.Feature = "DevicePluginCDIDevices"
   176  
   177  	// owner: @andrewsykim
   178  	// alpha: v1.22
   179  	// beta: v1.29
   180  	// GA: v1.31
   181  	//
   182  	// Disable any functionality in kube-apiserver, kube-controller-manager and kubelet related to the `--cloud-provider` component flag.
   183  	DisableCloudProviders featuregate.Feature = "DisableCloudProviders"
   184  
   185  	// owner: @andrewsykim
   186  	// alpha: v1.23
   187  	// beta: v1.29
   188  	//
   189  	// Disable in-tree functionality in kubelet to authenticate to cloud provider container registries for image pull credentials.
   190  	DisableKubeletCloudCredentialProviders featuregate.Feature = "DisableKubeletCloudCredentialProviders"
   191  
   192  	// owner: @HirazawaUi
   193  	// kep: http://kep.k8s.io/4004
   194  	// alpha: v1.29
   195  	// beta: v1.31
   196  	// DisableNodeKubeProxyVersion disable the status.nodeInfo.kubeProxyVersion field of v1.Node
   197  	DisableNodeKubeProxyVersion featuregate.Feature = "DisableNodeKubeProxyVersion"
   198  
   199  	// owner: @pohly
   200  	// kep: http://kep.k8s.io/3063
   201  	// alpha: v1.26
   202  	//
   203  	// Enables support for resources with custom parameters and a lifecycle
   204  	// that is independent of a Pod.
   205  	DynamicResourceAllocation featuregate.Feature = "DynamicResourceAllocation"
   206  
   207  	// owner: @harche
   208  	// kep: http://kep.k8s.io/3386
   209  	// alpha: v1.25
   210  	//
   211  	// Allows using event-driven PLEG (pod lifecycle event generator) through kubelet
   212  	// which avoids frequent relisting of containers which helps optimize performance.
   213  	EventedPLEG featuregate.Feature = "EventedPLEG"
   214  
   215  	// owner: @andrewsykim @SergeyKanzhelev
   216  	// GA: v1.20
   217  	//
   218  	// Ensure kubelet respects exec probe timeouts. Feature gate exists in-case existing workloads
   219  	// may depend on old behavior where exec probe timeouts were ignored.
   220  	// Lock to default and remove after v1.22 based on user feedback that should be reflected in KEP #1972 update
   221  	ExecProbeTimeout featuregate.Feature = "ExecProbeTimeout"
   222  
   223  	// owner: @jpbetz
   224  	// alpha: v1.30
   225  	// Resource create requests using generateName are retried automatically by the apiserver
   226  	// if the generated name conflicts with an existing resource name, up to a maximum number of 7 retries.
   227  	RetryGenerateName featuregate.Feature = "RetryGenerateName"
   228  
   229  	// owner: @bobbypage
   230  	// alpha: v1.20
   231  	// beta:  v1.21
   232  	// Adds support for kubelet to detect node shutdown and gracefully terminate pods prior to the node being shutdown.
   233  	GracefulNodeShutdown featuregate.Feature = "GracefulNodeShutdown"
   234  
   235  	// owner: @wzshiming
   236  	// alpha: v1.23
   237  	// beta:  v1.24
   238  	// Make the kubelet use shutdown configuration based on pod priority values for graceful shutdown.
   239  	GracefulNodeShutdownBasedOnPodPriority featuregate.Feature = "GracefulNodeShutdownBasedOnPodPriority"
   240  
   241  	// owner: @arjunrn @mwielgus @josephburnett @sanposhiho
   242  	// kep: https://kep.k8s.io/1610
   243  	// alpha: v1.20
   244  	// beta:  v1.27
   245  	// GA:  v1.30
   246  	//
   247  	// Add support for the HPA to scale based on metrics from individual containers
   248  	// in target pods
   249  	HPAContainerMetrics featuregate.Feature = "HPAContainerMetrics"
   250  
   251  	// owner: @dxist
   252  	// alpha: v1.16
   253  	//
   254  	// Enables support of HPA scaling to zero pods when an object or custom metric is configured.
   255  	HPAScaleToZero featuregate.Feature = "HPAScaleToZero"
   256  
   257  	// owner: @deepakkinni @xing-yang
   258  	// kep: https://kep.k8s.io/2680
   259  	// alpha: v1.23
   260  	//
   261  	// Honor Persistent Volume Reclaim Policy when it is "Delete" irrespective of PV-PVC
   262  	// deletion ordering.
   263  	HonorPVReclaimPolicy featuregate.Feature = "HonorPVReclaimPolicy"
   264  
   265  	// owner: @leakingtapan
   266  	// alpha: v1.21
   267  	//
   268  	// Disables the AWS EBS in-tree driver.
   269  	InTreePluginAWSUnregister featuregate.Feature = "InTreePluginAWSUnregister"
   270  
   271  	// owner: @andyzhangx
   272  	// alpha: v1.21
   273  	//
   274  	// Disables the Azure Disk in-tree driver.
   275  	InTreePluginAzureDiskUnregister featuregate.Feature = "InTreePluginAzureDiskUnregister"
   276  
   277  	// owner: @andyzhangx
   278  	// alpha: v1.21
   279  	//
   280  	// Disables the Azure File in-tree driver.
   281  	InTreePluginAzureFileUnregister featuregate.Feature = "InTreePluginAzureFileUnregister"
   282  
   283  	// owner: @Jiawei0227
   284  	// alpha: v1.21
   285  	//
   286  	// Disables the GCE PD in-tree driver.
   287  	InTreePluginGCEUnregister featuregate.Feature = "InTreePluginGCEUnregister"
   288  
   289  	// owner: @adisky
   290  	// alpha: v1.21
   291  	//
   292  	// Disables the OpenStack Cinder in-tree driver.
   293  	InTreePluginOpenStackUnregister featuregate.Feature = "InTreePluginOpenStackUnregister"
   294  
   295  	// owner: @trierra
   296  	// alpha: v1.23
   297  	//
   298  	// Disables the Portworx in-tree driver.
   299  	InTreePluginPortworxUnregister featuregate.Feature = "InTreePluginPortworxUnregister"
   300  
   301  	// owner: @divyenpatel
   302  	// alpha: v1.21
   303  	//
   304  	// Disables the vSphere in-tree driver.
   305  	InTreePluginvSphereUnregister featuregate.Feature = "InTreePluginvSphereUnregister"
   306  
   307  	// owner: @mimowo
   308  	// kep: https://kep.k8s.io/3850
   309  	// alpha: v1.28
   310  	// beta: v1.29
   311  	//
   312  	// Allows users to specify counting of failed pods per index.
   313  	JobBackoffLimitPerIndex featuregate.Feature = "JobBackoffLimitPerIndex"
   314  
   315  	// owner: @mimowo
   316  	// kep: https://kep.k8s.io/4368
   317  	// alpha: v1.30
   318  	//
   319  	// Allows to delegate reconciliation of a Job object to an external controller.
   320  	JobManagedBy featuregate.Feature = "JobManagedBy"
   321  
   322  	// owner: @mimowo
   323  	// kep: https://kep.k8s.io/3329
   324  	// alpha: v1.25
   325  	// beta: v1.26
   326  	//
   327  	// Allow users to specify handling of pod failures based on container exit codes
   328  	// and pod conditions.
   329  	JobPodFailurePolicy featuregate.Feature = "JobPodFailurePolicy"
   330  
   331  	// owner: @kannon92
   332  	// kep : https://kep.k8s.io/3939
   333  	// alpha: v1.28
   334  	// beta: v1.29
   335  	//
   336  	// Allow users to specify recreating pods of a job only when
   337  	// pods have fully terminated.
   338  	JobPodReplacementPolicy featuregate.Feature = "JobPodReplacementPolicy"
   339  
   340  	// owner: @tenzen-y
   341  	// kep: https://kep.k8s.io/3998
   342  	// alpha: v1.30
   343  	//
   344  	// Allow users to specify when a Job can be declared as succeeded
   345  	// based on the set of succeeded pods.
   346  	JobSuccessPolicy featuregate.Feature = "JobSuccessPolicy"
   347  
   348  	// owner: @alculquicondor
   349  	// alpha: v1.23
   350  	// beta: v1.24
   351  	//
   352  	// Track the number of pods with Ready condition in the Job status.
   353  	JobReadyPods featuregate.Feature = "JobReadyPods"
   354  
   355  	// owner: @marquiz
   356  	// kep: http://kep.k8s.io/4033
   357  	// alpha: v1.28
   358  	//
   359  	// Enable detection of the kubelet cgroup driver configuration option from
   360  	// the CRI.  The CRI runtime also needs to support this feature in which
   361  	// case the kubelet will ignore the cgroupDriver (--cgroup-driver)
   362  	// configuration option. If runtime doesn't support it, the kubelet will
   363  	// fallback to using it's cgroupDriver option.
   364  	KubeletCgroupDriverFromCRI featuregate.Feature = "KubeletCgroupDriverFromCRI"
   365  
   366  	// owner: @AkihiroSuda
   367  	// alpha: v1.22
   368  	//
   369  	// Enables support for running kubelet in a user namespace.
   370  	// The user namespace has to be created before running kubelet.
   371  	// All the node components such as CRI need to be running in the same user namespace.
   372  	KubeletInUserNamespace featuregate.Feature = "KubeletInUserNamespace"
   373  
   374  	// owner: @moshe010
   375  	// alpha: v1.27
   376  	//
   377  	// Enable POD resources API to return resources allocated by Dynamic Resource Allocation
   378  	KubeletPodResourcesDynamicResources featuregate.Feature = "KubeletPodResourcesDynamicResources"
   379  
   380  	// owner: @moshe010
   381  	// alpha: v1.27
   382  	//
   383  	// Enable POD resources API with Get method
   384  	KubeletPodResourcesGet featuregate.Feature = "KubeletPodResourcesGet"
   385  
   386  	// KubeletSeparateDiskGC enables Kubelet to garbage collection images/containers on different filesystems
   387  	// owner: @kannon92
   388  	// kep: https://kep.k8s.io/4191
   389  	// alpha: v1.29
   390  	KubeletSeparateDiskGC featuregate.Feature = "KubeletSeparateDiskGC"
   391  
   392  	// owner: @sallyom
   393  	// kep: https://kep.k8s.io/2832
   394  	// alpha: v1.25
   395  	// beta: v1.27
   396  	//
   397  	// Add support for distributed tracing in the kubelet
   398  	KubeletTracing featuregate.Feature = "KubeletTracing"
   399  
   400  	// owner: @alexanderConstantinescu
   401  	// kep: http://kep.k8s.io/3836
   402  	// alpha: v1.28
   403  	// beta: v1.30
   404  	//
   405  	// Implement connection draining for terminating nodes for
   406  	// `externalTrafficPolicy: Cluster` services.
   407  	KubeProxyDrainingTerminatingNodes featuregate.Feature = "KubeProxyDrainingTerminatingNodes"
   408  
   409  	// owner: @yt2985
   410  	// kep: http://kep.k8s.io/2799
   411  	// alpha: v1.28
   412  	// beta: v1.29
   413  	// GA: v1.30
   414  	//
   415  	// Enables cleaning up of secret-based service account tokens.
   416  	LegacyServiceAccountTokenCleanUp featuregate.Feature = "LegacyServiceAccountTokenCleanUp"
   417  
   418  	// owner: @RobertKrawitz
   419  	// alpha: v1.15
   420  	//
   421  	// Allow use of filesystems for ephemeral storage monitoring.
   422  	// Only applies if LocalStorageCapacityIsolation is set.
   423  	LocalStorageCapacityIsolationFSQuotaMonitoring featuregate.Feature = "LocalStorageCapacityIsolationFSQuotaMonitoring"
   424  
   425  	// owner: @damemi
   426  	// alpha: v1.21
   427  	// beta: v1.22
   428  	//
   429  	// Enables scaling down replicas via logarithmic comparison of creation/ready timestamps
   430  	LogarithmicScaleDown featuregate.Feature = "LogarithmicScaleDown"
   431  
   432  	// owner: @sanposhiho
   433  	// kep: https://kep.k8s.io/3633
   434  	// alpha: v1.29
   435  	// beta: v1.30
   436  	//
   437  	// Enables the MatchLabelKeys and MismatchLabelKeys in PodAffinity and PodAntiAffinity.
   438  	MatchLabelKeysInPodAffinity featuregate.Feature = "MatchLabelKeysInPodAffinity"
   439  
   440  	// owner: @denkensk
   441  	// kep: https://kep.k8s.io/3243
   442  	// alpha: v1.25
   443  	// beta: v1.27
   444  	//
   445  	// Enable MatchLabelKeys in PodTopologySpread.
   446  	MatchLabelKeysInPodTopologySpread featuregate.Feature = "MatchLabelKeysInPodTopologySpread"
   447  
   448  	// owner: @krmayankk
   449  	// alpha: v1.24
   450  	//
   451  	// Enables maxUnavailable for StatefulSet
   452  	MaxUnavailableStatefulSet featuregate.Feature = "MaxUnavailableStatefulSet"
   453  
   454  	// owner: @cynepco3hahue(alukiano) @cezaryzukowski @k-wiatrzyk
   455  	// alpha: v1.21
   456  	// beta: v1.22
   457  	// Allows setting memory affinity for a container based on NUMA topology
   458  	MemoryManager featuregate.Feature = "MemoryManager"
   459  
   460  	// owner: @xiaoxubeii
   461  	// kep: https://kep.k8s.io/2570
   462  	// alpha: v1.22
   463  	//
   464  	// Enables kubelet to support memory QoS with cgroups v2.
   465  	MemoryQoS featuregate.Feature = "MemoryQoS"
   466  
   467  	// owner: @sanposhiho
   468  	// kep: https://kep.k8s.io/3022
   469  	// alpha: v1.24
   470  	// beta: v1.25
   471  	// GA: v1.30
   472  	//
   473  	// Enable MinDomains in Pod Topology Spread.
   474  	MinDomainsInPodTopologySpread featuregate.Feature = "MinDomainsInPodTopologySpread"
   475  
   476  	// owner: @aojea
   477  	// kep: https://kep.k8s.io/1880
   478  	// alpha: v1.27
   479  	//
   480  	// Enables the dynamic configuration of Service IP ranges
   481  	MultiCIDRServiceAllocator featuregate.Feature = "MultiCIDRServiceAllocator"
   482  
   483  	// owner: @jsafrane
   484  	// kep: https://kep.k8s.io/3756
   485  	// alpha: v1.25 (as part of SELinuxMountReadWriteOncePod)
   486  	// beta: v1.27
   487  	// GA: v1.30
   488  	// Robust VolumeManager reconstruction after kubelet restart.
   489  	NewVolumeManagerReconstruction featuregate.Feature = "NewVolumeManagerReconstruction"
   490  
   491  	// owner: @danwinship
   492  	// kep: https://kep.k8s.io/3866
   493  	// alpha: v1.29
   494  	// beta: v1.31
   495  	//
   496  	// Allows running kube-proxy with `--mode nftables`.
   497  	NFTablesProxyMode featuregate.Feature = "NFTablesProxyMode"
   498  
   499  	// owner: @aravindhp @LorbusChris
   500  	// kep: http://kep.k8s.io/2271
   501  	// alpha: v1.27
   502  	// beta: v1.30
   503  	//
   504  	// Enables querying logs of node services using the /logs endpoint
   505  	NodeLogQuery featuregate.Feature = "NodeLogQuery"
   506  
   507  	// owner: @xing-yang @sonasingh46
   508  	// kep: https://kep.k8s.io/2268
   509  	// alpha: v1.24
   510  	// beta: v1.26
   511  	// GA: v1.28
   512  	//
   513  	// Allow pods to failover to a different node in case of non graceful node shutdown
   514  	NodeOutOfServiceVolumeDetach featuregate.Feature = "NodeOutOfServiceVolumeDetach"
   515  
   516  	// owner: @iholder101 @kannon92
   517  	// kep: https://kep.k8s.io/2400
   518  	// alpha: v1.22
   519  	// beta1: v1.28 (default=false)
   520  	// beta2: v.1.30 (default=true)
   521  
   522  	// Permits kubelet to run with swap enabled.
   523  	NodeSwap featuregate.Feature = "NodeSwap"
   524  
   525  	// owner: @mortent, @atiratree, @ravig
   526  	// kep: http://kep.k8s.io/3018
   527  	// alpha: v1.26
   528  	// beta: v1.27
   529  	//
   530  	// Enables PDBUnhealthyPodEvictionPolicy for PodDisruptionBudgets
   531  	PDBUnhealthyPodEvictionPolicy featuregate.Feature = "PDBUnhealthyPodEvictionPolicy"
   532  
   533  	// owner: @RomanBednar
   534  	// kep: https://kep.k8s.io/3762
   535  	// alpha: v1.28
   536  	// beta: v1.29
   537  	//
   538  	// Adds a new field to persistent volumes which holds a timestamp of when the volume last transitioned its phase.
   539  	PersistentVolumeLastPhaseTransitionTime featuregate.Feature = "PersistentVolumeLastPhaseTransitionTime"
   540  
   541  	// owner: @haircommander
   542  	// kep: https://kep.k8s.io/2364
   543  	// alpha: v1.23
   544  	//
   545  	// Configures the Kubelet to use the CRI to populate pod and container stats, instead of supplimenting with stats from cAdvisor.
   546  	// Requires the CRI implementation supports supplying the required stats.
   547  	PodAndContainerStatsFromCRI featuregate.Feature = "PodAndContainerStatsFromCRI"
   548  
   549  	// owner: @ahg-g
   550  	// alpha: v1.21
   551  	// beta: v1.22
   552  	//
   553  	// Enables controlling pod ranking on replicaset scale-down.
   554  	PodDeletionCost featuregate.Feature = "PodDeletionCost"
   555  
   556  	// owner: @mimowo
   557  	// kep: https://kep.k8s.io/3329
   558  	// alpha: v1.25
   559  	// beta: v1.26
   560  	//
   561  	// Enables support for appending a dedicated pod condition indicating that
   562  	// the pod is being deleted due to a disruption.
   563  	PodDisruptionConditions featuregate.Feature = "PodDisruptionConditions"
   564  
   565  	// owner: @danielvegamyhre
   566  	// kep: https://kep.k8s.io/4017
   567  	// beta: v1.28
   568  	//
   569  	// Set pod completion index as a pod label for Indexed Jobs.
   570  	PodIndexLabel featuregate.Feature = "PodIndexLabel"
   571  
   572  	// owner: @ddebroy, @kannon92
   573  	// alpha: v1.25
   574  	// beta: v1.29
   575  	//
   576  	// Enables reporting of PodReadyToStartContainersCondition condition in pod status after pod
   577  	// sandbox creation and network configuration completes successfully
   578  	PodReadyToStartContainersCondition featuregate.Feature = "PodReadyToStartContainersCondition"
   579  
   580  	// owner: @wzshiming
   581  	// kep: http://kep.k8s.io/2681
   582  	// alpha: v1.28
   583  	// beta: v1.29
   584  	// GA: v1.30
   585  	//
   586  	// Adds pod.status.hostIPs and downward API
   587  	PodHostIPs featuregate.Feature = "PodHostIPs"
   588  
   589  	// owner: @AxeZhan
   590  	// kep: http://kep.k8s.io/3960
   591  	// alpha: v1.29
   592  	// beta: v1.30
   593  	//
   594  	// Enables SleepAction in container lifecycle hooks
   595  	PodLifecycleSleepAction featuregate.Feature = "PodLifecycleSleepAction"
   596  
   597  	// owner: @Huang-Wei
   598  	// kep: https://kep.k8s.io/3521
   599  	// alpha: v1.26
   600  	// beta: v1.27
   601  	// stable: v1.30
   602  	//
   603  	// Enable users to specify when a Pod is ready for scheduling.
   604  	PodSchedulingReadiness featuregate.Feature = "PodSchedulingReadiness"
   605  
   606  	// owner: @seans3
   607  	// kep: http://kep.k8s.io/4006
   608  	// alpha: v1.30
   609  	//
   610  	// Enables PortForward to be proxied with a websocket client
   611  	PortForwardWebsockets featuregate.Feature = "PortForwardWebsockets"
   612  
   613  	// owner: @jessfraz
   614  	// alpha: v1.12
   615  	//
   616  	// Enables control over ProcMountType for containers.
   617  	ProcMountType featuregate.Feature = "ProcMountType"
   618  
   619  	// owner: @sjenning
   620  	// alpha: v1.11
   621  	//
   622  	// Allows resource reservations at the QoS level preventing pods at lower QoS levels from
   623  	// bursting into resources requested at higher QoS levels (memory only for now)
   624  	QOSReserved featuregate.Feature = "QOSReserved"
   625  
   626  	// owner: @chrishenzie
   627  	// kep: https://kep.k8s.io/2485
   628  	// alpha: v1.22
   629  	// beta: v1.27
   630  	// GA: v1.29
   631  	//
   632  	// Enables usage of the ReadWriteOncePod PersistentVolume access mode.
   633  	ReadWriteOncePod featuregate.Feature = "ReadWriteOncePod"
   634  
   635  	// owner: @gnufied
   636  	// kep: https://kep.k8s.io/1790
   637  	// alpha: v1.23
   638  	//
   639  	// Allow users to recover from volume expansion failure
   640  	RecoverVolumeExpansionFailure featuregate.Feature = "RecoverVolumeExpansionFailure"
   641  
   642  	// owner: @HirazawaUi
   643  	// kep: https://kep.k8s.io/4369
   644  	// alpha: v1.30
   645  	//
   646  	// Allow almost all printable ASCII characters in environment variables
   647  	RelaxedEnvironmentVariableValidation featuregate.Feature = "RelaxedEnvironmentVariableValidation"
   648  
   649  	// owner: @mikedanese
   650  	// alpha: v1.7
   651  	// beta: v1.12
   652  	//
   653  	// Gets a server certificate for the kubelet from the Certificate Signing
   654  	// Request API instead of generating one self signed and auto rotates the
   655  	// certificate as expiration approaches.
   656  	RotateKubeletServerCertificate featuregate.Feature = "RotateKubeletServerCertificate"
   657  
   658  	// owner: @kiashok
   659  	// kep: https://kep.k8s.io/4216
   660  	// alpha: v1.29
   661  	//
   662  	// Adds support to pull images based on the runtime class specified.
   663  	RuntimeClassInImageCriAPI featuregate.Feature = "RuntimeClassInImageCriApi"
   664  
   665  	// owner: @danielvegamyhre
   666  	// kep: https://kep.k8s.io/2413
   667  	// beta: v1.27
   668  	//
   669  	// Allows mutating spec.completions for Indexed job when done in tandem with
   670  	// spec.parallelism. Specifically, spec.completions is mutable iff spec.completions
   671  	// equals to spec.parallelism before and after the update.
   672  	ElasticIndexedJob featuregate.Feature = "ElasticIndexedJob"
   673  
   674  	// owner: @sanposhiho
   675  	// kep: http://kep.k8s.io/4247
   676  	// beta: v1.28
   677  	//
   678  	// Enables the scheduler's enhancement called QueueingHints,
   679  	// which benefits to reduce the useless requeueing.
   680  	SchedulerQueueingHints featuregate.Feature = "SchedulerQueueingHints"
   681  
   682  	// owner: @atosatto @yuanchen8911
   683  	// kep: http://kep.k8s.io/3902
   684  	// beta: v1.29
   685  	//
   686  	// Decouples Taint Eviction Controller, performing taint-based Pod eviction, from Node Lifecycle Controller.
   687  	SeparateTaintEvictionController featuregate.Feature = "SeparateTaintEvictionController"
   688  
   689  	// owner: @munnerz
   690  	// kep: http://kep.k8s.io/4193
   691  	// alpha: v1.29
   692  	// beta: v1.30
   693  	//
   694  	// Controls whether JTIs (UUIDs) are embedded into generated service account tokens, and whether these JTIs are
   695  	// recorded into the audit log for future requests made by these tokens.
   696  	ServiceAccountTokenJTI featuregate.Feature = "ServiceAccountTokenJTI"
   697  
   698  	// owner: @munnerz
   699  	// kep: http://kep.k8s.io/4193
   700  	// alpha: v1.29
   701  	//
   702  	// Controls whether the apiserver supports binding service account tokens to Node objects.
   703  	ServiceAccountTokenNodeBinding featuregate.Feature = "ServiceAccountTokenNodeBinding"
   704  
   705  	// owner: @munnerz
   706  	// kep: http://kep.k8s.io/4193
   707  	// alpha: v1.29
   708  	// beta: v1.30
   709  	//
   710  	// Controls whether the apiserver will validate Node claims in service account tokens.
   711  	ServiceAccountTokenNodeBindingValidation featuregate.Feature = "ServiceAccountTokenNodeBindingValidation"
   712  
   713  	// owner: @munnerz
   714  	// kep: http://kep.k8s.io/4193
   715  	// alpha: v1.29
   716  	// beta: v1.30
   717  	//
   718  	// Controls whether the apiserver embeds the node name and uid for the associated node when issuing
   719  	// service account tokens bound to Pod objects.
   720  	ServiceAccountTokenPodNodeInfo featuregate.Feature = "ServiceAccountTokenPodNodeInfo"
   721  
   722  	// owner: @gauravkghildiyal @robscott
   723  	// kep: https://kep.k8s.io/4444
   724  	// alpha: v1.30
   725  	//
   726  	// Enables trafficDistribution field on Services.
   727  	ServiceTrafficDistribution featuregate.Feature = "ServiceTrafficDistribution"
   728  
   729  	// owner: @gjkim42 @SergeyKanzhelev @matthyx @tzneal
   730  	// kep: http://kep.k8s.io/753
   731  	// alpha: v1.28
   732  	// beta: v1.29
   733  	//
   734  	// Introduces sidecar containers, a new type of init container that starts
   735  	// before other containers but remains running for the full duration of the
   736  	// pod's lifecycle and will not block pod termination.
   737  	SidecarContainers featuregate.Feature = "SidecarContainers"
   738  
   739  	// owner: @derekwaynecarr
   740  	// alpha: v1.20
   741  	// beta: v1.22
   742  	//
   743  	// Enables kubelet support to size memory backed volumes
   744  	SizeMemoryBackedVolumes featuregate.Feature = "SizeMemoryBackedVolumes"
   745  
   746  	// owner: @alexanderConstantinescu
   747  	// kep: http://kep.k8s.io/3458
   748  	// beta: v1.27
   749  	// GA: v1.30
   750  	//
   751  	// Enables less load balancer re-configurations by the service controller
   752  	// (KCCM) as an effect of changing node state.
   753  	StableLoadBalancerNodeSet featuregate.Feature = "StableLoadBalancerNodeSet"
   754  
   755  	// owner: @mattcary
   756  	// alpha: v1.22
   757  	// beta: v1.27
   758  	//
   759  	// Enables policies controlling deletion of PVCs created by a StatefulSet.
   760  	StatefulSetAutoDeletePVC featuregate.Feature = "StatefulSetAutoDeletePVC"
   761  
   762  	// owner: @psch
   763  	// alpha: v1.26
   764  	// beta: v1.27
   765  	//
   766  	// Enables a StatefulSet to start from an arbitrary non zero ordinal
   767  	StatefulSetStartOrdinal featuregate.Feature = "StatefulSetStartOrdinal"
   768  
   769  	// owner: @nilekhc
   770  	// kep: https://kep.k8s.io/4192
   771  	// alpha: v1.30
   772  
   773  	// Enables support for the StorageVersionMigrator controller.
   774  	StorageVersionMigrator featuregate.Feature = "StorageVersionMigrator"
   775  
   776  	// owner: @robscott
   777  	// kep: https://kep.k8s.io/2433
   778  	// alpha: v1.21
   779  	// beta: v1.23
   780  	//
   781  	// Enables topology aware hints for EndpointSlices
   782  	TopologyAwareHints featuregate.Feature = "TopologyAwareHints"
   783  
   784  	// owner: @PiotrProkop
   785  	// kep: https://kep.k8s.io/3545
   786  	// alpha: v1.26
   787  	//
   788  	// Allow fine-tuning of topology manager policies with alpha options.
   789  	// This feature gate:
   790  	// - will guard *a group* of topology manager options whose quality level is alpha.
   791  	// - will never graduate to beta or stable.
   792  	TopologyManagerPolicyAlphaOptions featuregate.Feature = "TopologyManagerPolicyAlphaOptions"
   793  
   794  	// owner: @PiotrProkop
   795  	// kep: https://kep.k8s.io/3545
   796  	// alpha: v1.26
   797  	//
   798  	// Allow fine-tuning of topology manager policies with beta options.
   799  	// This feature gate:
   800  	// - will guard *a group* of topology manager options whose quality level is beta.
   801  	// - is thus *introduced* as beta
   802  	// - will never graduate to stable.
   803  	TopologyManagerPolicyBetaOptions featuregate.Feature = "TopologyManagerPolicyBetaOptions"
   804  
   805  	// owner: @PiotrProkop
   806  	// kep: https://kep.k8s.io/3545
   807  	// alpha: v1.26
   808  	//
   809  	// Allow the usage of options to fine-tune the topology manager policies.
   810  	TopologyManagerPolicyOptions featuregate.Feature = "TopologyManagerPolicyOptions"
   811  
   812  	// owner: @seans3
   813  	// kep: http://kep.k8s.io/4006
   814  	// beta: v1.30
   815  	//
   816  	// Enables StreamTranslator proxy to handle WebSockets upgrade requests for the
   817  	// version of the RemoteCommand subprotocol that supports the "close" signal.
   818  	TranslateStreamCloseWebsocketRequests featuregate.Feature = "TranslateStreamCloseWebsocketRequests"
   819  
   820  	// owner: @richabanker
   821  	// alpha: v1.28
   822  	//
   823  	// Proxies client to an apiserver capable of serving the request in the event of version skew.
   824  	UnknownVersionInteroperabilityProxy featuregate.Feature = "UnknownVersionInteroperabilityProxy"
   825  
   826  	// owner: @rata, @giuseppe
   827  	// kep: https://kep.k8s.io/127
   828  	// alpha: v1.25
   829  	// beta: v1.30
   830  	//
   831  	// Enables user namespace support for stateless pods.
   832  	UserNamespacesSupport featuregate.Feature = "UserNamespacesSupport"
   833  
   834  	// owner: @mattcarry, @sunnylovestiramisu
   835  	// kep: https://kep.k8s.io/3751
   836  	// alpha: v1.29
   837  	//
   838  	// Enables user specified volume attributes for persistent volumes, like iops and throughput.
   839  	VolumeAttributesClass featuregate.Feature = "VolumeAttributesClass"
   840  
   841  	// owner: @cofyc
   842  	// alpha: v1.21
   843  	VolumeCapacityPriority featuregate.Feature = "VolumeCapacityPriority"
   844  
   845  	// owner: @ksubrmnn
   846  	// alpha: v1.14
   847  	//
   848  	// Allows kube-proxy to create DSR loadbalancers for Windows
   849  	WinDSR featuregate.Feature = "WinDSR"
   850  
   851  	// owner: @ksubrmnn
   852  	// alpha: v1.14
   853  	// beta: v1.20
   854  	//
   855  	// Allows kube-proxy to run in Overlay mode for Windows
   856  	WinOverlay featuregate.Feature = "WinOverlay"
   857  
   858  	// owner: @marosset
   859  	// kep: https://kep.k8s.io/3503
   860  	// alpha: v1.26
   861  	//
   862  	// Enables support for joining Windows containers to a hosts' network namespace.
   863  	WindowsHostNetwork featuregate.Feature = "WindowsHostNetwork"
   864  
   865  	// owner: @kerthcet
   866  	// kep: https://kep.k8s.io/3094
   867  	// alpha: v1.25
   868  	// beta: v1.26
   869  	//
   870  	// Allow users to specify whether to take nodeAffinity/nodeTaint into consideration when
   871  	// calculating pod topology spread skew.
   872  	NodeInclusionPolicyInPodTopologySpread featuregate.Feature = "NodeInclusionPolicyInPodTopologySpread"
   873  
   874  	// owner: @jsafrane
   875  	// kep: https://kep.k8s.io/1710
   876  	// alpha: v1.25
   877  	// beta: v1.27
   878  	// Speed up container startup by mounting volumes with the correct SELinux label
   879  	// instead of changing each file on the volumes recursively.
   880  	// Initial implementation focused on ReadWriteOncePod volumes.
   881  	SELinuxMountReadWriteOncePod featuregate.Feature = "SELinuxMountReadWriteOncePod"
   882  
   883  	// owner: @vinaykul
   884  	// kep: http://kep.k8s.io/1287
   885  	// alpha: v1.27
   886  	//
   887  	// Enables In-Place Pod Vertical Scaling
   888  	InPlacePodVerticalScaling featuregate.Feature = "InPlacePodVerticalScaling"
   889  
   890  	// owner: @Sh4d1,@RyanAoh,@rikatz
   891  	// kep: http://kep.k8s.io/1860
   892  	// alpha: v1.29
   893  	// beta: v1.30
   894  	// LoadBalancerIPMode enables the IPMode field in the LoadBalancerIngress status of a Service
   895  	LoadBalancerIPMode featuregate.Feature = "LoadBalancerIPMode"
   896  
   897  	// owner: @haircommander
   898  	// kep: http://kep.k8s.io/4210
   899  	// alpha: v1.29
   900  	// beta: v1.30
   901  	// ImageMaximumGCAge enables the Kubelet configuration field of the same name, allowing an admin
   902  	// to specify the age after which an image will be garbage collected.
   903  	ImageMaximumGCAge featuregate.Feature = "ImageMaximumGCAge"
   904  
   905  	// owner: @saschagrunert
   906  	// alpha: v1.28
   907  	//
   908  	// Enables user namespace support for Pod Security Standards. Enabling this
   909  	// feature will modify all Pod Security Standard rules to allow setting:
   910  	// spec[.*].securityContext.[runAsNonRoot,runAsUser]
   911  	// This feature gate should only be enabled if all nodes in the cluster
   912  	// support the user namespace feature and have it enabled. The feature gate
   913  	// will not graduate or be enabled by default in future Kubernetes
   914  	// releases.
   915  	UserNamespacesPodSecurityStandards featuregate.Feature = "UserNamespacesPodSecurityStandards"
   916  
   917  	// owner: @ahutsunshine
   918  	// beta: v1.30
   919  	//
   920  	// Allows namespace indexer for namespace scope resources in apiserver cache to accelerate list operations.
   921  	StorageNamespaceIndex featuregate.Feature = "StorageNamespaceIndex"
   922  
   923  	// owner: @jsafrane
   924  	// kep: https://kep.k8s.io/1710
   925  	// alpha: v1.30
   926  	// Speed up container startup by mounting volumes with the correct SELinux label
   927  	// instead of changing each file on the volumes recursively.
   928  	SELinuxMount featuregate.Feature = "SELinuxMount"
   929  
   930  	// owner: @AkihiroSuda
   931  	// kep: https://kep.k8s.io/3857
   932  	// alpha: v1.30
   933  	//
   934  	// Allows recursive read-only mounts.
   935  	RecursiveReadOnlyMounts featuregate.Feature = "RecursiveReadOnlyMounts"
   936  )
   937  
   938  func init() {
   939  	runtime.Must(utilfeature.DefaultMutableFeatureGate.Add(defaultKubernetesFeatureGates))
   940  
   941  	// Register all client-go features with kube's feature gate instance and make all client-go
   942  	// feature checks use kube's instance. The effect is that for kube binaries, client-go
   943  	// features are wired to the existing --feature-gates flag just as all other features
   944  	// are. Further, client-go features automatically support the existing mechanisms for
   945  	// feature enablement metrics and test overrides.
   946  	ca := &clientAdapter{utilfeature.DefaultMutableFeatureGate}
   947  	runtime.Must(clientfeatures.AddFeaturesToExistingFeatureGates(ca))
   948  	clientfeatures.ReplaceFeatureGates(ca)
   949  }
   950  
   951  // defaultKubernetesFeatureGates consists of all known Kubernetes-specific feature keys.
   952  // To add a new feature, define a key for it above and add it here. The features will be
   953  // available throughout Kubernetes binaries.
   954  //
   955  // Entries are separated from each other with blank lines to avoid sweeping gofmt changes
   956  // when adding or removing one entry.
   957  var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureSpec{
   958  	CrossNamespaceVolumeDataSource: {Default: false, PreRelease: featuregate.Alpha},
   959  
   960  	AllowServiceLBStatusOnNonLB: {Default: false, PreRelease: featuregate.Deprecated}, // remove after 1.29
   961  
   962  	AnyVolumeDataSource: {Default: true, PreRelease: featuregate.Beta}, // on by default in 1.24
   963  
   964  	AppArmor: {Default: true, PreRelease: featuregate.Beta},
   965  
   966  	AppArmorFields: {Default: true, PreRelease: featuregate.Beta},
   967  
   968  	CloudDualStackNodeIPs: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.32
   969  
   970  	ClusterTrustBundle: {Default: false, PreRelease: featuregate.Alpha},
   971  
   972  	ClusterTrustBundleProjection: {Default: false, PreRelease: featuregate.Alpha},
   973  
   974  	CPUCFSQuotaPeriod: {Default: false, PreRelease: featuregate.Alpha},
   975  
   976  	CPUManager: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // GA in 1.26
   977  
   978  	CPUManagerPolicyAlphaOptions: {Default: false, PreRelease: featuregate.Alpha},
   979  
   980  	CPUManagerPolicyBetaOptions: {Default: true, PreRelease: featuregate.Beta},
   981  
   982  	CPUManagerPolicyOptions: {Default: true, PreRelease: featuregate.Beta},
   983  
   984  	CSIMigrationPortworx: {Default: false, PreRelease: featuregate.Beta}, // Off by default (requires Portworx CSI driver)
   985  
   986  	CSIVolumeHealth: {Default: false, PreRelease: featuregate.Alpha},
   987  
   988  	CloudControllerManagerWebhook: {Default: false, PreRelease: featuregate.Alpha},
   989  
   990  	ContainerCheckpoint: {Default: true, PreRelease: featuregate.Beta},
   991  
   992  	CronJobsScheduledAnnotation: {Default: true, PreRelease: featuregate.Beta},
   993  
   994  	DisableCloudProviders: {Default: true, PreRelease: featuregate.GA, LockToDefault: true},
   995  
   996  	DisableKubeletCloudCredentialProviders: {Default: true, PreRelease: featuregate.GA, LockToDefault: true},
   997  
   998  	DisableNodeKubeProxyVersion: {Default: true, PreRelease: featuregate.Beta},
   999  
  1000  	DevicePluginCDIDevices: {Default: true, PreRelease: featuregate.Beta},
  1001  
  1002  	DynamicResourceAllocation: {Default: false, PreRelease: featuregate.Alpha},
  1003  
  1004  	EventedPLEG: {Default: false, PreRelease: featuregate.Alpha},
  1005  
  1006  	ExecProbeTimeout: {Default: true, PreRelease: featuregate.GA}, // lock to default and remove after v1.22 based on KEP #1972 update
  1007  
  1008  	RetryGenerateName: {Default: true, PreRelease: featuregate.Beta},
  1009  
  1010  	GracefulNodeShutdown: {Default: true, PreRelease: featuregate.Beta},
  1011  
  1012  	GracefulNodeShutdownBasedOnPodPriority: {Default: true, PreRelease: featuregate.Beta},
  1013  
  1014  	HPAContainerMetrics: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.32
  1015  
  1016  	HonorPVReclaimPolicy: {Default: false, PreRelease: featuregate.Alpha},
  1017  
  1018  	ImageMaximumGCAge: {Default: true, PreRelease: featuregate.Beta},
  1019  
  1020  	InTreePluginAWSUnregister: {Default: false, PreRelease: featuregate.Alpha},
  1021  
  1022  	InTreePluginAzureDiskUnregister: {Default: false, PreRelease: featuregate.Alpha},
  1023  
  1024  	InTreePluginAzureFileUnregister: {Default: false, PreRelease: featuregate.Alpha},
  1025  
  1026  	InTreePluginGCEUnregister: {Default: false, PreRelease: featuregate.Alpha},
  1027  
  1028  	InTreePluginOpenStackUnregister: {Default: false, PreRelease: featuregate.Alpha},
  1029  
  1030  	InTreePluginPortworxUnregister: {Default: false, PreRelease: featuregate.Alpha},
  1031  
  1032  	InTreePluginvSphereUnregister: {Default: false, PreRelease: featuregate.Alpha},
  1033  
  1034  	JobBackoffLimitPerIndex: {Default: true, PreRelease: featuregate.Beta},
  1035  
  1036  	JobManagedBy: {Default: false, PreRelease: featuregate.Alpha},
  1037  
  1038  	JobPodFailurePolicy: {Default: true, PreRelease: featuregate.Beta},
  1039  
  1040  	JobPodReplacementPolicy: {Default: true, PreRelease: featuregate.Beta},
  1041  
  1042  	JobSuccessPolicy: {Default: false, PreRelease: featuregate.Alpha},
  1043  
  1044  	JobReadyPods: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.31
  1045  
  1046  	KubeletCgroupDriverFromCRI: {Default: false, PreRelease: featuregate.Alpha},
  1047  
  1048  	KubeletInUserNamespace: {Default: false, PreRelease: featuregate.Alpha},
  1049  
  1050  	KubeletPodResourcesDynamicResources: {Default: false, PreRelease: featuregate.Alpha},
  1051  
  1052  	KubeletPodResourcesGet: {Default: false, PreRelease: featuregate.Alpha},
  1053  
  1054  	KubeletSeparateDiskGC: {Default: false, PreRelease: featuregate.Alpha},
  1055  
  1056  	KubeletTracing: {Default: true, PreRelease: featuregate.Beta},
  1057  
  1058  	KubeProxyDrainingTerminatingNodes: {Default: true, PreRelease: featuregate.Beta},
  1059  
  1060  	LegacyServiceAccountTokenCleanUp: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // GA in 1.30; remove in 1.32
  1061  
  1062  	LocalStorageCapacityIsolationFSQuotaMonitoring: {Default: false, PreRelease: featuregate.Alpha},
  1063  
  1064  	LogarithmicScaleDown: {Default: true, PreRelease: featuregate.Beta},
  1065  
  1066  	MatchLabelKeysInPodAffinity: {Default: true, PreRelease: featuregate.Beta},
  1067  
  1068  	MatchLabelKeysInPodTopologySpread: {Default: true, PreRelease: featuregate.Beta},
  1069  
  1070  	MaxUnavailableStatefulSet: {Default: false, PreRelease: featuregate.Alpha},
  1071  
  1072  	MemoryManager: {Default: true, PreRelease: featuregate.Beta},
  1073  
  1074  	MemoryQoS: {Default: false, PreRelease: featuregate.Alpha},
  1075  
  1076  	MinDomainsInPodTopologySpread: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.32
  1077  
  1078  	MultiCIDRServiceAllocator: {Default: false, PreRelease: featuregate.Alpha},
  1079  
  1080  	NewVolumeManagerReconstruction: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.32
  1081  
  1082  	NFTablesProxyMode: {Default: true, PreRelease: featuregate.Beta},
  1083  
  1084  	NodeLogQuery: {Default: false, PreRelease: featuregate.Beta},
  1085  
  1086  	NodeOutOfServiceVolumeDetach: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.31
  1087  
  1088  	NodeSwap: {Default: true, PreRelease: featuregate.Beta},
  1089  
  1090  	PDBUnhealthyPodEvictionPolicy: {Default: true, PreRelease: featuregate.Beta},
  1091  
  1092  	PersistentVolumeLastPhaseTransitionTime: {Default: true, PreRelease: featuregate.Beta},
  1093  
  1094  	PodAndContainerStatsFromCRI: {Default: false, PreRelease: featuregate.Alpha},
  1095  
  1096  	PodDeletionCost: {Default: true, PreRelease: featuregate.Beta},
  1097  
  1098  	PodDisruptionConditions: {Default: true, PreRelease: featuregate.Beta},
  1099  
  1100  	PodReadyToStartContainersCondition: {Default: true, PreRelease: featuregate.Beta},
  1101  
  1102  	PodHostIPs: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.32
  1103  
  1104  	PodLifecycleSleepAction: {Default: true, PreRelease: featuregate.Beta},
  1105  
  1106  	PodSchedulingReadiness: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // GA in 1.30; remove in 1.32
  1107  
  1108  	PortForwardWebsockets: {Default: false, PreRelease: featuregate.Alpha},
  1109  
  1110  	ProcMountType: {Default: false, PreRelease: featuregate.Alpha},
  1111  
  1112  	QOSReserved: {Default: false, PreRelease: featuregate.Alpha},
  1113  
  1114  	ReadWriteOncePod: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.31
  1115  
  1116  	RecoverVolumeExpansionFailure: {Default: false, PreRelease: featuregate.Alpha},
  1117  
  1118  	RelaxedEnvironmentVariableValidation: {Default: false, PreRelease: featuregate.Alpha},
  1119  
  1120  	RotateKubeletServerCertificate: {Default: true, PreRelease: featuregate.Beta},
  1121  
  1122  	RuntimeClassInImageCriAPI: {Default: false, PreRelease: featuregate.Alpha},
  1123  
  1124  	ElasticIndexedJob: {Default: true, PreRelease: featuregate.Beta},
  1125  
  1126  	SchedulerQueueingHints: {Default: false, PreRelease: featuregate.Beta},
  1127  
  1128  	SeparateTaintEvictionController: {Default: true, PreRelease: featuregate.Beta},
  1129  
  1130  	ServiceAccountTokenJTI: {Default: true, PreRelease: featuregate.Beta},
  1131  
  1132  	ServiceAccountTokenPodNodeInfo: {Default: true, PreRelease: featuregate.Beta},
  1133  
  1134  	ServiceAccountTokenNodeBinding: {Default: false, PreRelease: featuregate.Alpha},
  1135  
  1136  	ServiceAccountTokenNodeBindingValidation: {Default: true, PreRelease: featuregate.Beta},
  1137  
  1138  	ServiceTrafficDistribution: {Default: false, PreRelease: featuregate.Alpha},
  1139  
  1140  	SidecarContainers: {Default: true, PreRelease: featuregate.Beta},
  1141  
  1142  	SizeMemoryBackedVolumes: {Default: true, PreRelease: featuregate.Beta},
  1143  
  1144  	StableLoadBalancerNodeSet: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // GA in 1.30, remove in 1.31
  1145  
  1146  	StatefulSetAutoDeletePVC: {Default: true, PreRelease: featuregate.Beta},
  1147  
  1148  	StatefulSetStartOrdinal: {Default: true, PreRelease: featuregate.Beta},
  1149  
  1150  	StorageVersionMigrator: {Default: false, PreRelease: featuregate.Alpha},
  1151  
  1152  	TopologyAwareHints: {Default: true, PreRelease: featuregate.Beta},
  1153  
  1154  	TopologyManagerPolicyAlphaOptions: {Default: false, PreRelease: featuregate.Alpha},
  1155  
  1156  	TopologyManagerPolicyBetaOptions: {Default: true, PreRelease: featuregate.Beta},
  1157  
  1158  	TopologyManagerPolicyOptions: {Default: true, PreRelease: featuregate.Beta},
  1159  
  1160  	TranslateStreamCloseWebsocketRequests: {Default: true, PreRelease: featuregate.Beta},
  1161  
  1162  	UnknownVersionInteroperabilityProxy: {Default: false, PreRelease: featuregate.Alpha},
  1163  
  1164  	VolumeAttributesClass: {Default: false, PreRelease: featuregate.Alpha},
  1165  
  1166  	VolumeCapacityPriority: {Default: false, PreRelease: featuregate.Alpha},
  1167  
  1168  	UserNamespacesSupport: {Default: false, PreRelease: featuregate.Beta},
  1169  
  1170  	WinDSR: {Default: false, PreRelease: featuregate.Alpha},
  1171  
  1172  	WinOverlay: {Default: true, PreRelease: featuregate.Beta},
  1173  
  1174  	WindowsHostNetwork: {Default: true, PreRelease: featuregate.Alpha},
  1175  
  1176  	NodeInclusionPolicyInPodTopologySpread: {Default: true, PreRelease: featuregate.Beta},
  1177  
  1178  	SELinuxMountReadWriteOncePod: {Default: true, PreRelease: featuregate.Beta},
  1179  
  1180  	InPlacePodVerticalScaling: {Default: false, PreRelease: featuregate.Alpha},
  1181  
  1182  	PodIndexLabel: {Default: true, PreRelease: featuregate.Beta},
  1183  
  1184  	LoadBalancerIPMode: {Default: true, PreRelease: featuregate.Beta},
  1185  
  1186  	UserNamespacesPodSecurityStandards: {Default: false, PreRelease: featuregate.Alpha},
  1187  
  1188  	SELinuxMount: {Default: false, PreRelease: featuregate.Alpha},
  1189  
  1190  	// inherited features from generic apiserver, relisted here to get a conflict if it is changed
  1191  	// unintentionally on either side:
  1192  
  1193  	genericfeatures.AdmissionWebhookMatchConditions: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.33
  1194  
  1195  	genericfeatures.AggregatedDiscoveryEndpoint: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.33
  1196  
  1197  	genericfeatures.APIListChunking: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.32
  1198  
  1199  	genericfeatures.APIPriorityAndFairness: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.31
  1200  
  1201  	genericfeatures.APIResponseCompression: {Default: true, PreRelease: featuregate.Beta},
  1202  
  1203  	genericfeatures.APIServerIdentity: {Default: true, PreRelease: featuregate.Beta},
  1204  
  1205  	genericfeatures.APIServerTracing: {Default: true, PreRelease: featuregate.Beta},
  1206  
  1207  	genericfeatures.APIServingWithRoutine: {Default: true, PreRelease: featuregate.Beta},
  1208  
  1209  	genericfeatures.ConsistentListFromCache: {Default: false, PreRelease: featuregate.Alpha},
  1210  
  1211  	genericfeatures.CustomResourceValidationExpressions: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.31
  1212  
  1213  	genericfeatures.EfficientWatchResumption: {Default: true, PreRelease: featuregate.GA, LockToDefault: true},
  1214  
  1215  	genericfeatures.KMSv1: {Default: false, PreRelease: featuregate.Deprecated},
  1216  
  1217  	genericfeatures.KMSv2: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.31
  1218  
  1219  	genericfeatures.KMSv2KDF: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.31
  1220  
  1221  	genericfeatures.MutatingAdmissionPolicy: {Default: false, PreRelease: featuregate.Alpha},
  1222  
  1223  	genericfeatures.OpenAPIEnums: {Default: true, PreRelease: featuregate.Beta},
  1224  
  1225  	genericfeatures.RemainingItemCount: {Default: true, PreRelease: featuregate.GA, LockToDefault: true},
  1226  
  1227  	genericfeatures.SeparateCacheWatchRPC: {Default: true, PreRelease: featuregate.Beta},
  1228  
  1229  	genericfeatures.ServerSideApply: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.29
  1230  
  1231  	genericfeatures.ServerSideFieldValidation: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.29
  1232  
  1233  	genericfeatures.StorageVersionAPI: {Default: false, PreRelease: featuregate.Alpha},
  1234  
  1235  	genericfeatures.StorageVersionHash: {Default: true, PreRelease: featuregate.Beta},
  1236  
  1237  	genericfeatures.StrictCostEnforcementForVAP: {Default: false, PreRelease: featuregate.Beta},
  1238  
  1239  	genericfeatures.StrictCostEnforcementForWebhooks: {Default: false, PreRelease: featuregate.Beta},
  1240  
  1241  	genericfeatures.StructuredAuthenticationConfiguration: {Default: true, PreRelease: featuregate.Beta},
  1242  
  1243  	genericfeatures.StructuredAuthorizationConfiguration: {Default: true, PreRelease: featuregate.Beta},
  1244  
  1245  	genericfeatures.UnauthenticatedHTTP2DOSMitigation: {Default: true, PreRelease: featuregate.Beta},
  1246  
  1247  	genericfeatures.ValidatingAdmissionPolicy: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.32
  1248  
  1249  	genericfeatures.WatchBookmark: {Default: true, PreRelease: featuregate.GA, LockToDefault: true},
  1250  
  1251  	genericfeatures.WatchFromStorageWithoutResourceVersion: {Default: false, PreRelease: featuregate.Beta},
  1252  
  1253  	genericfeatures.WatchList: {Default: false, PreRelease: featuregate.Alpha},
  1254  
  1255  	genericfeatures.ZeroLimitedNominalConcurrencyShares: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.32
  1256  
  1257  	// inherited features from apiextensions-apiserver, relisted here to get a conflict if it is changed
  1258  	// unintentionally on either side:
  1259  
  1260  	apiextensionsfeatures.CRDValidationRatcheting: {Default: true, PreRelease: featuregate.Beta},
  1261  
  1262  	apiextensionsfeatures.CustomResourceFieldSelectors: {Default: true, PreRelease: featuregate.Beta},
  1263  
  1264  	// features that enable backwards compatibility but are scheduled to be removed
  1265  	// ...
  1266  	HPAScaleToZero: {Default: false, PreRelease: featuregate.Alpha},
  1267  
  1268  	StorageNamespaceIndex: {Default: true, PreRelease: featuregate.Beta},
  1269  
  1270  	RecursiveReadOnlyMounts: {Default: false, PreRelease: featuregate.Alpha},
  1271  }