Kubernetes添加feature-gate支持
开启临时容器(ephemeral containers),临时容器是 Kubernetes 中用于调试 Pod 的一种机制,但它需要在集群中启用相关特性才能使用。
env
- kubernetes-v1.19
- centos8
feature-gate添加EphemeralContainers=true
1. 确认 Kubernetes 版本
临时容器功能在 Kubernetes 1.16 中引入为 Alpha 特性,在 1.23 中升级为 Beta,默认情况下可能仍未启用。你需要确认当前集群的版本是否支持临时容器。
运行以下命令检查版本:
1 | kubectl version |
输出会显示客户端和服务器的版本:
Client Version: v1.26.0
Server Version: v1.25.3
如果版本低于 1.16,则不支持临时容器,需升级集群。
2. 检查是否启用了临时容器功能
即使版本支持,临时容器可能被禁用。Kubernetes 的 API Server 需要启用 EphemeralContainers
特性门(Feature Gate)。
- 如果你是集群管理员,可以检查 API Server 的启动参数。通常在
--feature-gates
参数中查找是否包含EphemeralContainers=true
- 查看 API Server 的配置(例如在
/etc/kubernetes/manifests/kube-apiserver.yaml
中):1
2
3
4
5
6
7
8spec:
containers:
- command:
- kube-apiserver
- --feature-gates=EphemeralContainers=true
# or
- --feature-gates=TTLAfterFinished=true,EphemeralContainers=true
如果存在- –feature-gates=xxxx,EphemeralContainers=true
如果没有启用,且你有权限,可以修改配置并重启 API Server:
1 | kubectl -n kube-system edit pod kube-apiserver-<node-name> |
添加或修改 --feature-gates
,然后保存并等待 Pod 重启。
开启特性支持临时容器,需要开启支持临时容器的特性:
- kube-apiserver.yaml
- kubelet配置
EphemeralContainers=true
/etc/kubernetes/manifests/kube-apiserver.yaml
--feature-gates=EphemeralContainers=true
/etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--feature-gates=EphemeralContainers=true"
#修改之后重启k8s控制节点和工作节点的kubelet
[root@xianchaomaster1]# systemctl restart kubelet
feature-gate介绍
在 Kubernetes 中,Feature Gates 是用于启用或禁用特定功能的键值对参数。每个 Kubernetes 版本都会引入、更新或移除一些 Feature Gates,这些功能的生命周期通常分为 Alpha、Beta 和 GA(General Availability)三个阶段。以下是对 Kubernetes 每个版本 Feature Gate 支持参数的概述,以及如何找到具体版本的详细信息。
Feature Gates 的基本概念
- Alpha 阶段:功能默认禁用,可能存在 bug,仅推荐用于测试环境。
- Beta 阶段:功能默认启用(某些情况下可能仍需手动开启),经过较好测试,API 可能会有变化。
- GA 阶段:功能稳定,默认启用,无法通过 Feature Gate 禁用。
Feature Gates 通过 --feature-gates
命令行标志在 Kubernetes 组件(如 kube-apiserver、kubelet 等)上配置。例如:
--feature-gates=FeatureName=true
--feature-gates=FeatureName=true,FeatureName1=true
⚠️:组件通常包括 kube-apiserver、kube-controller-manager、kube-scheduler 和 kubelet。看添加特性涉及到那些组件,不涉及不需要修改!!!
如何查看每个版本的 Feature Gate 支持参数
Kubernetes 官方文档提供了每个版本的 Feature Gate 列表,具体位置在:
最新版本 Feature Gates:https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/
历史版本:在 Kubernetes 文档的归档版本中,例如
v1-XX.docs.kubernetes.io
(如 v1-18.docs.kubernetes.io)。https://v1-31.docs.kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/
每个版本的文档会列出:
- 新增的 Feature Gates:在该版本引入的功能。
- 状态变更:从 Alpha 升级到 Beta,或从 Beta 升级到 GA。
- 移除的 Feature Gates:已达到 GA 或被废弃的功能。
部分版本的 Feature Gate 演变
以下是一些常见 Feature Gate 在不同版本中的变化(基于截至 2025 年 3 月 19 日的知识):
Kubernetes 1.13
- VolumeSnapshotDataSource:Alpha 阶段,支持卷快照数据源。
- TaintBasedEvictions:Beta 阶段,基于节点污点驱逐 Pod。
Kubernetes 1.18
- ImmutableEphemeralVolumes:Alpha 阶段,允许将 Secrets 和 ConfigMaps 标记为不可变。
- HugePages:GA 阶段,支持预分配大页内存。
Kubernetes 1.26
- SidecarContainers:Alpha 阶段,支持将 Sidecar 容器作为 init 容器运行。
- APIServerTracing:Beta 阶段,API 服务器跟踪功能。
Kubernetes 1.29
- SidecarContainers:升级到 Beta 阶段,默认启用。
- KubeletInUserNamespace:Alpha 阶段,允许 Kubelet 在用户命名空间中运行。
如何查询特定版本的 Feature Gate
官方文档:
- 访问 Kubernetes 文档对应版本的 Feature Gates 页面。例如,对于 v1.29,可以查找
https://v1-29.docs.kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/
。 - 检查表格,列出所有 Feature Gates 的名称、默认状态及引入版本。
- 访问 Kubernetes 文档对应版本的 Feature Gates 页面。例如,对于 v1.29,可以查找
运行时检查(1.26+):
- 从 Kubernetes 1.26 开始,可以通过
/metrics
端点检查集群中启用的 Feature Gates:
kubectl get –raw /metrics | grep kubernetes_feature_enabled - 输出示例:
kubernetes_feature_enabled{name=”SidecarContainers”,stage=”BETA”} 1
其中1
表示启用,0
表示禁用。
- 从 Kubernetes 1.26 开始,可以通过
源码检查:
- 在 Kubernetes GitHub 仓库的
pkg/features/kube_features.go
文件中,可以找到所有 Feature Gates 的定义及其默认状态。
- 在 Kubernetes GitHub 仓库的
注意事项
- 云托管服务(如 GKE、AKS、EKS):某些托管服务可能限制 Feature Gate 的修改。例如,GKE 默认启用 Beta 功能,但 Alpha 功能需要创建 Alpha 集群。
- 向后兼容性:升级 Kubernetes 时,需检查 Feature Gate 是否已被移除或默认行为是否改变。