在 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>

這會傳回 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 editkubectl apply)將 DaemonSet 範本更新為先前的修訂版本。

疑難排解

上次修改時間為 2021 年 2 月 11 日下午 3:51 PST:清理用字:just (3ff5ec1eff)