對 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

步驟 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 editkubectl apply)將 DaemonSet 模板更新到上一個修訂版本。

故障排除

最後修改於太平洋標準時間 2021 年 2 月 11 日下午 3:51:清理單詞“just”的使用 (3ff5ec1eff)