跳到內容
開源

部署第一個服務

用一個公開的 Nginx 映像檔,從建立專案走到在瀏覽器打開網址。

這一頁會把一個 Nginx 網頁放上網路:建立專案、填入映像檔、檢查變更、套用,最後在瀏覽器看到 Nginx 的歡迎頁。不需要 Git repository,大約五分鐘。

開始前需要一個能登入的 Zeabur,以及一個能指向叢集的網域,例如 web.example.com。如果管理員已經設好應用程式網域,表單會直接建議一個網址,DNS 也不用自己設。

打開專案,按新增專案,名稱填 hello。這個名稱也會是 Kubernetes Namespace 的名稱,建立後不能改。

按檢查變更,畫面會列出 Zeabur 準備做的事:建立 hello Namespace,加上專案標籤,並套用 Pod Security baseline 設定,允許容器以 root 執行,但禁止存取主機。確認沒問題就按建立。

如果找不到新增專案,表示你的角色不能建立 Namespace。請管理員先建立專案並把你加進去,再從下一步開始。

在 hello 專案裡按新增,選Docker 映像檔:

欄位填入
映像檔docker.io/nginxinc/nginx-unprivileged:1.30.5-alpine-slim
名稱web
連接埠8080
公開網域開啟,用建議的網址或你準備的網域

Zeabur 讀出 nginx-unprivileged 以使用者 101 執行,會自動選 嚴格,表單會說明選擇原因。這個映像檔監聽 8080。nginx:latest 也能執行,Zeabur 會為它選 相容;建立前仍能自行切換。

填完映像檔後,表單會讀出映像檔宣告的連接埠,正常會自動帶入 8080。

按檢查變更,Zeabur 會列出三個要建立的物件:

  • web Deployment,執行剛才的映像檔,1 個副本
  • web Service,把 8080 轉給容器
  • web Ingress,把你的網域導向 web Service

這時候叢集裡還沒有任何新東西。發現網域填錯,就回到表單改。確認無誤再按建立,Zeabur 會帶你到服務頁。

在服務的概覽等副本變成 1/1 就緒。接著到網路點開網域,瀏覽器會出現 Nginx 的歡迎頁。

如果網域下方寫著這個網址只有 HTTP,表示叢集還沒有設定自動簽發憑證,請用 http:// 開啟。要 HTTPS,請管理員設定 cert-manager 簽發者。

回到日誌,可以看到剛才那次開啟網頁留下的存取紀錄。

服務頁的概覽長這樣,上方分頁可以切換到日誌、網路、環境變數和設定:

  • 服務 概覽 顯示 1/1 就緒,瀏覽器打開網址看到 Nginx 的歡迎頁。
  • 用 kubectl 也能看到剛才建立的三個物件,都帶 label app.kubernetes.io/name: web:
kubectl get namespace hello --show-labels
kubectl -n hello get deploy,svc,ingress -l app.kubernetes.io/name=web

Namespace 帶 zeabur.com/project=true,Deployment 的 READY 是 1/1,Ingress 的 HOSTS 是你的網域。

這些都是一般的 Kubernetes 物件,不用 Zeabur 也能用 kubectl apply 建出一模一樣的服務,完整的 YAML 見部署容器映像檔的「用 kubectl 做同樣的事」。

看到的狀況先檢查
副本一直沒有就緒,事件寫著拉不到映像檔映像檔名稱和版本有沒有打錯,節點能不能連到 Docker Hub
副本一直是 0,事件提到 Pod Security需要 root 的映像檔是否選了 相容;專案仍強制 restricted 時,請管理員把專案的 Pod Security 等級改為 baseline
1/1 就緒,網址卻打不開DNS 有沒有指向叢集的入口,連接埠是不是 8080
按套用時出現這份變更已過期按重新檢查,看過新的差異再套用

在 web 服務右上角的更多選刪除服務。刪除也會先列出要刪的物件,這次是 Deployment、Service 和 Ingress,確認後套用。

要連專案一起清掉,到專案設定的危險區域按刪除專案,檢查要刪的東西後輸入 hello 確認,見刪除專案。同一處的從 Zeabur 移除只會拿掉專案標籤,Namespace 和裡面的東西都會留著。