Karmada v1.3:更优雅 更精准 更高效


摘要:最新发布的 1.3 版本中,Karmada 重新设计了应用跨集群故障迁移功能,实现了基于污点的故障驱逐机制,并提供平滑的故障迁移过程,可以有效保障服务迁移过程的连续性(不断服)。

本文分享自华为云社区《Karmada v1.3:更优雅 更精准 更高效》,作者:云容器大未来。

Karmada 是开放的多云多集群容器编排引擎,旨在帮助用户在多云环境下部署和运维业务应用。凭借兼容 Kubernetes 原生 API 的能力,Karmada 可以平滑迁移单集群工作负载,并且仍可保持与 Kubernetes 周边生态工具链协同。

在最新发布的 1.3 版本中,Karmada 重新设计了应用跨集群故障迁移功能,实现了基于污点的故障驱逐机制,并提供平滑的故障迁移过程,可以有效保障服务迁移过程的连续性(不断服)。

本版本新增加的特性:

  • 增加了面向多集群的资源代理新特性,通过该代理平台业务方可以在不感知多集群的情况下,以单集群访问姿势直接操纵部署在多集群的工作负载;
  • 提供针对集群资源建模能力,通过自定义的集群资源模型,调度器可以更精准地进行资源调度;
  • 提供基于 Bootstrap 令牌来注册 Pull 模式集群的能力,不仅可以简化集群注册过程,还可以方便地进行权限控制;

此外,基于生产环境的用户反馈,本版本还进行了诸多性能优化,系统运行过程中 CPU 和内存资源需求大大降低,详细的性能测试报告稍后发布。

与之前版本一样,v1.3 与前面的版本仍然保持兼容,前面版本的用户仍可以平滑升级。

新特性概览

基于污点的优雅驱逐

当集群被判定为故障,并且故障时间超过宽限期(默认 5 分钟)之后,Karmada 将为故障集群添加 “NoExecute” 污点,随后新引入的 taint-manager 控制器将开始驱逐该故障集群上的工作负载,接着调度器重新调度被驱逐的工作负载至新的可用集群,如果用户开启了 GracefulEviction 特性,被驱逐的工作负载并不会被立即删除,而是延迟到新的工作负载运行之后,可以保障驱逐过程中业务不中断。

整体故障迁移过程可以表示成:” 集群故障判定” → “负载预驱逐” → “重新调度” → “清理冗余负载”。

此处,无论故障判定还是驱逐,用户都可以参过参数来控制:

  • --failover-eviction-timeout,指定从调度结果中删除故障集群的宽限期,默认 5 分钟
  • --default-not-ready-toleration-seconds,指定默认情况下添加到尚未具有 notReady:NoExecute 容忍的传播策略上的容忍时间,默认 600 秒
  • --default-unreachable-toleration-seconds,指定默认情况下添加到尚未具有 unreachable:NoExecute 容忍的传播策略上的容忍时间,默认 600 秒
  • --graceful-eviction-timeout,指定自工作负载已移动到优雅驱逐任务以来,等待优雅驱逐控制器执行最终删除的超时时间,默认时长 10 分钟

跨多群集资源的全局代理

Karmada 在 1.2 版本中新增了一个 “karmada-search” 组件,该组件为选装组件,用于缓存集群中部署的资源对象和事件,并通过搜索 API 对外提供检索服务。

1.3 版本中,我们在该组件中引入了一个新的代理功能,允许用户以访问单集群的方式访问多集群中的资源,无论资源是否由 Karmada 管理,利用代理功能,用户可以统一通过 Karmada 控制面来操作成员集群中的资源。

用户可以使用 ResourceRegistry API 来指定缓存的资源类型以及数据源(目标集群),例如以下配置表示从 member1 和 member2 两个集群中缓存 Pod 与 Node 资源:

apiVersion: search.karmada.io/v1alpha1
kind: ResourceRegistry
metadata:
 name: proxy-sample
 spec:
 targetCluster:
clusterNames:
- member1
- member2
resourceSelectors:
- apiVersion: v1
 kind: Pod
- apiVersion: v1
 kind: Node

将该配置提交给 karmada-apiserver 之后,便可使用 URL:/apis/search.karmada.io/v1alpha1/proxying/karmada/proxy/api/v1/namespaces/default/pods 来进行集群资源访问。该 URL 中 /apis/search.karmada.io/v1alpha1/proxying/karmada/proxy 为固定前缀,后面部分与 Kubernetes 原生 API 路径完全一致。

关于该特性的更多信息可以参考:https://karmada.io/docs/userguide/globalview/proxy-global-resource/

 

基于自定义集群资源模型的调度

在集群调度的过程中,karmada-scheduler 会基于一系列的因素来做调度决策,其中一个不可或缺的因素就是集群的可用资源。之前的版本中,Karmada 采用了一种通用的资源模型 ResourceSummary 来抽象集群的可用情况,如下所示:

resourceSummary:
 allocatable:
cpu: "1024"
memory: 4096Mi
pods: "110"
 allocated:
cpu: "512"
memory: 2048Mi
pods: "64"

但是 ResourceSummary 机械地累加了集群中所有节点的资源,忽视了节点上的碎片资源,这会导致资源需求较大的 Pod 无法准确地调度到合适的集群。同时它也忽视了不同用户的集群中节点可分配的资源不完全相同的特点。

1.3 版本中 Karmada 引入了一种新的方式 —— 自定义集群资源模型,来抽象集群的可用资源情况,旨在使调度器调度集群的结果更精确。用户可以启用 --CustomizedClusterResourceModeling 的特性开关来启用这一特性,开启后,在集群被 Karmada 所纳管后,Karmada 会自动地为集群设置默认的资源模型,这一资源模型将集群中的各个节点分为不同等级的模型,默认的资源模型将根据 CPU 和内存这两项资源指标把节点分为 9 个不同的等级,如下所示:

resourceModels:
- grade: 0
ranges:
- max: "1"
min: "0"
name: cpu
- max: 4Gi
min: "0"
name: memory
- grade: 1
ranges:
- max: "2"
min: "1"
name: cpu
- max: 16Gi
min: 4Gi
name: memory
.....
- grade: 8
ranges:
- max: "9223372036854775807"
min: "128"
name: cpu
- max: "9223372036854775807"
min: 1Ti
name: memory

Cluster-status-controller 将会收集集群内的节点、Pod 信息计算对应模型节点的数量,与此同时,karmada-scheduler 根据将要调度的实例资源请求比较不同集群中满足要求的节点数,并将实例调度到满足要求的节点更多的集群。

同时,在一些场景下,默认的集群资源模型不能满足用户特定集群的需求,现在用户可以通过 kubectl edit cluster 命令自定义地设置集群的资源模型,使资源模型能够更好地拟合集群的资源拓扑。

基于 Bootstrap 令牌的集群注册

1.3 版本中,对于 Pull 模式下的集群,我们提供了一种通过命令行向 Karmada 控制面注册的方式。现在通过 karmadactl token 命令我们可以轻松的创建 Bootstrap 启动令牌的 token,token 的默认有效时长是 24 小时。

$ karmadactl token create --print-register-command --kubeconfig /etc/karmada/karmada-apiserver.config

 

# The example output is shown below
karmadactl register 10.10.x.x:32443 --token t2jgtm.9nybj0526mjw1jbf --discovery-token-ca-cert-hash sha256:f5a5a43869bb44577dba582e794c3e3750f2050d62f1b1dc80fd3d6a371b6ed4

通过 karmadactl register 命令可以在不复制成员集群 kubeconfig 的情况下非常轻松地完成包括部署 karmada-agent 在内的注册过程,增强了控制面以 Pull 模式纳管成员集群的易用性和安全性。

$ karmadactl register 10.10.x.x:32443 --token t2jgtm.9nybj0526mjw1jbf --discovery-token-ca-cert-hash sha256:f5a5a43869bb44577dba582e794c3e3750f2050d62f1b1dc80fd3d6a371b6ed4

# The example output is shown below
[preflight] Running pre-flight checks
[prefligt] All pre-flight checks were passed
[karmada-agent-start] Waiting to perform the TLS Bootstrap
[karmada-agent-start] Waiting to construct karmada-agent kubeconfig
[karmada-agent-start] Waiting the necessary secret and RBAC
[karmada-agent-start] Waiting karmada-agent Deployment
W0825 11:03:12.167027 29336 check.go:52] pod: karmada-agent-5d659b4746-wn754 not ready. status: ContainerCreating
......
I0825 11:04:06.174110 29336 check.go:49] pod: karmada-agent-5d659b4746-wn754 is ready. status: Running

cluster(member3) is joined successfully

版本升级

我们验证了从 karmada 1.2 版本到 1.3 版本的升级路径,升级过程平滑,可参考升级文档:https://karmada.io/docs/administrator/upgrading/v1.2-v1.3

致谢贡献者

Karmada v1.3 版本包含了来自 51 位贡献者的数百次代码提交,在此对各位贡献者表示由衷的感谢:

贡献者 GitHub ID:

@AllenZMC

@calvin0327

@carlory

@CharlesQQ

@Charlie17Li

@chaunceyjiang

@cutezhangq

@dapengJacky

@dddddai

@duanmengkk

@Fish-pro

@Garrybest

@gy95

@halfrost

@hanweisen

@huntsman-li

@ikaven1024

@joengjyu

@JoshuaAndrew

@kerthcet

@kevin-wangzefeng

@kinzhi

@likakuli

@lonelyCZ

@luoMonkeyKing

@maoyangLiu

@mathlsj

@mikeshng

@Momeaking

@mrlihanbo

@my-git9

@nuclearwu

@Poor12

@prodanlabs

@RainbowMango

@suwliang3

@TheStylite

@wawa0210

@weilaaa

@windsonsea

@wlp1153468871

@wuyingjun-lucky

@XiShanYongYe-Chang

@xuqianjins

@xyz2277

@yusank

@yy158775

@zgfh

@zhixian82

@zhuwint

@zirain

参考链接

● Release Notes:https://github.com/karmada-io/karmada/releases/tag/v1.3.0

● 集群故障迁移使用指导:https://karmada.io/docs/userguide/failover/#concept

● 多集群资源全局代理使用指导:https://karmada.io/docs/userguide/globalview/proxy-global-resource/

● 集群资源模型使用指导:https://karmada.io/docs/userguide/scheduling/cluster-resources

● 基于 Bootstrap 令牌的集群注册使用指导:https://karmada.io/docs/userguide/clustermanager/cluster-registration


相關推薦

2023-07-26

收集到的邮箱信息,并导入第三方邮件营销系统中,实现精准内容营销,提升转化率   ✦✦ 二、BeikeShop优化功能 本次,我们对现有功能进行了一系列优化 1. 优化安装流程 增加GD和PDO_MYSQL模块检测,确保系统的安装更

2024-08-20

onBit 创新地使用了零开销的迭代器设计,可以让用户写出优雅代码的同时保持程序的性能。   多应用场景 MoonBit 是一个全场景覆盖的开发者平台,紧跟科技前沿和行业趋势,侧重于云计算、边缘计算、人工智能以及教学领

2024-07-12

能回答能够更好地理解用户意图,聚合全网优质内容,更精准、直接、高效地提供图文、视频等。尤其针对复杂逻辑分析和跨学科知识,智能回答更能发挥AI的综合回答能力,为用户呈现准确、丰富的结果。 智能创作方面,夸

2023-06-15

Mybatis-Flex v1.3.8 已经发布,优雅的 Mybatis 增强框架 此版本更新内容包括: 新增:添加 FlexDataSource.removeDatasource() 方法,#I7CQU9 新增:代码生成器添加 Schema 配置的支持,感谢 @Font_C 新增:SQL 构建添加 year/month/day 等更多的函

2023-11-07

可用”的产品设计理念,为用户提供更轻量、更好用、更优雅、更全面的BI工具。 DataEase(https://github.com/dataease)是一款人人可用的开源数据可视化分析工具,它能够帮助用户快速分析数据并洞察业务趋势,从而实现业务的改进

2023-12-06

开发者用户都表示十分喜欢 Timeplus 产品的简单、高效和优雅,许多人也都希望我们能开放源代码。我们倾听到大家的心声,非常高兴地正式宣布核心引擎‘Proton’的开源,同时和 ClickHouse 成为合作伙伴并为社区作贡献,这将惠

2023-06-10

科幻 GTK 像素 WIN7 现在又发布了一套拟物皮肤。优雅来袭!从现在开始做一个优雅的程序员。 下列是拟物风格的皮肤预览效果。 有兴趣的抓紧来看看吧! 项目地址为: http://admin.demo.ulthon.com/   原文标题:ulth

2024-07-02

以使用调度传递的参数变量实现**增量数据参数传递,**精准控制数据同步范围,实现增量/批量/微批的多场景控制,提升整体数据批量和CDC实时处理能力。 加强可观测性与监控告警 离线同步新增支持失败、超时告警, 提前

2023-11-10

pull/170 等 感谢 @liangyuanpeng 为 KCL 模型贡献 karmada 模型包,欢迎! 🙌 https://github.com/kcl-lang/artifacthub/pull/48/files 此外,感谢 @Matt Gowie, @ddh 对 KCL 的关注和宝贵反馈 🙌   |精选更新| KCL IDE 插件

2023-10-28

个应用场景。 AI搜索功能经过升级,提高了信息获取的精准度和效率。AI阅读功能高效分析文章链接或文档文件,生成AI摘要并提炼要点,帮助用户快速了解文章内容。同时,支持问答式交互,使用户能够更便捷地查询文档信息

2024-08-07

所带来前所未有的变革,实现了从无人经营到数据驱动的精准营销的跨越。 一、无人化经营,提升效率与体验         店滴云通过物联网技术,实现了休闲场所的无人化或半无人化经营。智能门锁、智能开关、

2024-04-09

t; pager = sysRoleMapper.xmlPaging(Pager.of(1), 1, 1); 我想说 还有更优雅的吗;其他框架都没有!

2023-12-02

目标理解与工作流自动化技术,使得「天工SkyAgents」能更精准地识别和解析复杂的业务目标,自动生成定制化的工作流程,甚至预测并建议潜在的优化方案。 本次「天工SkyAgents」的发布,将有助于缺乏代码开发能力的个人与

2023-12-09

在,无论您选择哪个数据库,都不会出现异常了! ✨精准的故障修复:在pg_helpers.get_db_conn中的判断更加准确,问题解决得干净利落! 🛠️数据库参数管理:新增了获取和更新数据库默认参数的功能,甚至在数据库停机的