docs: align onboarding skill with db secret flow
This commit is contained in:
parent
c1d3b67a89
commit
459f475b91
@ -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` 与证书材料
|
||||||
|
|||||||
@ -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`
|
||||||
|
|
||||||
只放应用私有 Secret,key 名必须与 Chart 读取的 key 对齐。
|
只放应用私有 Secret,key 名必须与 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
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user