本页展示了如何启用或禁用特性门控以控制集群中特定的 Kubernetes 特性。启用特性门控允许你在 Alpha 或 Beta 特性成为正式可用(GA)之前对其进行测试和使用。
你需要有一个 Kubernetes 集群,并且必须配置 kubectl 命令行工具以与你的集群通信。建议在至少有两个节点的集群上运行本教程,且这些节点不能作为控制平面主机。如果你还没有集群,可以通过 minikube 创建一个,或者使用以下 Kubernetes 演练场之一。
你还需要
在启用特性门控之前,请检查特性门控参考以了解该特性的成熟度级别
不同的特性门控会影响不同的 Kubernetes 组件
特性门控参考通常会指出每个门控影响哪些组件。所有 Kubernetes 组件共享相同的特性门控定义,因此所有门控都会出现在帮助输出中,但只有相关的门控才会影响每个组件的行为。
创建一个配置文件,在相关组件中启用特性门控
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
初始化集群
kubeadm init --config kubeadm-config.yaml
对于 kubeadm 集群,可以在包括清单文件、配置文件和 kubeadm 配置在内的多个位置设置特性门控配置。
编辑 /etc/kubernetes/manifests/ 中的控制平面组件清单
对于 kube-apiserver、kube-controller-manager 或 kube-scheduler,将标志添加到命令中
spec:
containers:
- command:
- kube-apiserver
- --feature-gates=FeatureName=true
# ... other flags
保存文件。Pod 会自动重启。
对于 kubelet,编辑 /var/lib/kubelet/config.yaml
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
featureGates:
FeatureName: true
重启 kubelet
sudo systemctl restart kubelet
对于 kube-proxy,编辑 ConfigMap
kubectl -n kube-system edit configmap kube-proxy
将特性门控添加到配置中
featureGates:
FeatureName: true
重启 DaemonSet
kubectl -n kube-system rollout restart daemonset kube-proxy
对于命令行标志,请使用逗号分隔的列表
--feature-gates=FeatureA=true,FeatureB=false,FeatureC=true
对于支持配置文件的组件(kubelet、kube-proxy)
featureGates:
FeatureA: true
FeatureB: false
FeatureC: true
/etc/kubernetes/manifests/ 的静态 Pod 清单中的命令行标志进行配置。虽然这些组件支持通过 --config 标志使用配置文件,但 kubeadm 主要使用命令行标志。配置完成后,验证特性门控是否处于活动状态。以下方法适用于控制平面组件作为静态 Pod 运行的 kubeadm 集群。
查看静态 Pod 清单中配置的特性门控
kubectl -n kube-system get pod kube-apiserver-<node-name> -o yaml | grep feature-gates
使用 Kubelet 的 configz 端点
kubectl proxy --port=8001 &
curl -sSL "https://:8001/api/v1/nodes/<node-name>/proxy/configz" | grep featureGates -A 5
或者直接在节点上检查配置文件
cat /var/lib/kubelet/config.yaml | grep -A 10 featureGates
特性门控状态在 Kubernetes 组件的 Prometheus 风格指标中暴露(在 Kubernetes 1.26+ 中可用)。查询指标端点以验证启用了哪些特性门控
kubectl get --raw /metrics | grep kubernetes_feature_enabled
要检查特定的特性门控
kubectl get --raw /metrics | grep kubernetes_feature_enabled | grep FeatureName
指标显示 1 表示启用的门控,0 表示禁用的门控。
如果你有权访问组件的调试端点,并且该组件启用了 ComponentFlagz 特性门控,你可以通过访问 /flagz 端点来检查启动该组件时使用的命令行标志。使用命令行标志配置的特性门控会出现在此输出中。
/flagz 端点是 Kubernetes z-pages 的一部分,它为核心组件提供人类可读的运行时调试信息。
有关详细信息,请参阅 z-pages 文档。
组件特定特性门控的一些示例
StructuredAuthenticationConfiguration 这样的特性主要影响 kube-apiserverGracefulNodeShutdown 这样的特性主要影响 kubelet请务必先在非生产环境中测试特性门控。Alpha 特性可能会在不另行通知的情况下被移除。