從應用程式範本部署
從 Zeabur Catalog 的範本挑一個應用程式,填好網域和必要欄位後部署到專案。
在專案選擇 新增 → 應用程式範本,挑一個應用程式,填好網域和必要欄位,按 檢查變更 後套用。範本來自這個 Zeabur 版本內建的 Zeabur Catalog,部署時不會連到外部下載範本。
- 已有專案,並有建立服務的權限。範本的物件用你自己的權限建立,權限不夠的物件會在檢查變更時列出。
- 範本需要的元件已經安裝,例如用 PostgreSQL 的範本需要 CloudNativePG。清單會在範本下方寫出 需要先安裝…。
- 範本要公開網域時,準備一個指向叢集 Ingress 的網域。需要 HTTPS 的範本,Zeabur 要先指定憑證簽發者。
挑選應用程式
Section titled “挑選應用程式”開啟 新增 → 應用程式範本。每個範本會寫出它的用途,以及需要多少 CPU 和記憶體。叢集剩下的記憶體或 CPU 不夠時,範本下方會提醒。可以在上方輸入名稱篩選。
安裝缺少的元件
Section titled “安裝缺少的元件”範本需要的元件還沒安裝時,表單上方會寫出元件名稱,並附上 安裝… 按鈕。按下後會到 元件 頁面,照檢查並安裝叢集元件的步驟安裝,再回來部署。缺少元件時,檢查變更 不會繼續。
填寫網域和欄位
Section titled “填寫網域和欄位”- 公開網域:預設用範本名稱和專案名稱組成,可以改成自己的網域。
- 部署前要知道的事:範本作者列出的已知風險和處理方式,預設收合,展開才看得到內容,目前只有英文。部署前先看一遍,例如首次啟動前誰能建立管理員帳號。
- 其他欄位:名稱和說明會跟著介面語言顯示。標示 選填 的欄位可以留空。
密碼和金鑰會在你的瀏覽器產生,存進範本指定的機密,例如 Miniflux 的 miniflux-secrets。部署後,在用到這些值的服務的 環境變數 裡可以顯示它們。
按 檢查變更,確認要建立的物件後套用。會啟動的服務 會列出範本的服務、資料庫和網域,下方寫出尖峰時要用多少 CPU 和記憶體。同一個範本在這個專案已經部署過時,畫面會寫出已經存在的物件,要先刪掉它們,或改部署到別的專案。範本的物件都建立在這個專案的命名空間。
套用後,範本的服務和資料庫會出現在專案裡。打開各服務的 概覽,等副本就緒,再打開範本的公開網域,確認看到應用程式的頁面。
範本的每個物件,以及產生的密碼機密,都帶有三個標籤:app.kubernetes.io/instance 和 templates.zeabur.com/template 是範本 ID,app.kubernetes.io/version 是應用程式版本。用 kubectl 列出這次部署的物件:
kubectl -n shop get deploy,statefulset,svc,ingress,pvc,secret -l app.kubernetes.io/instance=miniflux用到資料庫的範本,也要確認 operator 的物件已就緒,例如 kubectl -n shop get clusters.postgresql.cnpg.io -l app.kubernetes.io/instance=miniflux 的 STATUS 是 Cluster in healthy state。
用 kubectl 做同樣的事
Section titled “用 kubectl 做同樣的事”Zeabur 用內建的 Zeabur Catalog 把範本轉成 YAML。轉換在 Zeabur 裡做,沒有對應的叢集物件,但你可以用 Catalog 的 catalog 指令得到同樣的 YAML,再用 kubectl 套用。
先查 Zeabur 用的 Catalog 版本:到 設定 的 關於,Zeabur Catalog 那一列是它的提交。在 Catalog 的原始碼切到這個提交,進入 nix develop 後執行:
umask 077go run ./tools/cmd/catalog template inputs -namespace shop miniflux > secrets.jsongo run ./tools/cmd/catalog template render -namespace shop \ -domain miniflux.example.com -cluster-issuer letsencrypt miniflux > plan.yamlkubectl -n shop apply -f secrets.jsonkubectl -n shop apply -f plan.yamltemplate inputs產生範本要的密碼和金鑰,每次執行都是新的值,只執行一次,之後升級沿用同一份機密。secrets.json不要放進版本控制。- 範本有要你填的欄位時,把值寫成 JSON 物件,例如 Dify 的
{"storageRegion":"us-east-1", ...},用-values inputs.json傳入。欄位名稱在範本的template.yaml的inputs。 - 範本
requires列出的元件要先裝好。
刪掉整個範本:
kubectl -n shop delete all,ingress,pvc,secret,configmap,networkpolicy -l app.kubernetes.io/instance=miniflux資料庫等 operator 的物件也帶同樣的標籤,用 kubectl -n shop get <種類> -l app.kubernetes.io/instance=miniflux 找出來再刪。刪除磁碟區和資料庫會一起刪掉資料。
範本不會擋下整個專案的流量。誰能連進專案裡的 Pod,由專案的 zeabur-project 決定,見安全性。連出去的連線不擋,應用程式可以連到模型服務、Webhook、郵件伺服器和備份用的 S3。
想限制某個應用程式往外連,自己加一個 NetworkPolicy。下面的例子讓 Umami 只能查 DNS 和連它的資料庫:
apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata: name: umami-egressspec: podSelector: matchLabels: templates.zeabur.com/template: umami app.kubernetes.io/name: umami policyTypes: [Egress] egress: - to: - namespaceSelector: matchLabels: kubernetes.io/metadata.name: kube-system podSelector: matchLabels: k8s-app: kube-dns ports: - {protocol: UDP, port: 53} - {protocol: TCP, port: 53} - to: - podSelector: matchLabels: cnpg.io/cluster: umami-db ports: - {protocol: TCP, port: 5432}用 kubectl apply -n <專案的命名空間> -f umami-egress.yaml 套用。podSelector 只選應用程式的 Pod,不要選到資料庫:資料庫要連 Kubernetes API 和備份用的 S3,擋掉後資料庫會停擺,備份也會失敗。
- 名稱已存在:範本使用固定的物件名稱。同一個專案已經部署過同一個範本,或有同名的機密時,檢查變更會列出衝突。改在另一個專案部署。
- 欄位格式不符:欄位下方會寫出它要的格式,照格式修改後再檢查。
- 檢查變更說叢集不支援某種物件:範本需要的元件還沒裝好,或還在啟動。到 元件 頁面確認狀態。