TT Lab
开始
学习 学习路径 课程

CBA — Backstage 认证助理

Backstage 为什么不是产品而是框架

在 TT Lab 中继续学习

一句话总结

Backstage 是 Spotify 把内部使用的开发者门户于 2020 年开源并捐赠给 CNCF 的项目(2022 年晋升为孵化级)。它不是装好就能直接使用的产品,而是用来搭建你自己门户的框架。不了解这一区别就贸然引入,一定会失败。

为什么需要它

向一个达到一定规模的组织提出下面这些问题,通常都得不到答案。

答不上来并不是因为没有信息,而是因为信息分散。负责人写在 Wiki 里,部署记录在 CI 仪表板上,依赖关系在某个人的脑子里,文档则躺在三年前的 Confluence 中。每一处单独看都是最新的,拼在一起却画不出任何完整的图景。

Backstage 的答案是:建立软件目录,并让这个目录从代码仓库中自动填充。 所有权信息如果就放在代码旁边(catalog-info.yaml),迁移代码时会一起迁移,也会经过评审,长期过期不更新的概率会大大降低。

工作原理

三根支柱

初次接触 Backstage,需要了解三样东西。

  1. 软件目录(Software Catalog)——我们拥有的一切及其相互关系的清单。它是 Backstage 的心脏。
  2. 软件模板(Software Templates / Scaffolder)——按黄金路径创建新服务的装置。
  3. TechDocs——把放在代码旁边的 Markdown 文档渲染后显示在门户中的功能。

在此之上还有插件生态。Kubernetes、CI、On-call 值班、成本、安全扫描器等各个工具的信息,都被拉取到实体页面中。这正是门户的核心价值——不是把工具合并成一个,而是以实体(服务)为中心汇集并展示信息。

前端插件与后端插件

Backstage 分为两个应用。

前端 后端
是什么 React 应用 Node.js 服务
插件的作用 提供页面、标签页、卡片、图标 API 端点、数据采集、对外部系统的认证
示例 实体页面上的“Kubernetes”标签页 查询集群并获取工作负载的服务
为什么要分开 浏览器中不应放置凭据 令牌和 Secret 只保存在服务器上

这种分离在安全上很重要。如果前端插件直接调用 Kubernetes API,用户的浏览器里就需要持有集群凭据。因此由后端插件代为调用,前端只调用后端的端点。

为什么它不是产品

要使用 Backstage,需要通过 npx @backstage/create-app 创建属于你自己的应用源码树。此后它就是你自己的代码。添加插件要修改代码、构建、部署,升级也由你自己负责。

这个选择的利弊很分明。

因此在 CBA 考试中,如果出现“安装 Backstage 就能得到可直接使用的门户吗?”之类的题目,答案是否定的。引入决策不是技术选型,而是人力配置决策。如果没有一支团队把这个框架当作产品来对待,6 个月后就会多出一个无人升级、被遗弃的门户。

在现场相遇的样子

只看作者自己的 7 节点家庭实验室,就能明白为什么需要目录。一个集群里运行着 Cilium(CNI)、MetalLB(L4 LB)、Cilium Gateway API(L7)、csi-driver-nfs(存储)、GPU Operator(4 块 GPU)、KubeVirt+CDI(虚拟化)、CloudNativePG(数据库)、kube-prometheus-stack(可观测)、Gitea(10.0.0.200)、Argo CD(10.0.0.201)、Harbor(10.0.0.202)和 Grafana(10.0.0.203)。每一个都有各自的来龙去脉——Gateway API 需要 CRD v1.6.1,KubeVirt 的 containerDisk 路径存在缺陷,需要用 DataVolume 绕过。

即使是一个人独自运维的家庭实验室,如果不把这份清单和来龙去脉记下来,半年后也会迷路,组织就更不用说了。把“有什么、为什么这样配置、谁清楚”放到人的脑子之外——这就是目录存在的理由。

这个集群反复给出的教训——“状态是 Ready”和“实际在正常工作”是两个不同的命题——同样适用于门户设计。在实体页面上放几个绿色徽章很容易,难的是这些徽章是否与真实的用户体验相连。门户只是汇集信息的工具,汇集起来并不等于这些信息就是真的。

下一项测验要确认什么

本模块以测验收尾。下一个模块将学习目录的实体种类与关系,并在 /root/cba-catalog/ 中亲手编写一整套 catalog-info.yaml。实验环境中没有 Backstage 本身,因此会通过编写实体文件,并用集群标签来表达其所有权信息的方式来学习。