针对虚拟节点,ACK托管集群(Pro版和基础版)和ACK专有集群支持的调度方式不同,且有其特定的使用场景,例如直接指定Pod只调度到虚拟节点、跨可用区打散等。您可以依据调度场景以及集群类型,参考本文选择合适的调度方式。
常见虚拟节点调度场景
只调度到虚拟节点。
优先调度到ECS节点,在ECS节点资源不足时,再将Pod调度到虚拟节点。
在ACK集群基础版中,调度场景1推荐您使用label alibabacloud.com/eci=true
完成,调度场景2推荐您升级至ACK集群Pro版,以获取更丰富的产品层次能力、更高等级可靠性、SLA保障和更大集群容量。ACK支持ACK集群基础版无缝迁移到ACK集群Pro版,请参见 热迁移ACK集群基础版至ACK集群Pro版。
注意事项
使用Label
alibabacloud.com/eci=true
的方式优先级较高。如果与如下调度方式混用,会导致如下调度方式失效。Kubernetes原生调度语义(nodeSelector、亲和性与反亲和性、Pod拓扑分布约束)
ResourcePolicy
ElasticResource(Annotation:
alibabacloud.com/burst-resource
)
不推荐您使用ElasticWorkload和ElasticResource(Annotation:
alibabacloud.com/burst-resource
),这些组件或注解处于非活跃开发状态。virtual-kubelet-autoscaler组件目前处于停止维护状态。推荐您将ACK集群基础版升级至ACK集群Pro版,并卸载该组件,避免占用节点资源。您可以基于Kubernetes原生调度语义实现ECI Pod的打散部署及亲和部署。具体操作,请参见实现ECI Pod可用区打散以及亲和调度。
方案对比及选型建议
关于表格中字段的说明:
优先级调度:集群中存在不同的节点类型时,可以自行配置Pod调度到不同节点类型的优先级。例如优先调度到ECS节点,ECS节点不足时再调度到虚拟节点。
如果某种方式不支持优先级调度,表明使用该方式时,无法对不同节点集合进行优先级编排。例如通过
alibabacloud.com/eci=true
只能将指定Pod调度到虚拟节点,无法将Pod优先调度到ECS,在ECS资源不足时再调度到虚拟节点。严格的调度策略:调度到不同类型节点池时的规则是否为强约束。
非严格的调度策略为软约束。例如,节点亲和性的preferredDuringSchedulingIgnoredDuringExecution会优先调度到ECS节点,但可能会在节点综合打分策略影响下,在ECS节点资源尚存时仍旧调度到虚拟节点。
严格的调度策略为硬约束。例如,ResourcePolicy能够保证在ECS节点的资源满足Pod需求时一定将Pod调度到ECS节点上。
ACK集群Pro版
调度方式 | 典型场景 | 优先级调度 | 优先缩容ECI Pod | 是否推荐使用 | 相关操作文档 | |
labels: | 指定只调度到虚拟节点,但不支持指定是哪一个虚拟节点。 | 不支持 | 不涉及 | 推荐 | ||
Kubernetes原生调度语义 | nodeSelector | 添加Toleration后,指定只调度到虚拟节点上,同时可以指定调度到哪一个虚拟节点。 | 不支持 | 不涉及 | 推荐 | |
亲和性与反亲和性 | 通过Taint、Toleration和NodeAffinity,指定只调度到ECI、只调度到ECS或优先调度到ECS(例如在ECS节点资源不足时调度到虚拟节点),是一种弹性调度策略。 同时支持(且仅支持)先缩容ECI,再缩容ECS。 | 支持(非严格的调度策略) | 支持 | 推荐 | ||
Pod拓扑分布约束 | 跨可用区打散,实现高可用和高性能调度需求。 | 不支持 | 支持 | 推荐 | ||
ResourcePolicy |
| 支持(严格的调度策略) | 支持 | 推荐 | ||
UnitedDeployment | 支持根据Deployment应用副本数制定调度到ECS或虚拟节点的策略,例如,副本数10以内优先使用包年包月的ECS资源,超出10个不超出20个的使用Spot资源,超出20个的再使用ECI资源。 | 支持 | 支持 | 推荐 | ||
ElasticWorkload (非活跃开发状态,建议使用UnitedDeployment) | 将Deployment副本进行分组调到ECS或虚拟节点。 | 支持 | 支持 | 不推荐 | ||
ElasticResource(Annotation: (非活跃开发状态) | 仅支持两种弹性调度策略:
| 支持 | 支持 | 不推荐 | ||
virtual-kubelet-autoscaler组件 (已停止维护) | 仅支持优先调度到ECS节点,在ECS节点资源不足时再调度到虚拟节点。 | 支持 | 支持 | 不推荐 | 无 |
ACK集群基础版和ACK专有集群
调度方式 | 典型场景 | 优先级调度 | 优先缩容ECI Pod | 是否推荐使用 | 相关操作文档 | |
labels: | 指定只调度到虚拟节点,但不支持指定是哪一个虚拟节点。 | 不支持 | 不涉及 | 推荐 | ||
UnitedDeployment | 支持根据Deployment应用副本数制定调度到ECS或虚拟节点的策略,例如,副本数10以内优先使用包年包月的ECS资源,超出10个不超出20个的使用Spot资源,超出20个的再使用ECI资源。 | 支持 | 支持 | 推荐 | ||
Kubernetes原生调度语义 | nodeSelector | 添加Toleration后,指定只调度到虚拟节点上,同时可以指定调度到哪一个虚拟节点。 | 不支持 | 支持 | 不推荐 相比于ACK集群Pro版,ACK集群基础版和ACK专有集群中的kube-scheduler在Pod调度时无法感知底层库存情况,所以生产成功的确定性会降低。 | |
亲和性与反亲和性 | 通过Taint、Toleration和NodeAffinity,指定只调度到ECI、只调度到ECS或优先调度到ECS(例如在ECS节点资源不足时调度到虚拟节点),是一种弹性调度策略。 | 支持(非严格的调度策略) | 支持 | |||
Pod拓扑分布约束 | 跨可用区打散,实现高可用和高性能调度需求。 | 不支持 | 支持 | |||
ElasticWorkload (非活跃开发状态,建议使用UnitedDeployment) | 将Deployment副本进行分组调到ECS或虚拟节点。 | 支持 | 支持 | 不推荐 | ||
ElasticResource(Annotation: (非活跃开发状态) | 仅支持两种弹性调度策略:
| 支持 | 支持 | 不推荐 | ||
virtual-kubelet-autoscaler组件 (已停止维护) | 仅支持优先调度到ECS节点,在ECS节点资源不足时再调度到虚拟节点。 | 支持 | 支持 | 不推荐 | 无 |