Runtime Configuration#
Perago runtime configuration 是 worker-local 配置。它控制本机 workspace 目录、日志目录、worker id、Conductor 连接和 LakeFS 连接;这些值不属于 Conductor task input/output,也不会写入生成的 TaskDef JSON。
配置由 load_runtime_config() 统一读取。perago check、perago extract 和 perago start 都会在加载 task module 前执行同一套配置加载与校验。
配置来源和优先级#
Perago 会读取当前工作目录下的 .env,再用真实进程环境变量覆盖同名值:
.env values < process environment values
.env 只填补缺失值。部署系统、shell 或 supervisor 注入的进程环境变量拥有更高优先级。
.env 支持简单的 KEY=value、export KEY=value、单引号和双引号包裹的值。空行、注释行和没有 = 的行会被忽略。
最小本地示例#
CONDUCTOR_SERVER_URL=http://localhost:8080/api
# Required only when starting workspace tasks.
# LAKECTL_SERVER_ENDPOINT_URL=http://localhost:8000
# LAKECTL_CREDENTIALS_ACCESS_KEY_ID=replace-with-real-access-key
# LAKECTL_CREDENTIALS_SECRET_ACCESS_KEY=replace-with-real-secret-key
PERAGO_WORKSPACE_ROOT=/var/tmp/perago/workspaces
PERAGO_LOG_ROOT=/var/tmp/perago/logs
PERAGO_LOG_FILE_MAX_SIZE=100MB
PERAGO_LOG_RETENTION=30d
PERAGO_WORKER_ID_PREFIX=peragoLocalWorker
PERAGO_FAILURE_REASON_MAX_LENGTH=500
PERAGO_WORKSPACE_GC_TTL=24h
PERAGO_WORKSPACE_GC_INTERVAL=1h
# Optional; unset by default.
PERAGO_SHUTDOWN_FORCE_KILL_AFTER=30s
replace-me 属于占位值。Perago 看到未替换的连接密钥占位值时会拒绝启动。workspace-free task 不需要 LakeFS 连接变量;不要为了启动 workspace-free worker 配置占位 LakeFS 值。
变量表#
变量 |
Required |
默认值 |
说明 |
|---|---|---|---|
|
optional |
平台临时目录下的 |
attempt-local workspace 根目录。必须是 worker 主机文件系统路径,LakeFS object path 不适用。一个 running supervisor 会独占一个 root。 |
|
optional |
平台临时目录下的 |
worker JSONL 日志根目录。 |
|
optional |
|
单个日志文件 rotation 阈值。接受正数加 |
|
optional |
|
日志保留天数。接受正整数加 |
|
optional |
从 module target 删除非字母数字字符后派生 |
supervisor 为子进程生成 |
|
generated / debug-only |
supervisor 生成;非 supervisor 进程退回到 module target 加 pid |
worker process 身份。 |
|
optional |
|
写入 Conductor |
|
optional |
|
supervisor workspace GC 删除 abandoned attempt workspace 前等待的最小年龄。接受正整数加 |
|
optional |
|
supervisor 后台 workspace GC loop 的运行间隔。接受正整数加 |
|
optional |
unset |
shutdown drain 的可选强制 kill deadline。未配置时 Perago 不调用 |
|
required for |
无 |
Conductor API endpoint。 |
|
required for workspace-task |
无 |
LakeFS endpoint。LakeFS 三个变量必须同时配置或同时省略;workspace-free |
|
required for workspace-task |
无 |
LakeFS access key id。 |
|
required for workspace-task |
无 |
LakeFS secret access key。 |
Perago 目前只解析 CONDUCTOR_SERVER_URL 作为 Conductor runtime config。Conductor auth key/secret 可以由底层 SDK 或部署环境使用;Perago RuntimeConfig 暂不建模这两个字段。
本地目录校验#
默认情况下,load_runtime_config() 会探测 PERAGO_WORKSPACE_ROOT 和 PERAGO_LOG_ROOT 是否可创建、可写。探测会在目标根目录下创建临时目录和 write-test 文件,再立即删除。
perago start 会在 PERAGO_WORKSPACE_ROOT 下创建 .perago-supervisor.lock,并写入当前 supervisor pid。该锁表达部署边界:一个 supervisor 独占一个 workspace root,不允许两个 supervisor 同时指向同一个 root。如果锁内 pid 仍存活,新的 supervisor 会拒绝启动;如果上次 supervisor 或 host 崩溃留下的 pid 已不存在,启动时会清理旧锁并重新加锁。正常退出时 supervisor 会释放自己持有的锁。
perago check 因此可以在不连接 Conductor 或 LakeFS 的情况下验证本机目录配置:
perago check app.workers.features_build
成功输出会包含解析后的目录和连接配置状态:
ok: features.build
workspace_root: /var/tmp/perago/workspaces
log_root: /var/tmp/perago/logs
worker_id_prefix: peragoLocalWorker
conductor: configured
lakefs: configured
目录探测失败会抛出 RuntimeConfigError,错误文本包含不可写路径和底层 OSError。
Worker id 规则#
PERAGO_WORKER_ID_PREFIX 是用户可配置的碰撞隔离旋钮。显式配置时,值必须非空并且只包含 A-Z、a-z、0-9:
PERAGO_WORKER_ID_PREFIX=prodAFeaturesBuild
perago start -j 2 app.workers.features_build 会派生:
PERAGO_WORKER_ID=prodAFeaturesBuild0001
PERAGO_WORKER_ID=prodAFeaturesBuild0002
如果没有显式配置前缀,Perago 会从 module target 派生默认前缀。例如 app.workers.features_build 会变成 appworkersfeaturesbuild。显式配置非法前缀不会被自动修正:
PERAGO_WORKER_ID_PREFIX=prod-a-features-build
会失败并报告:
PERAGO_WORKER_ID_PREFIX must contain only ASCII letters and digits
PERAGO_WORKER_ID 是进程身份。task attempt id、logical task key 和 workspace publication key 使用各自的独立字段。supervisor 管理的 worker 会由 supervisor 写入该值;只有非 supervisor 本地调试进程才会使用用户提供的 PERAGO_WORKER_ID 或 pid fallback。
命令差异#
perago check 会验证配置、task module 和生成 TaskDef 的基本结构,且不连接 Conductor 或 LakeFS。
perago extract 会验证配置和 task module,然后写出 TaskDef JSON。它同样不要求 Conductor 和 LakeFS 必须已经配置完成。
perago start 会额外要求:
CONDUCTOR_SERVER_URL已配置。workspace task 需要 LakeFS endpoint、access key id 和 secret access key 已完整配置;workspace-free task 不需要 LakeFS 连接变量。
Conductor 中已经注册了对应 TaskDef。
推荐流程是先运行 perago check,再运行 perago extract 并注册 TaskDef,最后启动 worker。