重新啟動、回滾與暫停服務
重新啟動服務、回到之前的版本,或一次暫停、重新啟動整個專案的服務。
服務卡住時,按服務頁上方的 重新啟動 換一批新副本。新版本有問題時,到 部署紀錄 選之前的版本 回滾。要一次處理整個專案,到專案 設定 的 批次操作。每個動作都會先開啟檢查畫面,確認後套用。
- 有權修改專案裡的服務。
- 重新啟動對 Helm、Argo CD 或 Flux 管理的服務也能用,它只加一個 annotation。回滾會改掉整份 Pod template,由這些工具管理的服務不能從這裡回滾。
重新啟動服務
Section titled “重新啟動服務”進入服務,按頁面上方的 重新啟動。檢查畫面的標題是 重新啟動 web,會寫出服務會不會中斷。
套用並等待新副本
Section titled “套用並等待新副本”套用後,Kubernetes 依服務的更新方式換掉副本。Deployment 預設先啟動新副本,就緒後才停掉舊的。只有一個副本,或用了 Recreate 的服務,會短暫中斷。
在 概覽 的 部署進度 看新副本就緒的數量,全部就緒、舊副本消失就完成了。
Job 和排程工作沒有 重新啟動。要再跑一次排程工作,用排程工作的立即執行。
回滾到之前的版本
Section titled “回滾到之前的版本”每次換映像檔或修改 Pod template 的設定,部署紀錄 就多一筆修訂版本,例如 #3,標 執行中 的是目前的版本。
比較兩個版本
Section titled “比較兩個版本”到服務 部署紀錄,在要回去的版本按 比較,看它和目前版本的 Pod template 差在哪裡。顯示 兩個範本相同。 時,回滾不會改變任何東西。
按那個版本的 回滾。檢查畫面的標題是 將 web 回滾到 #2,確認後套用。
回滾只換回 Pod template,也就是映像檔、環境變數、資源和健康檢查這些設定。容器讀取的 ConfigMap 和 Secret 內容不會跟著回到舊值,檢查畫面也會提醒這一點。
回滾本身也算一次部署,部署紀錄 會把舊的修訂版本換成新的號碼,標成 執行中。等 概覽 的副本都就緒,再從應用程式確認。
部署卡住時,概覽 的 部署進度 也會出現 回滾 按鈕,回到上一個正常的版本。
能回滾到多舊的版本,取決於工作負載的 revisionHistoryLimit,預設保留 10 個。Job 和 CronJob 不保留發布紀錄。
自動部署新的建置
Section titled “自動部署新的建置”從 Git 或上傳資料夾建置的服務,在 建置 分頁開啟 新建置完成後自動部署,每次建置完成就立刻上線。關閉時,建置成功後按 部署最新版 手動上線。這需要叢集裡的 Keel,做法和 kubectl 的對照見從 Git 建置並部署服務。
暫停或重新啟動整個專案
Section titled “暫停或重新啟動整個專案”到專案 設定 的 批次操作:
- 暫停所有服務:按 暫停,把專案裡正在執行的 Deployment 和 StatefulSet 的副本數都調成 0。服務、設定和磁碟區上的資料都會保留。Helm、Argo CD 或 Flux 管理的服務會略過,檢查畫面會列出略過哪些,因為那些工具下次同步時會改回去。
- 重新啟動所有服務:按 重新啟動,專案裡每個 Deployment、StatefulSet 和 DaemonSet 都會分批換成新副本。
套用暫停後,通知裡有 復原,按下去就把每個服務調回原本的副本數。錯過通知的話,要到每個服務的 設定 → 運算資源 把 副本數 改回去,Zeabur 不會另外記住原本的數字。
用 kubectl 做同樣的事
Section titled “用 kubectl 做同樣的事”這些動作和 kubectl 內建的指令寫入同樣的欄位,沒有 Zeabur 專用的物件。以下以專案 demo、Deployment web 為例。
| Zeabur 的動作 | kubectl |
|---|---|
| 重新啟動 | kubectl -n demo rollout restart deployment/web |
回滾 到 #2 | kubectl -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/webkubectl -n demo rollout history deployment/webkubectl -n demo get pods -l app.kubernetes.io/name=webrollout status 印出 successfully rolled out 表示新副本都就緒了。rollout history 列出所有修訂版本,最後一筆是目前的版本。get pods 的 AGE 會是剛才重新啟動的時間。
| 畫面或結果 | 接著處理 |
|---|---|
| 沒有 重新啟動 按鈕 | 你沒有修改服務的權限,或服務是 Job 或排程工作。 |
| 回滾時畫面說服務由 Helm、Argo CD 或 Flux 管理 | 回到那個工具,用它的版本回滾,例如 helm rollback。 |
| 部署紀錄 只有一筆 | 服務還沒有換過 Pod template,或舊的 ReplicaSet 超過 revisionHistoryLimit,Kubernetes 已經清掉。 |
| 回滾後應用程式仍然出錯 | ConfigMap 和 Secret 的內容沒有回滾,到環境變數把值改回去。 |
| 重新啟動後一直停在 部署卡住 | 看 概覽 寫的原因和副本的事件,常見的是映像檔拉不下來或健康檢查不通過。 |