文档中心>容器服务>实践教程>网络>TKE VPC-CNI 集群 Node Taint 与 Condition 配置指南

TKE VPC-CNI 集群 Node Taint 与 Condition 配置指南

最近更新时间:2026-03-26 14:35:55

我的收藏

概述

在 TKE VPC-CNI 网络模式(共享网卡或独立网卡)的集群中,节点加入集群后,ENI 网络资源(扩展资源)的初始化需要一定时间。在这段时间内,节点的 .status.allocatable 中对应的 ENI 资源为 0 或不存在,Pod 实际上无法获得网络地址。
ipamd 组件提供了 Node TaintNode Condition 两项功能,用于标记节点 ENI 网络资源的就绪状态。这两项功能可以:
阻止 Pod 在网络资源未就绪的节点上被调度(Taint)
让 Cluster Autoscaler(CA)等组件正确感知节点是否可用(Condition)
建议所有 VPC-CNI 集群都同时开启这两项功能,尤其是使用 CA 自动扩缩容的场景。
两种网卡模式对应的资源对照如下:
网卡模式
Taint Key
扩展资源
Node Condition 类型
共享网卡
tke.cloud.tencent.com/eni-ip-unavailable
tke.cloud.tencent.com/eni-ip
RouteENINetworkUnavailable
独立网卡
tke.cloud.tencent.com/direct-eni-unavailable
tke.cloud.tencent.com/direct-eni
DirectENINetworkUnavailable

原理

整体流程

节点 ENI 网络资源从不可用到可用的完整流程如下:
1. 节点加入集群:管控面为 Node 添加 Taint(效果为 NoSchedule),标记网络资源尚未就绪。例如共享网卡模式下添加 tke.cloud.tencent.com/eni-ip-unavailable=true:NoSchedule
2. ipamd 初始化网络资源:ipamd 组件在节点上启动后,开始为节点绑定弹性网卡(ENI)、分配辅助 IP 地址,并将可用的 IP 资源数量上报到节点的 .status.allocatable 中。
3. ipamd 周期性同步状态:ipamd 周期性检查节点的 .status.allocatable 中对应扩展资源是否大于 0:
资源为 0 或不存在:保留 Taint(阻止 Pod 调度),将 Condition 设为 True(告知 CA 节点未就绪)。
资源大于 0:移除 Taint(允许 Pod 调度),将 Condition 设为 False(告知 CA 节点已就绪)。

Taint 的作用

Taint 的效果为 NoSchedule,作用于 kube-scheduler 的调度决策。当节点存在该 Taint 时,没有对应 toleration 的 Pod 不会被调度到该节点上。这确保了 Pod 不会因为缺少 ENI IP 而启动失败。
需要注意的是,ipamd、scheduler 等系统组件自身已配置了对应的 toleration,不受此 Taint 影响,可以正常在有 Taint 的节点上运行。

Condition 的作用

社区的 Cluster Autoscaler(CA)组件不支持直接感知 Kubernetes 扩展资源。通过 Node Condition 将 ENI 资源的就绪状态映射为 CA 可识别的节点条件,CA 就能正确判断节点是否真正就绪、是否需要继续扩容新节点。

关闭 Taint 以及 Condition 的影响

当 Taint 以及 Condition 相关的参数被配置为 false 时,ipamd 会主动移除管控面在节点加入时添加的 Taint。
在使用 CA 的场景下,这会导致如下问题:
1. 新节点加入集群,管控面添加 Taint。
2. ipamd 主动移除 Taint。
3. CA 检查节点状态:无 Taint、Ready = True,因此 CA 认为节点已就绪。
4. CA 模拟调度 Pending Pod 到该节点,但因 eni-ip allocatable = 0,调度失败。
5. CA 基于模板匹配,判断现有节点不足,继续触发扩容。
6. 新扩容的节点重复上述过程,形成持续异常扩容。

如何判断当前集群是否开启 Taint 以及 Condition 特性

当前增量 TKE 集群已经默认开启 Taint 以及 Condition 特性。较早创建(2025 年以前)的集群需要按照如下的步骤检查特性是否开启:
1. 登录 容器服务控制台,选择左侧导航中的集群
2. 在集群页面,选择目标集群名称,进入集群详情页。
3. 选择左侧导航栏中的组件管理,在组件页面选择 eniipamd 组件右侧的修改全局配置

4. 在全局配置中搜索nodeConditionsTaints,查看enableConditions以及enableTaints选项是否为 true。

5. 如果需要对enableConditions以及enableTaints配置项进行调整,则可以在本界面进行调整后保存退出即可。