Busabase

Kubernetes(Helm)

用 Helm 安装 Busabase Premium——chart 做了什么、哪两个值配错会让附件和登录悄悄坏掉、以及什么时候该接你自己的 Postgres 与 S3。

chart 在公开仓库 busabase/busabase-premiumhelm/ 目录下。它就是 Compose 部署的 Kubernetes 表达,所以 Compose 生产部署里讲的一切在这里同样成立。

安装

git clone https://github.com/busabase/busabase-premium.git
helm install busabase ./busabase-premium/helm \
  --namespace busabase --create-namespace \
  --set image.tag=0.10.0 \
  --set appUrl=https://busabase.company.internal

这两个值都是必填的,缺了 chart 会直接拒绝渲染,而不是装出一个半好不好的东西:

  • image.tag —— 故意要求钉版本。跟着浮动 tag 走的 chart,会在任何一次 pod 重启时把实例升级掉,这不是你想要的性质,尤其它上面存着你的数据。
  • appUrl —— 用户实际输入的地址。登录 cookie 按它签发,所以对不上的表现是:登录看起来成功,然后立刻弹回登录页,日志里什么都不说。

它会创建什么

对象用途
Deployment应用
Job(Helm hook)迁移,每次发布跑一次,在应用滚动之前
StatefulSet ×2内置 Postgres 与对象存储(外部模式下不创建)
Service ×3应用、Postgres、存储
Secret生成的凭据,升级时保留

迁移是 hook,不是 initContainer

这个 Job 是 pre-install,pre-upgrade hook,有两个原因:

  • 每次发布跑一次,不是每个副本跑一次。 用 initContainer 的话,每个副本都会抢着迁移同一个库,失败的那个报出来的样子像「schema 损坏」,不像「锁冲突」。
  • 迁移失败会让整次发布失败。 helm upgrade 停住,现有 pod 继续用旧代码服务旧 schema——而不是让新 pod 跑在半迁移的 schema 上。

失败的 Job 会保留下来供你看日志。报错里有失败的 SQL 语句,但没有它来自哪个文件——拿那条语句去迁移目录 grep 就能定位。

对象存储必须是浏览器够得着的

上传走预签名 PUT、下载走跳转,所以是浏览器直接访问对象存储——跟它在云版访问 S3 是同一回事。这个地址必须对浏览器可解析。集群内部的 Service 名字不行,而症状极具误导性:应用正常、登录正常,就是每次附件上传都失败。

默认情况下 chart 从 appUrl 推导存储主机,通常是对的。存储走另一个主机名时设 storage.publicHost,并把两个主机都挂到你的 Ingress 后面。

接你自己的 Postgres 与 S3

内置的那两个存在,只是为了让 helm install 能装出一个能跑的东西。它们都不是生产答案:内置 Postgres 是单 pod,无故障转移、无时间点恢复,备份得你自己安排。

helm install busabase ./busabase-premium/helm \
  --set image.tag=0.10.0 \
  --set appUrl=https://busabase.company.internal \
  --set postgres.mode=external \
  --set postgres.external.host=pg.company.internal \
  --set storage.mode=external \
  --set storage.publicHost=s3.company.internal

外部模式下,两个 StatefulSet 都不会创建。

密钥

Postgres 密码、对象存储密钥、会话签名密钥在首次安装时生成,升级时保留——chart 会读回已存在的 Secret,而不是重新生成一套。这不是细节:换了会话密钥所有人被登出,换了 Postgres 密码应用连自己的数据库都打不开。

想自己管这些密钥就设 secrets.existingSecret,chart 便不再创建任何密钥。

激活

与其他部署形态完全一样:系统管理 → 授权,粘贴,保存。验签在本机完成,不需要联网。见授权

On this page