配置文件在哪里
每次启动时都会渲染 config/templates/*.template 并覆盖每个组件的配置位置。
如果直接修改组件侧的文件,下一次启动时就会消失。
→ 如何更改配置
数据湖的配置是按 “两个来源,一个方向” 构建的。操作员需要修改的文件是固定的,容器内的配置文件是根据这些文件生成的。
호스트 /etc/kopens/conf/*.template ← 설정의 «형태» (빈칸이 뚫린 원본)
× /etc/kopens/plantpulse-platform.env ← 시크릿 (비밀번호 · API 키)
× /etc/kopens/platform.node.env ← 이 노드의 값 (IP · 모드)
+ 이미지 안 config/defaults.env ← 비밀 아닌 기본값 (위에서 안 준 것만)
─────────────────────────────────────────
→ pd config render → /opt/kopens/plantpulse-platform/<module>/conf/… (생성물)
pd start 每次都会毫无例外地首先渲染。因此,即使手动修改了容器内的生成物,下一次启动时也会消失。2026-09-01 曾发生过实际修改容器内的 cassandra.yaml 以启用认证,但由于文件被重新生成而恢复原状,导致认证完全失效的事故。
四个正本文件
| # | 文件 | 内容 | 格式 | 谁使用 |
|---|---|---|---|---|
| 1 | /etc/kopens/plantpulse-platform.env | 机密信息 — 服务账户密码 · API 密钥 · TLS 密码。非机密公共值也可以写在里面 | VAR=값 每行一个,不带 export。头两行(# generated: · # last rotation:)由工具管理 | 由 install.sh 创建,passwd.sh 更新。非机密行由操作员直接填写 |
| 2 | /etc/kopens/platform.node.env | 此节点特有的值 — PP_MASTER_IP · PP_KAFKA_ADVERTISED_HOST · DOCKER_PP_EXTERNAL_IP · PP_NODE_ID | 相同格式 | 安装工具从模板生成,操作员直接填写 |
| 3 | /etc/kopens/conf/*.template | 配置的形态 — 各引擎的配置文件原始 33 个 | 各引擎的语法 + ${PP_변수} 占位符 | 首次启动时从镜像中播种,之后由操作员直接填写 |
| 4 | (镜像内)plantpulse-datalake-cli/config/defaults.env | 非机密默认值 — 端口 · 账号名 · 目录 · TLS 设置 | KEY=value | 产品。操作员不修改,用 1 和 2 来覆盖 |
仅修改 sidecar 中的密码行并不能完成生效。对于像 PostgreSQL · Aster TSDB 这样服务器账户才是正本的值,服务器端也需要一同修改。如果顺序弄错,平台将无法启动。bin/passwd.sh 会代为执行该顺序 → 更改密码 · API 密钥
值确定的顺序
主机上的 bin/env.sh 从上到下读取的顺序就是优先级。后读取的生效。
| 优先级 | 来源 | 为什么生效 |
|---|---|---|
| 1(最高) | /etc/kopens/platform.node.env | 在 sidecar 之后读取的无条件赋值 |
| 2 | /etc/kopens/plantpulse-platform.env | VAR=값 无条件赋值 — 也会覆盖 shell 的 export |
| 3 | 调用 shell 的 export | 仅当 1 和 2 未写该名称时 |
| 4(最低) | bin/env.sh 的 ${VAR:-기본값} | 仅当无人指定时 |
该值通过 compose 以环境变量方式进入容器,在容器内传入的值胜过 defaults.env。
export 会被静默忽略像 PP_PG_PASSWORD=새값 bin/up.sh 那样在 shell 中提供值的方法仅适用于 sidecar 尚不存在的节点。如果 sidecar 已经持有该名称,则 sidecar 生效。实际曾发生过误以为已如此更改而继续前进的事故。
要查看当前节点的有效值和来源,不要靠头脑模拟,请执行此命令。机密信息会被 **** 隐藏。
cd /opt/kopens/plantpulse-platform-docker
bin/env.sh --print
容器内没有 sidecar
容器中不挂载 /etc/kopens/plantpulse-platform.env 文件。值的传递路径是:主机上的 bin/env.sh 读取 sidecar,然后由 compose 将其作为环境变量传入容器。
因此,会出现以下两点:
- 修改 sidecar 后需要重新创建容器新值才会生效。主机上的
bin/restart-datalake.sh负责此操作。 - 对于 compose 未写的名称,无论 sidecar 中写入多少,都不会到达容器。哪些名称能到达,由
compose/docker-compose.yml的x-pp-secrets锚点和plantpulse-datalake服务的environment:块决定。变量参考中只汇总了“能到达的名称”。
在容器内执行 pd doctor,sidecar 行不是显示“文件不存在”,而是完全不显示,取而代之的是 all required secrets set 行,这才是实际测量值 — 这是正常的。
模板列表 — 哪些内容渲染到哪里
主机 /etc/kopens/conf/ 中的模板 33 个(顶层 23 + cluster/ 10)将前往以下位置。对应表的正本在容器内 plantpulse-datalake-cli/config/render.map,pd config list 会输出与此节点模式对应的行。
| 模板 | 渲染位置(PP_HOME 基准) | MASTER | WORKER |
|---|---|---|---|
valkey.conf | plantpulse-storage/cache/valkey/conf/valkey.conf | ○ | ○ (cluster/) |
postgresql.conf · pg_hba.conf | plantpulse-storage/db/postgres/conf/ | ○ | ○ (cluster/) |
cassandra.yaml · jvm-server.options | plantpulse-storage/db/cassandra/conf/ | ○ | ○ (cluster/) |
spark-env.sh · spark-defaults.conf · metrics.properties | plantpulse-analytics/spark/conf/ | ○ | ○ |
hive-site.xml · hive-auth.properties | plantpulse-analytics/spark/conf/ | ○ | ○ (cluster/) |
hive-site.xml | plantpulse-analytics/hive/conf/hive-site.xml | ○ | — |
kyuubi-defaults.conf | plantpulse-analytics/kyuubi/conf/ | ○ | ○ |
gravitino-iceberg-rest-server.conf | plantpulse-analytics/gravitino/conf/ | ○ | — |
kafka.properties · kafka-jaas.conf | plantpulse-messaging/kafka/config/kafka.properties · jaas.conf | ○ | — |
hivemq.xml · plantpulse-mq-auth.properties | plantpulse-messaging/mqtt/conf/config.xml · auth.properties | ○ | — |
plantpulse-timeseries-engine.conf | plantpulse-timeseries/engine/conf/ (以两个名称) | ○ | — |
plantpulse-datalake-admin-api.properties | plantpulse-datalake-admin-api/config/ | ○ | ○ (cluster/) |
workflow.yaml · application.yaml | plantpulse-workflow/temporal/config/ · kestra/config/ | ○ | — |
plantpulse-cep.properties | plantpulse-cep/config/ | ○ | — |
plantpulse-jdbc.properties · plantpulse-data-gateway.properties | plantpulse-data-gateway/config/ | ○ | — |
cluster/ 标记表示 WORKER 节点使用 /etc/kopens/conf/cluster/ 下的不同模板。例如,MASTER 的 valkey.conf.template 中不包含 replicaof,而 cluster/valkey.conf.template 中包含 replicaof ${PP_MASTER_IP} ${PP_REDIS_PORT}。
模板语法
仅三种。
| 语法 | 含义 |
|---|---|
${PP_VAR} | 如果值缺失,渲染整体失败 (exit 4)。不会填充空值后继续 |
${PP_VAR:기본값} · ${PP_VAR:-기본값} | 如果值缺失,使用默认值 |
机密信息中不能放置内联默认值。旧渲染器会用空值填充并继续,导致出现过密码为空字符串的 Aster TSDB,所以现在会列出所有缺失名称并停止。
不渲染的配置 — 管理控制台账户
管理控制台的登录账户不包含在任何模板中。admin-api 进程直接从环境变量读取。这是为了避免在磁盘上再创建一份密码副本。
| 变量 | 来源 | 默认值 |
|---|---|---|
PP_DATALAKE_ADMIN_USER | defaults.env | admin |
PP_DATALAKE_ADMIN_PASSWORD | sidecar | 2026-09-05 之后的安装版本使用与 Web 控制台管理员相同的开发默认值 → 更改初始密码。之前的安装版本为空,因此控制台处于关闭状态 |
PP_DATALAKE_ADMIN_API_KEY | sidecar | 无 — 如果为空,仅禁用密钥认证,浏览器登录仍然有效 |
无法单独禁用某个组件
虽然存在变量 PD_OPTIONS,但当前的 compose 堆栈不会将此值传递给容器。
因此,不支持仅排除某个组件来启动的配置 →
FAQ