服务设置
服务的 设置 标签页决定它如何构建和运行。保存 会存下修改,修改在下次部署时生效,准备好后点击 重新部署。变量有自己的标签页(环境变量),域名和端口也是(网络)。
名称、主机名和 ID
- 服务名称 显示在控制台中。改名不会影响任何正在运行的内容。
- 内网主机名 是项目中其他服务访问它时使用的名称,即
<hostname>.zenavo.internal(内网通信)。只能包含小写字母、数字和短横线,并以字母开头。修改在下次部署时生效;使用旧地址的地方需要一并更新。 - 服务 ID 是永久的,不会被重复使用:数据卷、日志和 API 路由都使用它。在这里复制,供 API 或 CLI 使用。
配置文件
配置文件 → 打开配置编辑器 可以把文件挂载到容器中,例如 Nginx 配置或 JSON 设置文件,而不需要修改镜像。每个文件需要设置:
- 挂载路径:文件在容器中的完整路径,例如
/etc/nginx/conf.d/default.conf。 - 权限:八进制的文件权限(默认
0644)。 - 文件内容。
- 用服务的变量替换
${VARIABLE}引用:部署时用环境变量中的值填入,这样机密仍然只保存在变量中。
配置文件和变量一样加密存储,并以 Kubernetes Secret 的形式写入服务器。它们在容器中是只读的:应用需要修改并保留的文件,请使用数据卷。
来源与构建
对于 Zenavo 构建的服务,来源 和 构建 部分包含仓库和分支、根目录、Dockerfile、自动部署、监听路径、构建参数 和 zbpack 选项。详见 GitHub、构建方案和本地目录。运行 Docker 镜像的服务则显示镜像,没有需要构建的内容。
启动命令
不修改镜像,覆盖容器运行的内容:
| 字段 | 覆盖 | 示例 |
|---|---|---|
| 启动命令(ENTRYPOINT) | 镜像的 ENTRYPOINT | docker-entrypoint.sh |
| 参数(CMD) | 镜像的 CMD,传给 entrypoint | npm run start:prod |
留空则使用镜像的默认值。值会被直接执行,不经过 shell:包含空格的部分要加引号;需要 &&、| 或 $VARIABLES 时写成 sh -c "…",例如 sh -c "npx prisma migrate deploy && node server.js"。
健康检查与崩溃限制
健康检查 决定新实例何时可以接收流量,详见健康检查。
崩溃后自动重启次数 就是崩溃限制:单个实例最多重启多少次,之后服务会被暂停。-1(默认)表示无限重启;0 表示第一次崩溃后就暂停。服务被暂停时会发送 服务已暂停 通知。
资源限制
默认情况下,服务可以使用服务器上全部的 CPU 和内存。为了避免一个服务挤占同一台服务器上的其他服务,可以为每个实例设置上限:
- CPU(m):单位是毫核;
1000是一核,500是半核。达到上限的服务会被降速,不会被停止。 - 内存(Mi):单位是 MiB。超过上限的服务会被终止并重启(内存不足),这会计入它的崩溃限制。
留空表示不限制。内存上限要比服务平时的用量留出足够余量:服务的 用量 标签页中可以看到实际用量(监控)。
副本数
副本数 让一个服务在项目所在的服务器上运行多个实例,最多 20 个。流量分配到就绪的实例上,部署时逐个替换,所以一个实例崩溃或被替换时,服务仍能继续响应。
- 副本运行在同一台服务器上,所以它们能应对进程崩溃,但不能应对服务器宕机。
- 有数据卷的服务不能使用多个副本,因为数据卷无法在实例之间共享。
- 每个副本都受上面的资源限制约束,并且有各自独立的内存:会话、上传文件和缓存请放在数据库、Redis 或对象存储中,不要放在进程里。
暂停与删除
在 危险操作 中:
- 暂停服务 会停止服务,在你 恢复服务 之前它无法访问。配置、域名和数据卷都会保留。详见回滚与暂停。
- 删除服务 会在你输入服务名称后把它从项目中移除。它会在下次部署(项目 设置 中的 全部部署)时停止。它的数据卷会保留在服务器上,直到项目被删除。依赖它的服务将不再等待它启动。
在 manifest 中
这些设置对应项目 manifest 中服务的字段(设置 → 高级 → 编辑 JSON,或者 API):
{
"name": "web",
"hostname": "web",
"entrypoint": ["docker-entrypoint.sh"],
"command": ["npm", "run", "start:prod"],
"configs": [{ "path": "/app/config.json", "content": "{\"apiUrl\": \"${API_URL}\"}", "mode": 420, "envsubst": true }],
"crash_limit": 5,
"cpus": 0.5,
"memory_mb": 512,
"replicas": 2
}JSON 中的 mode 是十进制(420 即 0644);cpus 的单位是核。