docs: align onboarding skill with db secret flow

This commit is contained in:
xiaobing.wang 2026-04-02 14:44:53 +08:00
parent c1d3b67a89
commit 459f475b91
2 changed files with 24 additions and 35 deletions

View File

@ -23,8 +23,8 @@
- 明确列出应用仓库必须产出的文件、GitOps 导出结果和 CI 处理顺序 - 明确列出应用仓库必须产出的文件、GitOps 导出结果和 CI 处理顺序
- 只允许应用仓库 CI 同步当前应用自己的 release 结果与 `Application.targetRevision` - 只允许应用仓库 CI 同步当前应用自己的 release 结果与 `Application.targetRevision`
- `deploy/release/secret.yaml`唯一作者源CI 只导出 `releases/<app>/manifests/secret.yaml` - `deploy/release/secret.yaml`应用私有 Secret 作者源
- 如果保留 `releases/<app>/manifests/` source就必须保留固定模板的 `kustomization.yaml` - 应用仓库 CI 保留 GitOps 仓库中已有的 `manifests/kustomization.yaml``manifests/db-secret.yaml`
- 如果 Go 构建发生在 Dockerfile 内,`build-images` 必须用 `--build-arg` 透传 `GOPROXY` 等构建变量 - 如果 Go 构建发生在 Dockerfile 内,`build-images` 必须用 `--build-arg` 透传 `GOPROXY` 等构建变量
- 需要公网 HTTP 入口时固定使用 nginx + 单一 `NodePort`,不改成 Ingress - 需要公网 HTTP 入口时固定使用 nginx + 单一 `NodePort`,不改成 Ingress
- 百智云用户鉴权是必填项,按固定顺序逐项补齐 `app_id` 与证书材料 - 百智云用户鉴权是必填项,按固定顺序逐项补齐 `app_id` 与证书材料

View File

@ -77,41 +77,19 @@ GitLab CI 默认依赖这些变量:
- `deploy/release/values.yaml` - `deploy/release/values.yaml`
- `deploy/release/secret.yaml` - `deploy/release/secret.yaml`
如果 `Application` 仍引用 `releases/<app>/manifests/`,还必须生成:
- `deploy/release/manifests/kustomization.yaml`
默认模板固定为:
```yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: <app-name>
resources:
- secret.yaml
- ../../../shared
```
只有在确实需要额外静态资源时,才往 `resources:` 追加内容。
如果 `Application` 不再引用 `releases/<app>/manifests/`,就不要保留 `deploy/release/manifests/`
## GitOps 仓库里最终应该有哪些文件 ## GitOps 仓库里最终应该有哪些文件
CI 导出结果固定为: CI 导出结果固定为:
- `deploy/release/metadata.yaml` -> `releases/<app>/metadata.yaml` - `deploy/release/metadata.yaml` -> `releases/<app>/metadata.yaml`
- `deploy/release/values.yaml` -> `releases/<app>/values.yaml` - `deploy/release/values.yaml` -> `releases/<app>/values.yaml`
- `deploy/release/manifests/kustomization.yaml` -> `releases/<app>/manifests/kustomization.yaml`
- `deploy/release/secret.yaml` -> `releases/<app>/manifests/secret.yaml` - `deploy/release/secret.yaml` -> `releases/<app>/manifests/secret.yaml`
- `apps/<app>/application.yaml` -> 只更新 chart source 的 `targetRevision` - `apps/<app>/application.yaml` -> 只更新 chart source 的 `targetRevision`
固定规则: 固定规则:
- 不导出 `releases/<app>/secret.yaml` - 不导出 `releases/<app>/secret.yaml`
- `releases/<app>/manifests/kustomization.yaml` 默认只维护 `secret.yaml``../../../shared` - 不生成或覆盖 `db-secret.yaml``kustomization.yaml` 这类 GitOps 仓库里已有的文件
- 不要依赖 `../secret.yaml` 这类位于当前 source path 外的裸资源文件
- 如果不再导出 `releases/<app>/manifests/`,必须同时移除 `Application` 中对应的 manifests source
## GitLab CI 规则 ## GitLab CI 规则
@ -207,12 +185,10 @@ Go 项目默认变量写在 `.gitlab-ci.yml` 的 `variables:`
处理顺序固定为: 处理顺序固定为:
1. 克隆 `https://${GITEA_USER}:${GITEA_TOKEN}@deploy.baizhi.cloud/gitops-admin/argodeploy.git` 1. 克隆 `https://${GITEA_USER}:${GITEA_TOKEN}@deploy.baizhi.cloud/gitops-admin/argodeploy.git`
2. 清空并重建 `releases/<app>/` 2. 确保 `releases/<app>/``releases/<app>/manifests/` 存在,不要整体清空目录
3. 复制 `deploy/release/``releases/<app>/` 3. 将应用仓库中的 `deploy/release/metadata.yaml``deploy/release/values.yaml` 复制到 GitOps 仓库的 `releases/<app>/metadata.yaml``releases/<app>/values.yaml`,覆盖已有内容
4. 删除 `releases/<app>/secret.yaml` 4. 保留已有的 `releases/<app>/manifests/kustomization.yaml``releases/<app>/manifests/db-secret.yaml`
5. 如果仍保留 manifests source 5. 将 `deploy/release/secret.yaml` 物化为 `releases/<app>/manifests/secret.yaml`
- 保留 `releases/<app>/manifests/kustomization.yaml`
- 将 `deploy/release/secret.yaml` 物化为 `releases/<app>/manifests/secret.yaml`
6. 替换 `releases/<app>/metadata.yaml``releases/<app>/values.yaml` 中的 `__VERSION__` 6. 替换 `releases/<app>/metadata.yaml``releases/<app>/values.yaml` 中的 `__VERSION__`
7. 更新 `apps/<app>/application.yaml` 中当前应用 chart source 的 `targetRevision` 7. 更新 `apps/<app>/application.yaml` 中当前应用 chart source 的 `targetRevision`
8. 只有存在 diff 时才提交并推送 `main` 8. 只有存在 diff 时才提交并推送 `main`
@ -241,6 +217,7 @@ Chart 必须反映应用的真实运行架构。
- 支持 `imagePullSecrets` - 支持 `imagePullSecrets`
- 环境变量注入保持可读 - 环境变量注入保持可读
- 如果镜像内带 nginx / 反向代理配置upstream service 名必须与 Chart 渲染出的 Service 名一致 - 如果镜像内带 nginx / 反向代理配置upstream service 名必须与 Chart 渲染出的 Service 名一致
- 生成 chart 时要确认应用是否包含需要经 nginx 转发的静态文件;如果有,必须明确静态资源目录、挂载方式和 nginx 路由,不要只配后端 upstream
- 不要依赖 Kubernetes 不支持的 `$(OTHER_ENV)` 展开 - 不要依赖 Kubernetes 不支持的 `$(OTHER_ENV)` 展开
- 对 Neo4j 这类镜像,不要注入不存在的 `NEO4J_*` 配置名,例如 `NEO4J_PASSWORD` - 对 Neo4j 这类镜像,不要注入不存在的 `NEO4J_*` 配置名,例如 `NEO4J_PASSWORD`
@ -295,12 +272,27 @@ Chart 必须反映应用的真实运行架构。
- 应用自建镜像使用 `registry.baizhi.cloud/<app>/...` - 应用自建镜像使用 `registry.baizhi.cloud/<app>/...`
- 第三方镜像保持真实来源 - 第三方镜像保持真实来源
- Secret 名与 Chart 约定一致 - Secret 名与 Chart 约定一致
- PostgreSQL 连接读取应用自己的 `databaseSecret`
- 私有镜像包含 `imagePullSecrets` - 私有镜像包含 `imagePullSecrets`
- 与 Chart schema 一致 - 与 Chart schema 一致
- nginx 对外入口使用 `NodePort` - nginx 对外入口使用 `NodePort`
- `NodePort` 值来自用户或平台分配结果 - `NodePort` 值来自用户或平台分配结果
- 不包含 Ingress 配置项 - 不包含 Ingress 配置项
### `manifests/db-secret.yaml`
这是 deploy 仓库注册应用阶段生成的数据库源,不是应用仓库侧要生成的文件。至少包含:
- `host`
- `port`
- `database`
- `username`
- `password`
固定规则:
- chart 如果依赖 Postgres 则必须消费这个 secret
### `secret.yaml` ### `secret.yaml`
只放应用私有 Secretkey 名必须与 Chart 读取的 key 对齐。 只放应用私有 Secretkey 名必须与 Chart 读取的 key 对齐。
@ -330,8 +322,6 @@ Chart 必须反映应用的真实运行架构。
`platform-shared-secrets` 提供: `platform-shared-secrets` 提供:
- `POSTGRES_USER`
- `POSTGRES_PASSWORD`
- `REDIS_PASSWORD` - `REDIS_PASSWORD`
- `QDRANT_API_KEY` - `QDRANT_API_KEY`
- `MINIO_ACCESS_KEY` - `MINIO_ACCESS_KEY`
@ -346,7 +336,6 @@ Chart 必须反映应用的真实运行架构。
固定 FQDN 固定 FQDN
- `postgres.infra.svc.cluster.local`
- `redis.infra.svc.cluster.local` - `redis.infra.svc.cluster.local`
- `qdrant.infra.svc.cluster.local` - `qdrant.infra.svc.cluster.local`
- `minio.infra.svc.cluster.local` - `minio.infra.svc.cluster.local`
@ -354,7 +343,7 @@ Chart 必须反映应用的真实运行架构。
固定规则: 固定规则:
- 不要写成当前应用 namespace 下的裸服务名 - 不要写成当前应用 namespace 下的裸服务名
- 不默认为 `PostgreSQL`、`Redis`、`Qdrant`、`MinIO` 生成应用私有实例 - 不默认为 `Redis`、`Qdrant`、`MinIO` 生成应用私有实例
- `Neo4j` 不属于 shared如应用需要由应用自己部署 - `Neo4j` 不属于 shared如应用需要由应用自己部署
- 不要把应用私有鉴权材料放进 `shared/` - 不要把应用私有鉴权材料放进 `shared/`
- 如果 Chart 依赖的运行时资源不是由 Chart 直接创建,就必须确保 `releases/<app>/manifests/` 仍会把这些资源 apply 到目标 namespace - 如果 Chart 依赖的运行时资源不是由 Chart 直接创建,就必须确保 `releases/<app>/manifests/` 仍会把这些资源 apply 到目标 namespace