设置组件实例调度策略
Kubernetes支持节点亲和、Pod亲和/反亲和。通过配置亲和与反亲和规则,可以允许您指定硬性限制或者偏好,例如将前台Pod和后台Pod部署在一起、某类应用部署到某些特定的节点、不同应用部署到不同的节点等等。
Kubernetes的亲和功能由节点和工作负载两种类型组成:
- 节点亲和:Kubernetes在调度工作负载时支持将节点作为亲和对象,将工作负载调度至具有指定标签和标签值的节点上。例如,某些节点支持使用GPU算力,则可以使用节点亲和调度,确保高性能计算的Pod最终运行在GPU节点上。
- 工作负载亲和/反亲和:工作负载亲和/反亲和调度是Kubernetes提供的任务调度方式,可以使用工作负载作为亲和对象,灵活地将新建的工作负载调度到与其相关或无关的节点上,可以有效地提高集群的性能和利用率。例如,通信频繁的前端Pod和后端Pod可优先调度到同一个节点或同一个可用区,减少网络延迟。
工作负载亲和性和反亲和性需要一定的计算时间,因此在大规模集群中会显著降低调度的速度。在包含数百个节点的集群中,不建议使用这类设置。
您可以根据实际业务需要,在设置组件“高级配置”时参考设置节点亲和调度策略、设置工作负载亲和/反亲和调度策略为容器部署方式部署的组件实例配置上述调度策略。
设置节点亲和调度策略
- 选择“高级配置 > 调度策略”。
- 选择节点“亲和性”调度的规则类型。
- 必须满足:必须满足的硬约束。添加多条“必须满足”规则时,只需要满足一条规则就会进行调度。
- 尽量满足:尽量满足的软约束。添加多条“尽量满足”规则时,满足其中一条或者都不满足也会进行调度。
- 单击“添加”。
- “对象类型”选择“节点”。
- 根据实际业务需要添加对象。
- 添加策略:单击“添加策略”,参考下表设置调度策略参数,可以自定义调度策略。
- 指定节点:单击“指定节点”,可以快速选择需要调度的节点,无需手动填写节点标签和标签值。指定节点使用的是kubernetes.io/hostname标签。
- 指定可用区:单击“指定可用区”,可以快速选择需要调度的可用区,无需手动填写可用区标签和标签值。指定可用区使用的是 failure-domain.beta.kubernetes.io/zone标签。
参数名称
参数说明
权重
2选择的策略类型是“尽量满足”时需设置。
调度器在进行调度时会将该权重加到其他优先级函数的评分上,最终将Pod调度到总分最大的节点上。
权重的取值范围为1-100。
标签名
单击“添加策略”自定义调度策略时,需填写需要匹配的节点标签。
操作符
- 单击“添加策略”自定义调度策略时,可设置如下匹配关系。
- In:亲和对象的标签在标签值列表(values字段)中。
- NotIn:亲和对象的标签不在标签值列表(values字段)中。
- Exists:亲和对象存在指定标签名。
- DoesNotExist:亲和对象不存在指定标签名。
- Gt:调度节点的标签值大于列表值 (字符串比较)。
- Lt:调度节点的标签值小于列表值 (字符串比较)。
- 设置“指定节点”或“指定可用区”调度策略时,可设置如下匹配关系。
- In:亲和对象的标签在标签值列表(values字段)中。
- NotIn:亲和对象的标签不在标签值列表(values字段)中。
标签值
单击“添加策略”自定义调度策略时,需根据选择的“操作符”填写节点“标签名”对应的标签值。
- “操作符”选择“In”、“NotIn”时,标签值填写字符串,多组标签值用分号(;)分割。例如:
str1;str2;str3
- “操作符”选择“Exists”、“DoesNotExist”时,无需填写标签值,即标签值可以为空。
- “操作符”选择“Gt”、“Lt”时,标签值填写整数,例如5或者-5。
- 单击“确定”,完成节点亲和调度策略的设置。
设置工作负载亲和/反亲和调度策略
- 选择“高级配置 > 调度策略”。
- 参考下表选择工作负载“亲和性”或“反亲和性”调度的规则类型。
调度策略
规则类型
说明
亲和性
必须满足
必须满足的硬约束。
通过标签筛选需要亲和的Pod,如果满足筛选条件的Pod已经运行在通过节点标签圈定的节点范围内的某个节点上,调度器会将本次创建的Pod强制调度到该节点范围。
说明:添加多条亲和性规则时,即设置多个标签进行筛选,Pod需要同时拥有所有标签才被视为满足目标筛选条件。
尽量满足
尽量满足的软约束。
通过标签筛选需要亲和的Pod,如果满足筛选条件的Pod已经运行在通过节点标签圈定的节点范围内的某个节点上,调度器会将本次创建的Pod优先调度到该节点范围。
说明:添加多条亲和性规则时,即设置多个标签进行筛选,Pod需要同时拥有所有标签才被视为满足目标筛选条件。
反亲和性
必须满足
必须满足的硬约束。
通过标签筛选需要反亲和的一个或多个Pod,如果满足筛选条件的Pod已经运行在通过节点标签圈定的节点范围内的某个节点上,调度器不会将本次创建的Pod调度到该节点范围。
说明:添加多条反亲和性规则时,即设置多个标签进行筛选,Pod拥有其中一个标签即被视为满足目标筛选条件。
尽量满足
尽量满足的软约束。
通过标签筛选需要反亲和的一个或多个Pod,如果满足筛选条件的Pod已经运行在通过节点标签圈定的节点范围内的某个节点上,调度器会将本次创建的Pod优先调度到其他节点范围。
说明:添加多条反亲和性规则时,即设置多个标签进行筛选,Pod拥有其中一个标签即被视为满足目标筛选条件。
- 单击“添加”。
- “对象类型”选择“工作负载”。
- 根据实际业务需要添加对象。
- 单击“添加策略”,可以自定义调度策略,根据节点标签实现灵活的调度策略。
- 单击“指定组件”,勾选需要调度的组件,单击“确定”,可以快速选择需要调度的组件,无需手动填写组件标签和标签值。
参数名称
参数说明
权重
2选择的策略类型是“尽量满足”时需设置。
调度器在进行调度时会将该权重加到其他优先级函数的评分上,最终将Pod调度到总分最大的节点上。
权重的取值范围为1-100。
命名空间
选择对象所在“命名空间”,用于指定调度策略生效的命名空间。
标签名
- 单击“添加策略”自定义调度策略时,需填写需要匹配的工作负载标签。
- 单击“指定组件”设置指定组件调度策略时,可以使用系统默认的标签,也可以使用自定义标签。
操作符
单击“添加策略”自定义调度策略时,需设置匹配关系。
- In:亲和/反亲和对象的标签在标签值列表(values字段)中。
- NotIn:亲和/反亲和对象的标签不在标签值列表(values字段)中。
- Exists:亲和/反亲和对象存在指定标签名。
- DoesNotExist:亲和/反亲和对象不存在指定标签名。
标签值
根据选择的“操作符”填写工作负载“标签名”对应的标签值。
- “操作符”选择“In”、“NotIn”时,标签值填写字符串,多组标签值用分号(;)分割。例如:
str1;str2;str3
- “操作符”选择“Exists”、“DoesNotExist”时,无需填写标签值,即标签值为空。
- 单击“确定”,完成工作负载亲和/反亲和调度策略的设置。