全栈声明式可观测:KubeVela开箱即用且灵活定制的云原生应用洞察
阿里妹导读
KubeVela 是一个开箱即用的现代化应用交付与管理平台。本文我们将聚焦 KubeVela 的可观测体系,介绍云原生时代的可观测挑战及 KubeVela 的解决方案。
本文作者:殷达,KubeVela Maintainer,阿里云高级工程师,深度参与了 KubeVela 混合云多集群管理、可扩展工作流、可观测等核心能力体系的建设。 随着云原生技术的日趋成熟,越来越多的工作负载都迁移到 Kubernetes 之上,包括各类无状态微服务和复杂的有状态应用。为了支撑这些应用所需的各项基础设施,开发者不得不面对大量的底层 API。这就形成了两个挑战,一方面是难以标准化,各种工作负载自身都会形成自己的运维管理平台,带来了企业平台层的分化;另一方面是过于复杂,带来了很高的使用门槛和稳定性风险。 KubeVela [1] 是一个开箱即用的现代化应用交付与管理平台,它通过统一的应用模型、可编程可扩展的架构,帮助企业构建统一的平台,向上为不同场景的业务团队按需提供差异化、且开箱即用的平台层能力,大大降低了云原生技术的使用门槛。除了核心的云资源交付、应用管理、多集群、工作流等技术,KubeVela 还提供了全栈的声明式可观测能力,帮助业务开发者灵活定制,轻松洞察各类复杂的云原生工作负载。 本文我们将聚焦 KubeVela 的可观测体系,介绍云原生时代的可观测挑战及 KubeVela 的解决方案。
云原生可观测的挑战
通常情况下,为了给上层业务提供可观测性能力,运维团队会通过“熟练掌握” 业务团队的使用场景,然后将运行应用服务的基础设施与各类可观测性基础设施衔接,通过相对固化的脚本和系统,将采集指标、收集日志、聚合处理、图表分析等一系列流程合并,从而将最底层的运行态实时反馈到监控报警系统中,为运维团队自身及上层业务团队做预警,并在第一时间发现异常、排查故障。
全栈声明式可观测
虽然云原生时代的可观测存在诸多挑战,但是也得益于云原生开源技术的发展,以 Prometheus、Grafana、OpenTelemetry 为代表的可观测基础设施正在逐渐成为各自领域的事实标准,周边生态的集成正在以滚雪球的态势累积,这让可观测基础设施的统一成为了可能。选型这些开源项目为核心构建可观测解决方案成为了非常自然的选择,不仅帮助我们统一了技术和数据,还可以让我们借力生态,快速满足业务场景的需要。 统一的声明式可观测 API 一个关键的挑战是如何将可观测基础设施的能力变成声明式的?你可能容易想到 Kubernetes 的 CRD(自定义资源) [3] Operator 技术,确实已经有相当一部分可观测能力可以直接使用 CRD 这样的声明式 API。比如 Prometheus 就可以通过安装 Prometheus-Operator [4] 获得 ServiceMonitor 这个声明式 API。然而还有一部分其他项目(比如 Grafana),以及大量的云服务,他们并不具备成熟的 CRD Operator。为每个服务都编写 CRD Operator 存在不小的技术难度,不仅费时费力,同时还要消耗额外的 Pod 资源,整体成本比较高。 我们自然会想,是否有一种方式可以这些服务的 API 自动转换成符合 Kubernetes 标准的声明式 API?针对这种情况,Kubernetes 的 Aggregated API Server(简称 AA) [5] 模式提供了答案,即通过开发符合 Kubernetes API 规范的 REST 服务,通过 APIService 对象将其注册到 Kubernetes apiserver 上,从而达到扩展 Kubernetes apiserver 能处理的请求类型的效果。相较于 CRD + Operator 的模式,AA 模式提供了与 CRD 统一的 API,但处理过程并不是面向终态的,它能够提供同步的请求处理,灵活性和交互性较高。而 AA 模式的缺点则是它自身不具备调谐重试的能力,需要配合额外的手段针对出错等异常状态做面向终态的重试。 而 KubeVela 中的 Prism [6] 子项目正是这样一个基于 AA 模式将第三方 API 转换成 Kubernetes 标准 API 的服务,它对接 Kubernetes 的 AA 机制,向上提供统一的 K8s API,向下对接 Grafana 自身的 API,将数据源创建、大盘导入等操作统一融入到了 Kubernetes 用户习惯的 YAML 操作中。比如用户想要在 Kubernetes 上查询已有的 Grafana Dashboard,它可以使用 kubectl get grafanadashboard命令,调用 Kubernetes API 的 GrafanaDashboard 资源,该请求经过 Prism 后会转换位请求 Grafana API,查询结果则会再次经过 Prism 转回原生的 GrafanaDashboard 资源,从而用户就可以得到和操作 Deployment、Configmap 等原生资源一致的使用体验。
-
以工作流为核心的应用交付模型。基于 Kubernetes API 做编排的轻量级工作流引擎一直是 KubeVela 的“杀手锏”,它不仅能够以 DAG 的方式完成各种带上下文的复杂工作流编排场景,还能围绕应用的生命周期对资源做管理,包括应用删除时对资源的回收。与此同时,它本身不消耗额外的 pod 资源,是一个线程级工作流,非常适合应用交付这类管控面的使用场景。
-
按需定制、可编程,一套配置完整描述可观测需求。KubeVela 在设计之初就选择了 Infra as Code(IaC)的可编程扩展方式,KubeVela 的开发者和企业的平台工程师可以通过 CUE 配置语言
[7]
按需定制,对接各类 Kubernetes API,最终将其转化成用户易于安装、使用和理解的模块化插件,最重要的是可以通过声明式 API 的方式在一套配置中完整的描述可观测需求。丰富的插件市场
[8]
也是 KubeVela 的一大生态特色。
KubeVela 开箱即用的可观测体验
接下来,让我们从接入、使用、定制三个方面看看实际的使用过程是怎么样的。 接入可观测性基础设施 在 KubeVela 中,用户既可以从零开始搭建可观测性体系,也可以对接已有的可观测性基础设施与 KubeVela 系统。 对于从零开始搭建的 KubeVela 用户,只需几行简单的 vela addon enable 语句,即可快速将所需的插件装入自己的 Kubernetes 环境中,而且天然支持多集群架构,这意味着如果你有多个集群需要管理,通过 KubeVela,你可以很轻松地将相同的配置与服务装入所有集群中。当然你也可以按需只选择安装部分需要的服务,或者只对于某一部分集群进行安装,具体命令可以参考官方文档 [12] , 流程如图 7 所示。
为了简化用户上手成本,提升体验,KubeVela 的可观测性 Addon 针对各类使用场景提供了高度可定制化的解决方案。 例如,在多集群场景下,为了提供和单集群场景下具有一致体验的跨集群指标,KubeVela 的 Prometheus Addon 默认包含了基于 Thanos 的分布式采集部署方案。 而在日志领域,KubeVela 的 Loki Addon 则是提供了包括 Promtail 和 Vector 在内的多种 Agent 采集方案,辅以 vector-controller 等运维工具,帮助运维人员在日志配置上获得与 Kubernetes 原生资源一致的体验。 官方文档 [13] 中包含了更为详细的介绍。 开箱即用的可观测大盘 KubeVela 提供的可观测性基础设施内置了一系列监控大盘,方便用户从系统及应用两个不同的维度监控运维 KubeVela 及其上应用的运行状态。
洞察 Kubernetes 和 KubeVela 系统
系统维度上,内置的 Kubernetes System 监控从基础的集群角度向用户展示了 KubeVela 管控的各个集群状态,包括 Kubernetes APIServer 的负载、请求量、响应延迟、etcd 存储量等指标。这些指标能够帮助用户快速发现整个系统的异常状态,或者是用于排查系统响应慢的原因。
面向应用的可观测大盘
除了系统大盘外,KubeVela 还内置了面向应用的基础数据可视化界面,针对 Deployment 等原生工作负载类型资源的可观测界面,以及面向 nginx 日志分析这类场景化的可观测界面,如图 10-12 所示。这些大盘为应用提供了通用化的监控指标,便于运维人员排查常见的风险点(如应用资源不足、配置错误等)。未来,更多基础资源类型的监控大盘也会被进一步继承到内置的监控体系中。
未来
可观测性体系是系统稳定性的基石,而云原生时代下,复杂多样的应用服务以及相应的观测需求对于运维和开发团队之间的协作也提出了更高的要求。本文中提出的 KubeVela 全栈声明式可观测,能够自动化地构建面向应用的可观测性体系,既可以减轻开发团队对于基础设施使用的认知负担,也可以减少运维团队对于上层业务逻辑的理解需求。理想情况下,开发团队无需理解底层资源的排布,只需要在配置文件中声明所需部署的服务以及关注的指标,他们便可以在相应的基础设施上看到服务的部署状态以及相应的业务指标。而运维团队则无需了解服务及业务指标的具体内容,只需要聚焦在底层资源的运行状态和通用指标上。 目前,KubeVela 的内置可观测性体系主要集中在各类指标、日志的采集和呈现上。未来,KubeVela 还会进一步将应用探针等可观测技术集成到插件体系中,为用户提供便捷的安装、管理和使用体验。此外,目前的 KubeVela 体系支持使用工作流步骤来完成应用监控的自动化发现及报表生成,KubeVela 团队还将继续探索 Dashboard as Code 并总结更多最佳的自动化部署实践方案,推动可观测性与应用模型的进一步结合。 参考链接:[1]https://kubevela.net/ [2]https://www.digihunch.com/2021/12/from-ingress-to-gateway-why-you-need-istio-gateways-on-kubernetes-platforms/ [3]https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/ [4]https://github.com/prometheus-operator/prometheus-operator [5]https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/apiserver-aggregation/ [6]https://github.com/kubevela/prism [7]https://cuelang.org/ [8]https://github.com/kubevela/catalog [9]https://www.aliyun.com/product/arms/ [10]https://github.com/kubevela/prism [11]https://kubevela.net/docs/platform-engineers/operations/o11y/integration [12]https://kubevela.net/docs/platform-engineers/operations/observability [13]https://kubevela.net/docs/platform-engineers/operations/observability [14]https://kubevela.net/docs/platform-engineers/operations/observability [15]https://kubevela.net/docs/platform-engineers/operations/observability 写评测赢Redmi watch 3,云效代码管理 Codeup评测上线!
免费体验产品,写下你的使用体验,就有机会赢取Redmi watch 3、云效大礼包、开发者评测定制飞盘/云小宝公仔等豪礼!
🚀【前20位】发布100字以上原创评测的用户可获得【30元天猫超市卡】,阳光普照,先到先得!
点击阅读原文查看详情,写下真实感受!