Lunettes - 让 Kubernetes 服务运营更简单

0b7ef29bd251928a5be5d602d39addd7.gif

文|谭崇康(花名:见云

蚂蚁集团高级技术专家


本文 3781 字 阅读 10 分钟

问题

K8s 服务运营需要更好的可观测能力

云原生系统以 Kubernetes(K8s)为基石,业界很多公司的基础设施也构建在 K8s 平台之上。作为公司的关键基础设施,K8s 平台的运营效率直接影响业务的稳定与效率。

然而,将 K8s 作为服务运营与单纯的使用 K8s 存在很大的区别。在使用 K8s 时,我们关注是形形色色的功能,而在 K8s 服务运营过程中我们将更加聚焦 K8s 服务的质量以及效率。运营一个 K8s 服务需要关注的典型问题例如:

  • 问题诊断及其效率:K8s 链路长、组件多、概念丰富、状态复杂等,如何快速诊断日常失败问题原因是一个很关键的能力;

  • 服务质量衡量问题:如何衡量 K8s 平台服务整体资源交付效率以及调度、镜像拉取、IP 分配等各个环节的服务质量,进而引导服务能力的提升;

  • 链路性能问题:如何发现、定位集群中的性能瓶颈,提升集群的资源交付吞吐;

  • 运营体系化问题:当前社区的可观测服务更多关注的还是某些孤立的功能点,服务运营需要的是数字化、性能、效率、体系化等。

Lunettes

K8s 平台运营可观测工作空间

一直以来,我们运营着一个由许多大规模 K8s 集群构成的容器服务平台,并努力提升平台服务的质量。在这个过程中,我们沉淀了很多运营工具以及相关的运营经验。基于这些工具及经验,我们构建了容器可观测服务 Lunettes,希望帮助大家更简单地运营 Kuberntes 服务。Lunettes 项目代码已经在 GitHub 平台开放,欢迎大家参与!

项目链接:https://github.com/alipay/container-observability-service

Lunettes 服务提供的一些特性,包括:

  • 定义了 K8s 资源交付效率的 SLO,并基于 SLO 产出了成功率相关的可观测数据,用户基于 SLO 衡量 K8s 整体及子服务的质量,同时发现服务能力受损等问题;

  • 提供了容器一键诊断能力,Lunettes 分析 K8s 资源交付过程的各个阶段,产出当前运维过程中的问题,帮助用户快速定位及解决问题;

  • 建设了一套无侵入的资源交付 Trace 能力,基于 Lunettes 分析的 HyperEvent 事件,用户可以看到资源交付链路中各个子阶段的耗时及错误,及时发现性能瓶颈点。

其他的一些易用特性包括:

  • 统一的操作界面,支持多集群管理,一站式服务体验;

  • 多维信息的聚合能力,提供日志、监控、Trace 等多维数据融合的能力。

Lunettes 是一个一站式的 K8s 容器可观测服务,能够为原生的 K8s 集群构建一个为服务运营打造的可观测工作空间,大幅降低了 K8s 服务运营的难度:

  • 基于可扩展的多维可观测数据构建:Lunettes 将不同维度的可观测数据抽象为 HyperEvent,并在 HyperEvent 之上构建其他服务能力。我们可以方便地通过配置化封装能力将新的可观测数据维度封装成 HyperEvent 从而扩展 Lunettes 的数据聚合能力。

  • 面向原生 K8s 集群,一键拉起:Lunettes 各个核心功能都具备灵活的配置能力,并且默认配置为原生 K8s 版本设计。Lunettes 可以采用普通 YAML 或 helm charts 部署,用户可以方便地在 K8s 集群一键拉起 Lunettes 服务。

  • 构建 K8s 运营的完整的可观测工作空间(workspace):Lunettes 提供了包含资源交付 SLO、容器生命周期诊断、容器生命周期 Trace、多维数据融合等常用的功能,为 K8s 集群提供一站式运营工作空间。

软件架构

f4fad3ac8775ca65ff7afe1df6f8aad7.png

Lunettes 服务的软件架构分为四层,分别为:

  • 用户接口层(User-Portal):图形化交互基于 Grafana 构建,此外我们也提供 OpenAPI 接口;

  • 可观测服务层(Observability-Services):包含阶段耗时分析、资源交付 SLO、资源交付诊断、资源交付 Trace 等多个可观测特性;

  • 数据处理层(Data- Processing):Lunettes 具有可观测数据源扩展能力,支持 Operations、Events 等多种可观测数据,并将可观测数据统一封装为 HyperEvent,经由上层的 SharedProcessor 统一处理。在 Lunettes 中,可观测数据的处理是高度可配置化的,ConfigCenter 负责配置的管理。

  • 存储层(Storage):Lunettes 的存储层支持多种存储服务,包含 Prometheus、ElasticSearch、SLS 等。

基础功能介绍

资源交付 SLO

K8s 的核心功能是将资源以容器的形式交付出去。如何定义容器平台的资源交付质量是一个核心的话题。Lunettes 首先根据可观测数据定义容器生命周期中的各个阶段,区分基础设施阶段以及用户应用阶段,从而统计容器平台容器交付所花费的时间。进一步,Lunettes 根据容器交付的时间定义资源交付 SLO。下图中展示了集群的 1 分钟级以及 1 小时级 Pod 创建成功率的 SLO 数据。

ee1ac20549890dae464c2fdb11b45d94.png

06bf887a1182ac70c89233c82a8a78e4.png

容器生命周期诊断

e1f685dac67b98fb3485bb97624445b9.png

Lunettes 将诊断 Pod 创建流程中各个阶段的错误,形成典型容器创建错误码,例如 FailedScheduling 对应调度失败、FailedPullImage 对应镜像拉取失败等。典型的错误码将具备以下功能:

  • 错误信息形成一个标准的错误集合,每个错误类型以可理解的方式代表特定的一类错误,给用户提供当前交付失败的诊断结果;

  • 形成标准的 ErrorCode,作为上下游问题传递的依据,构建端到端的诊断链路;

  • 当集群故障时,诊断结果作为聚合信息,当大量错误聚合时,方便我们快速定位到集群中的错误组件及错误原因。

9d5d91e37b0c75105f48c9c56fe576dd.png

在诊断过程中,Lunettes 将从底层的可观测数据中抽取生命周期中的关键事件,涵盖了 Operation、Events 等,帮助用户根据关键事件快速定位容器生命周期中的各种问题。

资源交付 Trace

e32d01d7404a20261427666f21d287ab.png

Lunettes 设计了一套无侵入的资源交付(创建、删除等)过程 Trace 体系,基于 Lunettes 分析的 HyperEvent 事件,以用户可理解的方式分析资源交付过程中的各个阶段,例如 IP 分配、镜像拉取、Volume 绑定等,并基于这些分析构建了资源交付 Trace。通过资源交付 Trace,用户可以方便地找到资源交付过程中各个阶段的耗时及错误,从而掌握整个资源交付过程中的热点问题。Trace 与 Log、Event 等关联,帮助用户快速找到问题的根因。

多维信息聚合能力

648f9a718beab256af4f81079b7f1164.png

基于我们在过去多年积累的 K8s 运营经验,Lunettes 为日常运营活动中的多个典型场景设计,聚合了  YAML 信息、Event 信息、审计信息、Trace 信息、SLO 信息等多维度的可观测信息,为用户提供一个完整的 K8s 运营可观测工作空间。

实践

几个典型的使用场景

Case1:诊断 Pod 创建失败

以镜像拉取失败为例,我们来看一下在 Lunettes 中,如何诊断一个 Pod 是因为镜像拉取时间太长而导致失败的案例。

1、通过容器诊断,首先看到 Pod 的创建结果是 ImagePullTooMuchTime。通过这个结果,我们可以判断当前的错误是镜像拉取时间太长。

5edbde21052bb2a87e4e8c2115a7d137.png

2、通过容器拓扑,可以看到是哪个镜像有问题。

c9bbf65a60d6ea051ceb9216da9ecb28.png

3、通过容器交付 Trace,可以看到镜像拉取花了多长时间。

292746d1ccb50d70b107752fe316afa2.png

Case2:诊断服务问题导致 SLO 下跌

1、通过上文提到的 Pod 创建 SLO 下跌告警,可以快速地发现当前集群的 Pod 创建链路受损;

2、诊断对应集群的容器创建 SLO,我们可以看到当前造成 SLO 下跌的核心错误是 IP 相关,FailedAllocateIP 以及 AllocateIPTimeout,如下图所示。同时,Lunettes 提供了各个错误的历史变化情况,方便用户找到问题的突变事件点。

c2ba8284d52279eedca463bb6581d2f0.png

3、诊断 FailedAllocateIP,我们可以看到有部分错误在一些节点上聚集,进而可以推断可能是节点上的系统组件有问题,或者是某些节点创建的频率高。

b70f01b4ba6921a880f380c0875d8038.png

4、为了进一步定位问题,我们可以获取相应错误的 Pod 列表,分析各个典型 Pod 的错误情况。

c6476d26ad900e20c93e719df0b0a082.png

Case3:分析容器创建链路的性能问题

在生产级 K8s 中,用户对资源的交付效率有很强的诉求,尤其在 Job 级短任务场景下,由于任务的运行时间短,Pod 创建耗时作为基础设施耗时对任务的吞吐有较大的影响。因此,我们会持续关注资源交付链路的性能。Lunettes 提供了资源交付 Trace 功能来帮助发现这类问题。

例如,当某一个 Pod 虽然创建成功了,但是耗时比较长,不符合预期,用户可以通过 Trace 知道哪个阶段的耗时影响了整体耗时。下图中,通过容器交付 Trace 我们可以看到,容器在 sandbox 创建 /init 容器以及容器 start 阶段都消耗了比较长的时间。

1460e1007c41b23bad69a72b019e590d.png

同时,通过 Trace 的统计信息,我们可以看到每个阶段的平均以及长尾耗时,这将指导整个资源交付链路的性能优化。

Lunettes

让 K8s 平台的运营更简单

Lunettes 旨在为 K8s 平台构建一个数字化、高效的服务运营可观测工作空间,提供了跨集群统一操作界面、资源交付 SLO、容器诊断、容器交付 Trace、多维数据聚合等,提供了 K8s 平台运营过程中的不同场景下的多个实用的可观测服务。Lunettes 项目已开源,欢迎大家参与 Lunettes 社区。

 欢迎持续关注和 Star Lunettes!

Lunettes Star 一下✨:
https://github.com/alipay/container-observability-service

K8s 平台是很多技术公司的关键基础设施,平台运营的效率将直接直接影响业务的稳定。未来,Lunettes 将进一步补全容器平台运营过程中的其他可观测能力,在体系化、深度可观测以及运营效率等方面持续发展,让 K8s 平台的运营更简单。

   本周推荐阅读   

67517bd06c62a87047cec9f2d703fafa.png

大象转身:支付宝资金技术 Serverless 提效总结

51ef3e205164338ad56ca03208144e59.png

DLRover 在 K8s 上千卡级大模型训练稳定性保障的技术实践

595af55c0ee0ea45f0ba96c36565c88c.png

Docker 环境基于 Dragonfly 的 Kubernetes 多集群镜像分发实践

adfea6dcb5c053b4d1eb0463ebbbf7b7.png

MoE 系列(七)| Envoy Go 扩展之沙箱安全

fa30a8b82d6cc00fb982683b3de58a31.jpeg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值