Enable Or Disable Feature Gates
This page shows how to enable or disable feature gates to control specific Kubernetes features in your cluster. Enabling feature gates allows you to test and use Alpha or Beta features before they become generally available.
Note:
For some stable (GA) gates, you can also disable them, usually for one minor release after GA; however if you do that, your cluster may not be conformant as Kubernetes.Before you begin
You need to have a Kubernetes cluster, and the kubectl command-line tool must be configured to communicate with your cluster. It is recommended to run this tutorial on a cluster with at least two nodes that are not acting as control plane hosts. If you do not already have a cluster, you can create one by using minikube or you can use one of these Kubernetes playgrounds:
You also need:
- Administrative access to your cluster
- Knowledge of which feature gate you want to enable (see the Feature Gates reference)
Note:
GA (stable) features are always enabled by default. You typically configure gates for Alpha or Beta features.Understand feature gate maturity
Before enabling a feature gate, check the Feature Gates reference for the feature's maturity level:
- Alpha: Disabled by default, may be buggy. Use only in test clusters.
- Beta: Usually enabled by default, well-tested.
- GA: Always enabled by default; can sometimes be disabled for one release after GA.
Identify which components need the feature gate
Different feature gates affect different Kubernetes components:
- Some features require enabling the gate on multiple components (e.g., API server and controller manager)
- Other features only need the gate on a single component (e.g., only kubelet)
The Feature Gates reference typically indicates which components are affected by each gate. All Kubernetes components share the same feature gate definitions, so all gates appear in help output, but only relevant gates affect each component's behavior.
Configuration
During cluster initialization
Create a configuration file to enable feature gates across relevant components:
apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
apiServer:
extraArgs:
feature-gates: "FeatureName=true"
controllerManager:
extraArgs:
feature-gates: "FeatureName=true"
scheduler:
extraArgs:
feature-gates: "FeatureName=true"
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
featureGates:
FeatureName: true
Initialize the cluster:
kubeadm init --config kubeadm-config.yaml
On an existing cluster
For kubeadm clusters, feature gate configuration can be set in several locations including manifest files, configuration files, and kubeadm configuration.
Edit control plane component manifests in /etc/kubernetes/manifests/:
For kube-apiserver, kube-controller-manager, or kube-scheduler, add the flag to the command:
spec: containers: - command: - kube-apiserver - --feature-gates=FeatureName=true # ... other flagsSave the file. The pod restarts automatically.
For kubelet, edit
/var/lib/kubelet/config.yaml:apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration featureGates: FeatureName: trueRestart kubelet:
sudo systemctl restart kubeletFor kube-proxy, edit the ConfigMap:
kubectl -n kube-system edit configmap kube-proxyAdd feature gates to the configuration:
featureGates: FeatureName: trueRestart the DaemonSet:
kubectl -n kube-system rollout restart daemonset kube-proxy
Configure multiple feature gates
Use comma-separated lists for command-line flags:
--feature-gates=FeatureA=true,FeatureB=false,FeatureC=true
For components that support configuration files (kubelet, kube-proxy):
featureGates:
FeatureA: true
FeatureB: false
FeatureC: true
Note:
In kubeadm clusters, control plane components (kube-apiserver, kube-controller-manager, and kube-scheduler) are typically configured via command-line flags in their static pod manifests located at/etc/kubernetes/manifests/. While these components support
configuration files via the --config flag, kubeadm primarily uses command-line flags.Verify feature gate configuration
After configuring, verify the feature gates are active. The following methods apply to kubeadm clusters where control plane components run as static pods.
Check control plane component manifests
View the feature gates configured in the static pod manifest:
kubectl -n kube-system get pod kube-apiserver-<node-name> -o yaml | grep feature-gates
Check kubelet configuration
Use the kubelet's configz endpoint:
kubectl proxy --port=8001 &
curl -sSL "http://localhost:8001/api/v1/nodes/<node-name>/proxy/configz" | grep featureGates -A 5
Or check the configuration file directly on the node:
cat /var/lib/kubelet/config.yaml | grep -A 10 featureGates
Check via metrics endpoint
Feature gate status is exposed in Prometheus-style metrics by Kubernetes components (available in Kubernetes 1.26+). Query the metrics endpoint to verify which feature gates are enabled:
kubectl get --raw /metrics | grep kubernetes_feature_enabled
To check a specific feature gate:
kubectl get --raw /metrics | grep kubernetes_feature_enabled | grep FeatureName
The metric shows 1 for enabled gates and 0 for disabled gates.
Note:
In kubeadm clusters, verify all relevant locations where feature gates might be configured, as the configuration is distributed across multiple files and locations.Understanding component-specific requirements
Some examples of component-specific feature gates:
- API server-focused: Features like
StructuredAuthenticationConfigurationprimarily affect kube-apiserver - Kubelet-focused: Features like
GracefulNodeShutdownprimarily affect kubelet - Multiple components: Some features require coordination between components
Caution:
When a feature requires multiple components, you must enable the gate on all relevant components. Enabling it on only some components may result in unexpected behavior or errors.Always test feature gates in non-production environments first. Alpha features may be removed without notice.
What's next
- Read the Feature Gates reference
- Learn about Feature Stages
- Review kubeadm configuration