對 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>
此命令返回 ControllerRevisions 列表
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,並將 DaemonSet 模板替換為儲存在 ControllerRevision 中的模板。kubectl rollout undo
等同於透過其他命令(例如 kubectl edit
或 kubectl apply
)將 DaemonSet 模板更新到上一個修訂版本。
注意
DaemonSet 修訂版本只向前滾動。也就是說,回滾完成後,被回滾到的 ControllerRevision 的修訂版本號(.revision
欄位)會增加。例如,如果系統中有修訂版本 1 和 2,並且從修訂版本 2 回滾到修訂版本 1,那麼 .revision: 1
的 ControllerRevision 將變為 .revision: 3
。