您可以通过ACK One舰队的应用分发功能将舰队实例中的应用分发至多个关联集群中。通过在舰队实例中定义分发策略,精准选择出符合条件的Kubernetes资源,并将其分发至策略指定的多个目标集群中。您还可以定义差异化策略来选择需要差异化部署的集群以及应用。相比于GitOps方式,它无需依赖Git仓库。
工作原理
您可以在舰队实例中创建应用资源,通过定义PropagationPolicy
、ClusterPropagationPolicy
分发策略,选择将哪些资源分发至关联集群中。也可以定义OverridePolicy
、ClusterOverridePolicy
差异化策略,对需要分发的资源根据关联集群的需求进行差异化修改。
PropagationPolicy
和Overridepolicy
只有在初始化时需要创建。创建之后,二者会持续生效,您可以通过PropagationPolicy
选中需要发布部署的应用,通过Overridepolicy
进行应用资源的差异化配置。后续您对舰队中应用资源的升级或修改会直接持续发布部署到您的子集群中。您可以通过AMC插件查看子集群的应用分发状态。
高级功能
支持对于Workload的静态权重和动态调度
在多集群应用分发场景中,舰队实例提供基于分发策略驱动的副本调度机制。支持两种维度的工作负载副本分配策略:
静态权重分配策略:集群管理员可以通过配置分发策略赋予目标集群不同的权重系数,调度器按照归一化权重值按比例分配副本。详细配置方式,请参见replicaScheduling参数说明。
动态资源比例分配策略:调度器会根据各个集群的可用资源来计算最多容纳Pod的数量,并以此数量作为集群的权重来确定最终的副本分配数。详细配置方式,请参见动态分发和重调度。
支持重调度
在多集群应用分发场景中,由于集群可用资源的动态变化,工作负载可能会因优先级不足或资源不足等原因导致调度失败。当目标集群的工作负载处于调度失败状态时,重调度器会将调度失败的副本进行重新调度,并执行跨集群的副本迁移操作,从而确保工作负载的正常运行。重调度能力默认启用,若您需要验证重调度能力,请参见验证重调度能力。
支持应用级别的故障迁移
在多集群任务作业场景中,通过在线业务和离线作业混部可以提升资源利用率。为避免离线作业对在线业务造成影响,任务作业通常以低优先级运行,或使用Spot抢占实例。在这种情况下,任务可能会因为节点异常、高优先级Pod抢占、Spot实例释放等原因运行失败。
针对以上问题,舰队实例提供应用级别的故障转移。当作业任务运行失败时,故障迁移会自动将该目标集群的作业任务迁移到其他集群继续运行,无需手动干预。详细步骤请参见如何在舰队实例中使用KubeQueue并通过Gang调度PyTorchJob。
支持多集群Gang调度
Gang调度主要用于确保一组关联的Pod能够同时调度到集群中的节点上,若无法满足该条件,则这些Pod都不会被调度。这一机制解决了原生调度器无法支持All-or-Nothing作业调度的问题。多集群Gang调度则是从多集群角度出发,采用预占或动态资源检测的方式,将作业的一组关联Pod都运行在同一集群内。
在使用PyTorchJob、TFJob等实现多机多卡分布式训练,或者使用SparkApplication运行Spark任务时,由于其Master-Worker或Driver-Executor的架构,组件间需要相互通信,所以需要使用多集群Gang调度来将这些作业调度到同一集群内运行。
ACK One舰队通过支持多集群Gang调度,并与重调度和故障迁移能力相结合,保障AI作业可在资源充足的集群中正常运行。更多详情请参见作业分发。
分发资源说明
ACK One舰队实例支持多集群应用分发和差异化部署的资源分发说明如下表所示。
如果您拥有在舰队实例中创建资源的权限,默认拥有该资源分发的权限。
资源级别 | 资源类型 | APIVersion | 分发策略 | 差异化策略 |
资源级别 | 资源类型 | APIVersion | 分发策略 | 差异化策略 |
集群级别 | Namespace | v1 | 支持 | 支持 |
PersistentVolume | v1 | 支持 | 支持 | |
StorageClass | storage.k8s.io/v1 | 支持 | 支持 | |
CutomResourceDefinition | apiextensions.k8s.io/v1 | 支持 | 支持 | |
命名空间级别 | Deployment | apps/v1 | 支持 | 支持 |
StatefulSet | apps/v1 | 支持 | 支持 | |
DaemonSet | apps/v1 | 支持 | 支持 | |
Job | batch/v1 | 支持 | 支持 | |
CronJob | batch/v1 | 支持 | 支持 | |
Ingress | networking.k8s.io/v1 | 支持 | 支持 | |
Service | v1 | 支持 | 支持 | |
PersistentVolumeClaim | v1 | 支持 | 支持 | |
ConfigMap | v1 | 支持 | 支持 | |
Secret | v1 | 支持 | 支持 | |
Pod | v1 | 支持 | 支持 | |
LimitRange | v1 | 支持 | 支持 | |
ResourceQuota | v1 | 支持 | 支持 | |
HorizontalPodAutoscaler | autoscaling/v2 | 支持 | 支持 |
相关文档
功能 | 说明 | 相关文档 |
功能 | 说明 | 相关文档 |
使用分发策略部署应用 | 详细介绍如何使用kubectl通过分发策略PropagationPolicy、OverridePolicy将某些资源分发到关联集群,帮您快速上手应用分发功能。 | |
策略详细说明 | 详细介绍如何定义一个分发策略和差异化策略,以及各个参数的含义,帮您深层理解应用分发策略的配置。 | |
使用AMC查看子集群应用状态 | 详细介绍如何通过 |
- 本页导读 (1)
- 工作原理
- 高级功能
- 支持对于Workload的静态权重和动态调度
- 支持重调度
- 支持应用级别的故障迁移
- 支持多集群Gang调度
- 分发资源说明
- 相关文档