云原生多云容器编排引擎Karmada v1.5 – 多调度组助力成本优化
【摘要】 Karmada 是开放的多云多集群容器编排引擎,旨在帮助用户在多云环境下部署和运维业务应用。凭借兼容 Kubernetes 原生 API 的能力,Karmada 可以平滑迁移单集群工作负载,并且仍可保持与 Kubernetes 周边生态工具链协同。
提供了多调度器支持能力,默认调度器可以与第三方自定义调度器协同工作,提供更强的定制能力。
集群差异化配置策略(
OverridePolicy/ClusterOverridePolicy
)将按照隐式的优先级进行应用。-
内置资源解释器支持聚合 StatefulSet/CronJob
状态。
新特性概览
多调度组
PropagationPolicy/ClusterPropagationPolicy
中设置多个集群组,实现将业务优先调度到成本更低的集群组。下面我们给出一个针对成本优化进行调度的例子:
apiVersion: policy.karmada.io/v1alpha1
kind: PropagationPolicy
metadata:
name: nginx
spec:
resourceSelectors:
- apiVersion: apps/v1
kind: Deployment
name: nginx
placement:
clusterAffinities:
- affinityName: local-clusters
clusterNames:
- local-member1
- local-member2
- affinityName: cloud-clusters
clusterNames:
- huawei-member1
- huawei-member2
local-clusters
)和云上集群组(cloud-clusters
),Karmada 在选择集群组进行资源分发时, 将按顺序对集群组逐一进行评估,直到找到满足调度约束的集群组。
Deployment/nginx
时,会优先尝试调度到本地集群组的local-member1
和local-member2
,如果失败(如资源不足),则选择云上集群组,从而实现在本地集群资源足够时,优先选择成本更低的本地集群。
apiVersion: policy.karmada.io/v1alpha1
kind: PropagationPolicy
metadata:
name: nginx
spec:
resourceSelectors:
- apiVersion: apps/v1
kind: Deployment
name: nginx
placement:
clusterAffinities:
- affinityName: primary-cluster
clusterNames:
- member1
- affinityName: backup-cluster
clusterNames:
- member2
primary-cluster
)和备份集群组(backup-cluster
),在调度 Deployment/nginx
时,如果主集群组满足要求,会调度到主集群组的member1
。在主集群组的集群故障时,调度器按顺序匹配新集群组,将业务迁移到备份集群组的member2
。自定义调度器
--scheduler-name=my-scheduler
。
namespace
中,建议同时配置 --leader-elect-resource-name
参数,以避免副本选主冲突。关键命令行启动参数如下所示:
command:
- /bin/karmada-scheduler
- --kubeconfig=/etc/kubeconfig
- --bind-address=0.0.0.0
- --secure-port=10351
- --enable-scheduler-estimator=true
- --leader-elect-resource-name=my-scheduler # 你的自定义调度器名称
- --scheduler-name=my-scheduler # 你的自定义调度器名
--scheduler-name
将多个调度器进行区分,每个调度器将只负责调度特定的工作负载。
PropagationPolicy/ClusterPropagationPolicy
的 schedulerName
字段指定调度器名字,如下所示:
apiVersion: policy.karmada.io/v1alpha1
kind: PropagationPolicy
metadata:
name: nginx-propagation
spec:
schedulerName: my-scheduler
resourceSelectors:
- apiVersion: apps/v1
kind: Deployment
name: nginx
placement:
clusterAffinity:
clusterNames:
- member1
- member2
schedulerName
指定此Deployment
必须由名为 my-scheduler
的调度器进行调度,此时默认调度器将自动忽略该工作负载。
schedulerName
如果没有指定,则默认值为 default-scheduler
,意味着由默认调度器进行调度,前面版本的用户升级到新版本时无需额外配置。
版本升级
致谢贡献者
参考链接
-
Release Notes:https://github.com/karmada-io/karmada/releases/tag/v1.5.0
-
多调度组:https://github.com/karmada-io/karmada/tree/master/docs/proposals/scheduling/multi-scheduling-group
-
2023 年云现状调查报告:https://info.flexera.com/CM-REPORT-State-of-the-Cloud
-
扩展调度器插件和实现自定义调度器:https://karmada.io/docs/developers/customize-karmada-scheduler/
附:Karmada社区技术交流地址
-
项目地址: https://github.com/karmada-io/karmada
-
Slack地址:
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)