如何取消损坏的 StatefulSets 滚动更新?

How to cancel a broken StatefulSets rolling update?

我有一个基于 Patroni/Spilo 的 PostgreSQL Kubernetes 服务。 这个 Kubernetes 服务部署了三个 PostgreSQL pods + 三个 Etcd pods 的集群。 在维护期间,我遇到了故障,无法恢复滚动更新前运行良好的旧配置。

我搜索了文档,似乎 StatefulSets 不支持将回滚作为部署。我找到 this thread that references this doc.

然而,老实说,我不明白如何进行。

我的集群有以下 pods:

postgres-0
postgres-1
postgres-2
etcd-0
etcd-1
etcd-2

我的滚动更新只需要将 etcd 映像从 3.3.20 升级到 3.5.1。升级开始更新 etcd-2,由于多种原因,pod 崩溃了。所以我的意图是停止更新并将 etcd-2 恢复到 3.3.20。

在这种情况下我应该如何处理?活力和探索如何帮助我? 目前,该线程中提出的解决方案让我有点困惑。

要撤消所做的更改,请先检查推出历史记录 kubectl rollout history sts <name> -n <namespace if not default>

获取有关修订的更多详细信息kubectl rollout history sts <name> --revision <number> -n <namespace if not default>

撤消更改kubectl rollout undo sts <name> --to-revision <number> -n <namespace if not default>