在 DaemonSet 上執行回滾
本頁面說明如何在 DaemonSet 上執行回滾。
開始之前
您需要有一個 Kubernetes 叢集,並且必須設定 kubectl 命令列工具以與您的叢集通訊。建議在至少有兩個節點且未充當控制平面主機的叢集上執行本教學課程。如果您還沒有叢集,可以使用 minikube 建立一個,或者您可以使用這些 Kubernetes 實驗環境之一
您的 Kubernetes 伺服器版本必須為 1.7 或更新版本。若要檢查版本,請輸入kubectl version
。您應該已經知道如何在 DaemonSet 上執行滾動更新。
在 DaemonSet 上執行回滾
步驟 1:尋找您想要回滾到的 DaemonSet 修訂版本
如果您只想回滾到最後一個修訂版本,則可以跳過此步驟。
列出 DaemonSet 的所有修訂版本
kubectl rollout history daemonset <daemonset-name>
這會傳回 DaemonSet 修訂版本的清單
daemonsets "<daemonset-name>"
REVISION CHANGE-CAUSE
1 ...
2 ...
...
- 變更原因從 DaemonSet 註解
kubernetes.io/change-cause
複製到其修訂版本以進行建立。您可以在kubectl
中指定--record=true
,以在變更原因註解中記錄執行的命令。
若要查看特定修訂版本的詳細資訊
kubectl rollout history daemonset <daemonset-name> --revision=1
這會傳回該修訂版本的詳細資訊
daemonsets "<daemonset-name>" with revision #1
Pod Template:
Labels: foo=bar
Containers:
app:
Image: ...
Port: ...
Environment: ...
Mounts: ...
Volumes: ...
步驟 2:回滾到特定修訂版本
# Specify the revision number you get from Step 1 in --to-revision
kubectl rollout undo daemonset <daemonset-name> --to-revision=<revision>
如果成功,命令會傳回
daemonset "<daemonset-name>" rolled back
注意
如果未指定--to-revision
旗標,kubectl 會選取最新的修訂版本。步驟 3:監看 DaemonSet 回滾的進度
kubectl rollout undo daemonset
告訴伺服器開始回滾 DaemonSet。真正的回滾是在叢集控制平面內部非同步完成的。
若要監看回滾的進度
kubectl rollout status ds/<daemonset-name>
當回滾完成時,輸出會類似於
daemonset "<daemonset-name>" successfully rolled out
了解 DaemonSet 修訂版本
在先前的 kubectl rollout history
步驟中,您會取得 DaemonSet 修訂版本的列表。每個修訂版本都儲存在名為 ControllerRevision 的資源中。
若要查看每個修訂版本中儲存的內容,請尋找 DaemonSet 修訂版本的原始資源
kubectl get controllerrevision -l <daemonset-selector-key>=<daemonset-selector-value>
這會傳回 ControllerRevision 的列表
NAME CONTROLLER REVISION AGE
<daemonset-name>-<revision-hash> DaemonSet/<daemonset-name> 1 1h
<daemonset-name>-<revision-hash> DaemonSet/<daemonset-name> 2 1h
每個 ControllerRevision 都儲存 DaemonSet 修訂版本的註解和範本。
kubectl rollout undo
接受特定的 ControllerRevision,並使用 ControllerRevision 中儲存的範本來取代 DaemonSet 範本。kubectl rollout undo
等同於透過其他指令(例如 kubectl edit
或 kubectl apply
)將 DaemonSet 範本更新為先前的修訂版本。
注意
DaemonSet 修訂版本只會向前滾動。也就是說,在回滾完成後,要回滾到的 ControllerRevision 的修訂版本號碼(.revision
欄位)將會前進。例如,如果您的系統中有修訂版本 1 和 2,並且從修訂版本 2 回滾到修訂版本 1,則 .revision: 1
的 ControllerRevision 將會變成 .revision: 3
。