ToB企服应用市场:ToB评测及商务社交产业平台

标题: Whizard:跨越 Thanos 从开源项目到生产就绪的鸿沟 [打印本页]

作者: 乌市泽哥    时间: 2024-9-14 14:59
标题: Whizard:跨越 Thanos 从开源项目到生产就绪的鸿沟
此文是根据 KubeSphere 在 KubeCon China 2024 上的演讲分享整理而成。
议题简介

作为最受欢迎和强大的 Prometheus 长期存储项目之一,Thanos 被社区广泛采用。但要在生产环境中使用 Thanos,仍然必要自动化许多繁杂的运维工作。
在这次演讲中,KubeSphere 的维护者将分享他们在生产环境中使用和维护 Thanos 的经验,包括:
讲师简介

PDF 下载:在公众号【KubeSphere云原生】后台回复关键词 20240823,即可下载。
以下是正文。
Thanos

Prometheus 现在已经是一个云原生监控范畴的事实标准,但它同样有一些企业级需求没有办理,它是一个单实例单副本的,没有高可用,也不可扩展。自从 Prometheus 开源后,出现了很多社区项目来办理这个问题。
Thanos 就是其中一个项目,功能强大且在社区比较受欢迎。
Thanos 有一些独特的功能,比如它可以或许把 Prometheus 的数据上传到对象存储,这样就可以极低本钱存储更长时间范围的监控数据,同时也支持从对象存储查询监控数据。Thanos 兼容 Prometheus,支持快速查询长时间范围内的数据。
Thanos 的部署模式


在各集群的 Prometheus Pod 中创建一个 Thanos Sidecar,Thanos Sidercar 会把 Prometheus 的数据发送到对象存储,到达长期化存储的目标。Thanos 的其他组件,比如 Query 或 Store Gateway,可以或许在对象存储中查询数据。
在这种模式中,Thanos 接收数据的部分是可扩展的,对用户来说,他们只必要考虑 Query 或 Store Gateway 这些组件的可扩展性。

以 agent 模式运行 Prometheus,把 Prometheus Agent 抓取到的数据通过 remote write 写到 Thanos 的 Ingester,再由 Ingester 将接收到的数据上传到对象存储中。
这种模式用户必要关心更多的 Thanos 组件的扩展性包括 Router, Ingestor, Ruler, Store Gateway, Compactor 等,以接收、查询海量数据。
如何定制和部署 Thanos

Thanos 社区提供了两种方式。
kube-thanos 是一个 Thanos 社区维护的项目,允许用户通过 jsonnet 的方式对 Thanos 的部署做定制,然后用 yaml 的方式部署各种组件。
缺点:
这是 Bitnami 提供的 Thanos Helm Chart,用于在 Kubernetes 环境中简化 Thanos 的部署和管理。
缺点:
使 Thanos 到达生产就绪状态,还必要什么?

假如你有十个甚至上百个集群怎么办?

为了更好地应对以上问题和挑战,KubeSphere 可观测性团队于 2021 年开始开发 Thanos 的企业发行版 Whizard,并于 2024 香港 KubeCon 正式宣布开源
Whizard

起首是 Whizard 的整体架构,节点和应用的 Metrics 数据由 Agent(Prometheus) 通过 remote-write 方式写入 Gateway,经过 Gateway 准入接收后,由 Router 根据 hashring 路由到指定 Ingester,Ingester 缓存并处置惩罚数据,然后定期将数据写入对象存储中,至此数据写入完成。查询时,Query 在 Ingester 中查询近期数据,在 Store 中查询更长时间对象存储中存储的数据,QueryFrontend 举行查询缓存。

所有组件的 CRD 定义:

Service

Service 包含了各个组件的默认/全局配置信息:
假如 Thanos 的组件如 Ingester、Compactor、Ruler 等是基于租户的扩展机制自动创建出来的,这些组件会加载 Service 中指定的该组件的默认配置后启动服务。
Tenant

Gateway

该组件是 Whizard 流量入口,可以对租户请求举行准入控制。
Storage

定义 Thanos 的对象存储设置。
Router

定义 Thanos Receive Router 的设置,该组件的功能是根据 Hashring 配置将对应租户的数据路由到指定的 Ingester 中。
Ingester

定义 Thanos Receive Ingester 的设置,该组件的功能是处置惩罚和接收租户的数据,并存储到对象存储中。

如图所示,DefaultTenantsPerIngester 配置项表示当前 Ingester 包含的租户数目上限,tenants 标明了当前有哪些租户位于这个 Ingester 上。图中的租户数目配置的上限是 3 个,就说明最多能容纳 3 个租户,假如必要新增租户,就会新建一个 Ingester 来举行负载。
当租户删除时,必要考虑 Ingester 的资源采取,我们配置了 DefaultIngesterRetentionPeriod。图中的配置为 3 个小时,由于通常 Thanos 每两个小时举行一次数据落盘并推送到对象存储,配置为 3 小时,就能包管当前租户的数据可以或许被完整的落盘以及上传,到达资源的安全采取。
Ruler

定义 Thanos Ruler 的设置,该组件的功能是计算规则。
Ruler 有两种模式,一种是用于特定租户的 Ruler,用于计算该租户的 Recording Rules,将结果重新写回到该租户的数据中;另一种则是全局 Ruler,用于计算全部租户的 Alerting Rules,并将结果推送给 AlertManager。
全局 Ruler 承担了所有租户的 Alerting Rules,压力较大时,可以使用 Shards 字段举行分片,每个分片是一个 Ruler 的 Statefulset,通过分片来提升 Ruler 的并发性能。
Compactor

定义 Thanos Compactor 的设置,该组件的功能为压缩与降采样。
与 Ingester 类似,Compactor 也包含 DefaultTenantsPerCompactor 参数,基于租户数目举行自动伸缩。
Store

定义 Store 的设置:
TimeRanges 定义 store 的时间分片策略。每个时间分片分别对应一个 StatefulSet
工作负载,他们分别加载不同的时间隔断的对象存储数据,我们可以根据查询习惯,历史数据命中较低,可以按照如图所示举行配置,近期的范围隔断小,更久的范围隔断更大点。

Query

基于租户的组件自动扩缩容


使用 RuleGroup 替代 PrometheuesRule

下图是一个 RuleGroup 的展示,我们可通过这个很方便的去举行可视化以及编辑管理。

期望 Thanos 继续增强的功能

Whizard 在 KubeSphere 中的生产应用


如图所示,我们可以看到右侧是一些集群的列表,这些集群对应的就是上文所说的 Whizard 的 Tenant;中心地区展示的则是所有集群的环境,比如使用的核数、节点数、项目数、容器组数,都可以从 Thanos 中查询到。

此外,在 Whizard 中,用户还可以跨集群对所有的集群举行资源统计排行,同时还可以看到所有的节点、项目和容器组。这样就比单实例的 Prometheus 多了一个集群的维度。

如上图所示是一个全局告警的展示,倒数第二列有一个集群的一列,这个也是通过 Thanos 全局的 Ruler 来计算出来的一个告警。

该功能是跨集群查询资源:在全部集群中,查询一个 pod 的 IP,属于哪个节点。
Roadmap

KubeSphere Enterprise v3.x 基于 Whizard 开发的 Whizard 可观测中心将在 KubeSphere Enterprise v4.x 后续版本中演进为 WhizardTelemetry 可观测平台:
本文由博客一文多发平台 OpenWrite 发布!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4