集群利用 Kubernetes 节点角色标签 node-role.kubernetes.io/<role>
来为节点分配不同的角色。为了描述方便,我们将此类标签称为角色标签。
默认情况下,集群包含两种类型的节点:控制平面节点和工作节点,分别用于承载控制平面工作负载和应用工作负载。
在集群中:
控制平面节点带有角色标签 node-role.kubernetes.io/control-plane
。
注意:
在 Kubernetes v1.24 之前,社区也使用标签
node-role.kubernetes.io/master
来标记控制平面节点。为兼容历史版本,两个标签均被视为识别控制平面节点的有效标签。
工作节点默认没有角色标签,但你可以根据需要显式为工作节点分配角色标签 node-role.kubernetes.io/worker
。
除了这些默认的角色标签外,你还可以在工作节点上定义自定义角色标签,以进一步将其划分为不同的功能类型。例如:
你可以添加角色标签 node-role.kubernetes.io/infra
,将节点指定为 infra 节点,用于承载基础设施组件。
你可以添加角色标签 node-role.kubernetes.io/log
,将节点指定为 log 节点,专门用于承载日志组件。
本文档将指导你如何创建 infra 节点和自定义角色节点,并将工作负载迁移到这些节点上。
默认情况下,集群仅包含控制平面节点和工作节点。如果你想将某些工作节点指定为专门承载基础设施组件的 infra 节点,需要手动为这些节点添加相应的角色标签和污点。
注意:
本节操作仅适用于非不可变集群。即以下操作不支持在云集群(如通过
Alauda Container Platform EKS Provider
集群插件部署的 EKS 托管集群)、第三方集群或节点使用不可变操作系统的集群上执行。
该命令为节点 192.168.143.133 添加 infra 角色标签:node-role.kubernetes.io/infra: ""
,表示该节点为 infra 节点。
为防止其他工作负载调度到 infra 节点,添加污点。
该命令为节点 192.168.143.133 添加污点 node-role.kubernetes.io/infra=reserved:NoSchedule
,表示只有容忍该污点的应用才能调度到此节点。
检查节点是否已被赋予 infra 角色标签和污点:
输出表明节点 192.168.143.133 已被配置为 infra 节点,并带有污点 node-role.kubernetes.io/infra=reserved:NoSchedule
。
如果你想将特定 Pod 调度到 infra 节点,需要进行如下配置:
下面是一个配置为运行在 infra 节点上的 Deployment 示例清单。
nodeSelector 确保 Pod 仅调度到带有标签 node-role.kubernetes.io/infra: ""
的节点,
容忍配置允许 Pod 容忍污点 node-role.kubernetes.io/infra=reserved:NoSchedule
。
通过这些配置,Pod 将被调度到 infra 节点。
注意:
通过 OLM Operator 或集群插件安装的 Pod 不一定能迁移到 infra 节点,是否支持迁移取决于各 Operator 或集群插件的配置。
除了 infra 节点,你可能还希望将工作节点指定为其他专用用途——例如承载日志组件、存储服务或监控代理。
你可以通过为工作节点分配更多自定义角色标签及相应污点,将其转变为自定义角色节点。
流程与创建 infra 节点类似。
将 <role> 替换为你期望的角色名称,如 monitoring、storage 或 log。
将 <role> 替换为自定义角色名称,<value> 替换为有意义的描述符,如 reserved 或 dedicated。该值为可选,但有助于文档说明和清晰度。
确保 Labels 和 Taints 字段反映了你的自定义角色配置。
如果你想创建专门安装日志组件的节点,可以添加 log 角色。具体操作如下。
该标签表示该节点被指定用于日志相关工作负载。
该污点防止未容忍该污点的工作负载调度到该节点。
这表明节点已成功配置为 log 节点,并带有相应的标签和污点。
通过以上实践,你可以根据节点的预期用途有效地划分 Kubernetes 节点,提升工作负载隔离性,确保特定组件部署到配置合适的节点上。