Skip to content
Open Source

重新啟動、回滾與暫停服務

重新啟動服務、回到之前的版本,或一次暫停、重新啟動整個專案的服務。

服務卡住時,按服務頁上方的 重新啟動 換一批新副本。新版本有問題時,到 部署紀錄 選之前的版本 回滾。要一次處理整個專案,到專案 設定 的 批次操作。每個動作都會先開啟檢查畫面,確認後套用。

  • 有權修改專案裡的服務。
  • 重新啟動對 Helm、Argo CD 或 Flux 管理的服務也能用,它只加一個 annotation。回滾會改掉整份 Pod template,由這些工具管理的服務不能從這裡回滾。

進入服務,按頁面上方的 重新啟動。檢查畫面的標題是 重新啟動 web,會寫出服務會不會中斷。

套用後,Kubernetes 依服務的更新方式換掉副本。Deployment 預設先啟動新副本,就緒後才停掉舊的。只有一個副本,或用了 Recreate 的服務,會短暫中斷。

在 概覽 的 部署進度 看新副本就緒的數量,全部就緒、舊副本消失就完成了。

Job 和排程工作沒有 重新啟動。要再跑一次排程工作,用排程工作的立即執行。

每次換映像檔或修改 Pod template 的設定,部署紀錄 就多一筆修訂版本,例如 #3,標 執行中 的是目前的版本。

到服務 部署紀錄,在要回去的版本按 比較,看它和目前版本的 Pod template 差在哪裡。顯示 兩個範本相同。 時,回滾不會改變任何東西。

按那個版本的 回滾。檢查畫面的標題是 將 web 回滾到 #2,確認後套用。

回滾只換回 Pod template,也就是映像檔、環境變數、資源和健康檢查這些設定。容器讀取的 ConfigMap 和 Secret 內容不會跟著回到舊值,檢查畫面也會提醒這一點。

回滾本身也算一次部署,部署紀錄 會把舊的修訂版本換成新的號碼,標成 執行中。等 概覽 的副本都就緒,再從應用程式確認。

部署卡住時,概覽 的 部署進度 也會出現 回滾 按鈕,回到上一個正常的版本。

能回滾到多舊的版本,取決於工作負載的 revisionHistoryLimit,預設保留 10 個。Job 和 CronJob 不保留發布紀錄。

從 Git 或上傳資料夾建置的服務,在 建置 分頁開啟 新建置完成後自動部署,每次建置完成就立刻上線。關閉時,建置成功後按 部署最新版 手動上線。這需要叢集裡的 Keel,做法和 kubectl 的對照見從 Git 建置並部署服務。

到專案 設定 的 批次操作:

  • 暫停所有服務:按 暫停,把專案裡正在執行的 Deployment 和 StatefulSet 的副本數都調成 0。服務、設定和磁碟區上的資料都會保留。Helm、Argo CD 或 Flux 管理的服務會略過,檢查畫面會列出略過哪些,因為那些工具下次同步時會改回去。
  • 重新啟動所有服務:按 重新啟動,專案裡每個 Deployment、StatefulSet 和 DaemonSet 都會分批換成新副本。

套用暫停後,通知裡有 復原,按下去就把每個服務調回原本的副本數。錯過通知的話,要到每個服務的 設定 → 運算資源 把 副本數 改回去,Zeabur 不會另外記住原本的數字。

這些動作和 kubectl 內建的指令寫入同樣的欄位,沒有 Zeabur 專用的物件。以下以專案 demo、Deployment web 為例。

Zeabur 的動作kubectl
重新啟動kubectl -n demo rollout restart deployment/web
回滾 到 #2kubectl -n demo rollout undo deployment/web --to-revision=2
暫停所有服務kubectl -n demo scale deployment,statefulset --all --replicas=0
重新啟動所有服務kubectl -n demo rollout restart deployment,statefulset,daemonset
開啟 新建置完成後自動部署kubectl -n demo annotate deployment web keel.sh/policy=force

重新啟動 寫的是 Pod template 的 annotation kubectl.kubernetes.io/restartedAt,值是當下的時間,和 kubectl rollout restart 相同。回滾 把 spec.template 換成那個修訂版本的內容。

kubectl scale --all 不會略過 Helm 等工具管理的服務,要排除它們的話,改成逐一列出服務名稱。暫停前先記下每個服務的副本數,之後才能調回去:

kubectl -n demo get deployment,statefulset -o custom-columns=NAME:.metadata.name,REPLICAS:.spec.replicas

部署紀錄 標 執行中 的修訂版本是目前的版本。概覽 的副本數和就緒狀態反映重新啟動或暫停的結果,暫停的服務顯示 0 個副本。

kubectl -n demo rollout status deployment/web
kubectl -n demo rollout history deployment/web
kubectl -n demo get pods -l app.kubernetes.io/name=web

rollout status 印出 successfully rolled out 表示新副本都就緒了。rollout history 列出所有修訂版本,最後一筆是目前的版本。get pods 的 AGE 會是剛才重新啟動的時間。

畫面或結果接著處理
沒有 重新啟動 按鈕你沒有修改服務的權限,或服務是 Job 或排程工作。
回滾時畫面說服務由 Helm、Argo CD 或 Flux 管理回到那個工具,用它的版本回滾,例如 helm rollback。
部署紀錄 只有一筆服務還沒有換過 Pod template,或舊的 ReplicaSet 超過 revisionHistoryLimit,Kubernetes 已經清掉。
回滾後應用程式仍然出錯ConfigMap 和 Secret 的內容沒有回滾,到環境變數把值改回去。
重新啟動後一直停在 部署卡住看 概覽 寫的原因和副本的事件,常見的是映像檔拉不下來或健康檢查不通過。