集群节点规划
集群使用格式为 node-role.kubernetes.io/<role> 的 Kubernetes 节点角色标签为节点分配不同角色。在本文中,role label 指的是这类标签。
默认情况下,集群包含两类节点:控制平面节点和工作节点,分别用于承载控制平面工作负载和应用工作负载。
在集群中:
-
控制平面节点会被标记为角色标签
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 节点,用于专门承载日志组件。
结合角色标签和 taint 创建 infra 节点或自定义角色节点,然后在工作负载隔离需要时,将选定的工作负载迁移到这些节点上。
目录
在非不可变集群上创建 Infra 节点添加 Infra 节点步骤 1:为 Node 资源添加 Infra 角色标签步骤 2:为 Node 资源添加 Taint步骤 3:验证标签和 Taint将 Pod 迁移到 Infra 节点自定义节点规划定义自定义角色节点的一般步骤步骤 1:添加自定义角色标签步骤 2:添加对应的 Taint步骤 3:验证配置示例:创建一个专用于日志组件的节点步骤 1:添加 Log 角色标签步骤 2:为节点添加 Taint步骤 3:验证标签和 Taint在非不可变集群上创建 Infra 节点
默认情况下,集群只包含控制平面节点和工作节点。如果你希望将某些工作节点指定为专用于承载基础设施组件的 infra 节点,则需要手动为这些节点添加相应的角色标签和 taint。
注意:
本节中的操作仅适用于非不可变集群。不要将这些操作用于由云提供商管理的集群、第三方集群,或节点使用不可变 OS 的集群。
添加 Infra 节点
步骤 1:为 Node 资源添加 Infra 角色标签
该命令会向 Node 192.168.143.133 添加 infra 角色标签:node-role.kubernetes.io/infra: "",表示该节点是 infra 节点。
步骤 2:为 Node 资源添加 Taint
添加 taint 以防止其他工作负载被调度到 infra 节点上。
该命令会向 Node 192.168.143.133 添加 taint node-role.kubernetes.io/infra=reserved:NoSchedule,表示只有容忍此 taint 的应用才能被调度到该节点上。
步骤 3:验证标签和 Taint
检查节点是否已被分配 infra 角色标签和 taint:
输出表明 Node 192.168.143.133 已配置为 infra 节点,并带有 node-role.kubernetes.io/infra=reserved:NoSchedule taint。
将 Pod 迁移到 Infra 节点
如果你希望将特定 Pod 调度到 infra 节点上,需要进行以下配置:
- 指向 infra 角色标签的 nodeSelector。
- 与 infra 节点 taint 对应的 toleration。
下面是一个配置为在 infra 节点上运行的 Pod 清单示例。
nodeSelector 确保该 Pod 只会被调度到带有 node-role.kubernetes.io/infra: "" 标签的节点上,而 toleration 允许该 Pod 容忍 taint node-role.kubernetes.io/infra=reserved:NoSchedule。
通过这些配置,Pod 将被调度到 infra 节点上。
注意:
通过 OLM Operators 或 Cluster Plugins 安装的 pods 并不总是可以迁移到 infra 节点。能否移动这些 pods 取决于各个 Operator 或 Cluster Plugin 的配置。
自定义节点规划
除了 infra 节点之外,你可能还希望为其他专用用途指定工作节点,例如承载日志组件、存储服务或监控 agent。
你可以通过为工作节点分配更多自定义角色标签及其对应的 taint,来实现这一点,从而有效地将它们转变为自定义角色节点。
定义自定义角色节点的一般步骤
该过程与创建 infra 节点类似。
步骤 1:添加自定义角色标签
将 <role> 替换为你期望的角色名称,例如 monitoring、storage 或 log。
步骤 2:添加对应的 Taint
将 <role> 替换为你的自定义角色名称,并将 <value> 替换为有意义的描述,例如 reserved 或 dedicated。该值是可选的,但可以帮助运维人员理解调度意图。
步骤 3:验证配置
确保 Labels 和 Taints 字段反映了你的自定义角色配置。
示例:创建一个专用于日志组件的节点
如果你想创建一个专门用于安装日志组件的节点,可以添加 log 角色。在这种情况下,按如下方式创建 log 节点。
步骤 1:添加 Log 角色标签
该标签表示此节点被指定用于与日志相关的工作负载。
步骤 2:为节点添加 Taint
该 taint 可防止未被调度的工作负载部署到该节点上。
步骤 3:验证标签和 Taint
这将确认该节点已成功配置为带有相应标签和 taint 的 log 节点。
使用角色标签和 taint 按用途对 Kubernetes 节点进行分区,提升工作负载隔离能力,并将选定组件调度到配置适当的节点上。