服務設定
服務的 設定 分頁決定它如何建置和執行。儲存 會存下修改,修改在下次部署時生效,準備好後點選 重新部署。變數有自己的分頁(環境變數),網域和連接埠也是(網路)。
名稱、主機名和 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 的單位是核。