平台配置文件管理
平台运行依赖 4 个核心配置文件。它们在「本地 docker-compose」和「线上 kustomize/k8s」两种部署形态下存在于不同位置,但内容(尤其是 config.py)应保持一致。
| 文件 | 作用 |
|---|---|
config.py |
平台主配置(数据库、Redis、Celery、鉴权方式、特性开关、集群信息、存储路径等) |
entrypoint.sh |
容器启动脚本(初始化软链、编译翻译、建库、db upgrade、创建 admin、按 STAGE 启动服务) |
project.py |
用户自定义模块(自定义登录中转 / SSO 跳转、推送等) |
kubeconfig |
平台要纳管的 k8s 集群的 kubeconfig 文件(多集群时多份) |
说明:
config.py三处位置(本地、kustomize overlays、线上 configmap)内容相同,改一处后需同步到其余位置。
一、本地开发(docker-compose)
启动方式:在 install/docker/ 目录下执行 docker-compose up(详见 02-部署安装 / docker-compose 本地部署)。
配置文件源在 install/docker/ 下,由 docker-compose.yml 以挂载(volume)方式注入容器:
宿主机源文件(install/docker/) |
容器内挂载路径 |
|---|---|
config.py |
/home/myapp/myapp/config.py |
entrypoint.sh |
/entrypoint.sh |
project.py |
/home/myapp/myapp/project.py |
kubeconfig/(目录) |
/home/myapp/kubeconfig |
依据:install/docker/docker-compose.yml:71-74。
install/docker/kubeconfig/ 下已带多份示例:dev-kubeconfig、prod-kubeconfig、cloud-kubeconfig、npu-kubeconfig。config.py 里通过 CLUSTERS 配置引用,例如 "KUBECONFIG": '/home/myapp/kubeconfig/dev-kubeconfig'(见 install/docker/config.py 的 CLUSTERS 段)。
本地改配置后,重启对应容器即可生效(挂载方式,无需重建镜像)。
二、线上部署(kustomize overlays)
启动方式:在 install/kubernetes/ 目录下执行 kubectl apply -k cube/overlays(或 kustomize build cube/overlays | kubectl apply -f -,详见 02-部署安装)。
2.1 config.py / entrypoint.sh / project.py → configmap kubeflow-dashboard-config
源文件目录:install/kubernetes/cube/overlays/config/,包含 config.py、entrypoint.sh、project.py。
install/kubernetes/cube/overlays/kustomization.yml 用 configMapGenerator 把这三个文件打包成 infra 命名空间下的 configmap kubeflow-dashboard-config:
# install/kubernetes/cube/overlays/kustomization.yml
namespace: infra
configMapGenerator:
- name: kubeflow-dashboard-config
files:
- config/config.py
- config/entrypoint.sh
- config/project.py
后端 Pod 把该 configmap 挂载到容器(install/kubernetes/cube/base/deploy-backend.yaml:103-111,均用 subPath 单文件挂载):
| configmap key | 容器内路径 |
|---|---|
config.py |
/home/myapp/myapp/config.py |
entrypoint.sh |
/entrypoint.sh |
project.py |
/home/myapp/myapp/project.py |
注意:kustomize 的
configMapGenerator默认会给 configmap 名字追加一段内容哈希后缀,集群里实际名字形如kubeflow-dashboard-config-xxxxxxx,并会自动滚动更新引用它的 Deployment。kustomization.yml注释里给出了不带哈希、手动创建的等价命令:kubectl delete configmap kubeflow-dashboard-config -n infra kubectl create configmap kubeflow-dashboard-config --from-file=config -n infra
2.2 kubeconfig → 单独的 configmap kubernetes-config
线上 kubeconfig 不属于 kubeflow-dashboard-config,而是单独打成 configmap kubernetes-config。源目录为 install/kubernetes/kubeconfig/,部署脚本据此在多个命名空间创建该 configmap(install/kubernetes/start.sh:146-153):
kubectl delete configmap kubernetes-config -n infra
kubectl create configmap kubernetes-config --from-file=kubeconfig -n infra
# 同样在 pipeline、automl 命名空间各创建一份
后端 / worker / watch Pod 都把 kubernetes-config 挂载到 /home/myapp/kubeconfig(install/kubernetes/cube/base/deploy-backend.yaml:118-119 等)。
注意:仓库中的
install/kubernetes/kubeconfig/目录当前为空,start.sh:10会用mkdir -p kubeconfig && echo "" > kubeconfig/dev-kubeconfig占位(已核对)。实际部署时需把目标集群真实的 kubeconfig 放进该目录后再创建 configmap,见install/kubernetes/start.sh:10,146-153。
三、配置升级(改完怎么生效)
线上有两种等价的更新方式:
改源文件后重新部署
- 改
install/kubernetes/cube/overlays/config/下的config.py/entrypoint.sh/project.py; - 改 kubeconfig 则改
install/kubernetes/kubeconfig/; - 在
install/kubernetes/下重新执行kubectl apply -k cube/overlays(kubeconfig 用start.sh里的create configmap kubernetes-config命令重建)。
- 改
直接改线上 configmap 后重启 Pod
- 直接编辑
infra命名空间下的kubeflow-dashboard-config*(或kubernetes-config)configmap; - 改完重启
infra命名空间下kubeflow-dashboard*相关 Pod 使其重新读取。
- 直接编辑
本地(docker-compose)改完源文件后,重启对应容器即可。
相关
- 数据库连接串(
MYSQL_SERVICE/POSTGRESQL_SERVICE等)属于config.py/部署环境变量,详见 元数据库配置.md。 - HTTPS 场景下
config.py外网地址、前端 nginx scheme 改写等,见 平台HTTPS配置.md。 config.py各字段含义与速查,参见 06-二次开发 与 07-参考速查。- 部署方式(docker-compose / kubernetes)详见 02-部署安装。
配置项繁多,具体字段含义以源码
install/docker/config.py/install/kubernetes/cube/overlays/config/config.py为准,本篇仅作位置与升级方式导航。