对 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)