Kubernetes 多集群管理 Karmada,跨集群弹性伸缩 FederatedHPA 突破新边界! - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cesign
V2EX    Kubernetes

Kubernetes 多集群管理 Karmada,跨集群弹性伸缩 FederatedHPA 突破新边界!

  •  
  •   cesign 2023-07-17 1:30:26 +08:00 1520 次点击
    这是一个创建于 883 天前的主题,其中的信息可能已经有所发展或是发生改变。

    根据 Flexera 最新发布的《 2023 年云现状调查报告》,750 家受访企业中,高达 36%的企业表示云成本支出超过预期,另有 9%的企业云成本严重超出预期,企业急需有效手段来降低云成本支出:

    img

    同时,在这些企业中,有高达 87%的企业使用多云,多云架构的优势在于可以方便的提供业务高可用部署、满足安全合规的属地化部署、以及公有云弹性等能力,但如果缺少相应的成本管理,也容易导致云成本增加。

    img

    为了解决多云多集群下的成本难题,Karmada 率先提出并实现了支持多指标,多策略的全新跨集群 HPA (即 FederatedHPA ),实现业务跨集群弹性伸缩,为多云架构提供了新的玩法,比如本地数据中心+公有云的组合,业务优先使用本地数据中心资源,当本地资源不足时又可以借助公有云无限弹性能力,做到按需使用云资源,进而节省云成本开支。

    FederatedHPA

    Karmada FederatedHPA 可基于 CPU/Memory 利用率来自动伸缩业务,也可以基于各种自定义指标伸缩业务,其 YAML 配置示例为:

    apiVersion: autoscaling.karmada.io/v1alpha1 kind: FederatedHPA metadata: name: nginx spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: nginx minReplicas: 1 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 10 

    通过使用 FederatedHPA ,可以实现应用跨集群弹性能力,如下图所示,应用部署在 cluster1 集群中,当流量洪峰到来时,应用可以先在 cluster1 集群中自动扩容,当 cluster1 资源受限时,应用可以自动在 cluster2 集群中扩容。

    img

    当然,Karmada FederatedHPA 带来的不仅仅是跨集群弹性伸缩,还能带来如下核心优势: 1.对于一个多集群业务,在每个集群中都有对应 HPA 资源,以伸缩业务。但分别管理这些 HPA 配置较为低效,而使用 Karmada FederatedHPA 能够统一配置多集群业务的伸缩,简化流程。 2.对于一个使用 Karmada FederatedHPA 的多集群业务,实例数会随着负载变化而变化。而这些新增或者减少的实例数,用户想要在不同集群,差异化的伸缩,如按可用资源比例,静态权重比例,优先顺序等。Karmada FederatedHPA 同样可满足这样的多集群差异化伸缩的诉求。

    3.对于一个使用 Karmada FederatedHPA 的多集群业务,在某个集群因故障而无法弹性时,Karmada 会在其他正常集群弹性,从而解决单点故障问题。

    统一弹性伸缩配置,提升管理效率

    传统的部署方式下,用户如果想在多个集群中配置弹性伸缩,以匹配业务请求负载,需要逐一管理集群中的 HPA ,繁琐而且容易出错,如下图:

    img

    使用 Karmade FederatedHPA ,能够实现统一配置多集群业务的弹性伸缩,在集群数量较多的情况下,能极大提高效率,如下图:

    img

    通过单一 FederatedHPA 对象,Karmada 会自动监测多个集群的业务负载,根据配置的策略,在不同的集群伸缩,最终匹配多集群服务的业务负载。

    优先扩容低成本集群业务,降低云成本支出 对于同一业务部署的多个集群,可能存在成本差异,用户可以利用 FederatedHPA 实现优先扩容成本更低集群的业务,实现更低的云成本消耗,例如:本地数据中心集群使用成本更低,公有云厂商提供的托管集群成本更高,因此,用户更愿意在本地数据中心中扩容业务。 下面我们给出一个优先扩容本地集群业务的例子:

    apiVersion: autoscaling.karmada.io/v1alpha1 kind: FederatedHPA metadata: name: nginx spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: nginx minReplicas: 1 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 80 --- apiVersion: policy.karmada.io/v1alpha1 kind: PropagationPolicy metadata: name: nginx spec: resourceSelectors: - apiVersion: apps/v1 kind: Deployment name: nginx placement: clusterAffinities: - affinityName: local-cluster clusterNames: - local-cluster1 - affinityName: cloud-cluster clusterNames: - local-cluster1 - huawei-cluster1 replicaScheduling: replicaDivisionPreference: Weighted replicaSchedulingType: Divided weightPreference: dynamicWeight: AvailableReplicas 

    上面 PropagationPolicy 中配置有 本地集群组( local-cluster )和云上集群组( cloud-cluster )共两个集群组,Karmada 在扩容业务时,会优先尝试扩容在本地集群组中的业务,如果失败(缺乏资源),则继续扩容云上集群组的业务,从而实现在本地集群资源足够时,优先扩容本地集群的业务,实现更低的云成本消耗。

    总结

    FederatedHPA 为用户提供了跨集群弹性伸缩的能力,结合丰富的 PropagationPolicy/ClusterPropagationPolicy 调度策略,能满足不同的跨集群伸缩场景。

    Karmada 后续也会继续探索更多的跨集群伸缩场景,包括 定时联邦 HPA ,分布式多集群 HPA ,大家有任何感兴趣的想法,都欢迎大家来 Karmada 社区进行讨论和分享。

    附:Karmada 社区交流地址

    Karmada 官网: https://karmada.io/
    项目地址: https://github.com/karmada-io/karmada
    Slack 地址: https://slack.cncf.io/

    1 条回复    2024-11-10 22:53:11 +08:00
    headwindx
        1
    headwindx  
       2024-11-10 22:53:11 +08:00
    karmada CRB 调度失败后,有办法重新触发调度吗?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3397 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 20ms UTC 10:41 PVG 18:41 LAX 02:41 JFK 05:41
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86