【问题标题】:Stop all Pods in a StatefulSet before scaling it up or down在向上或向下扩展之前停止 StatefulSet 中的所有 Pod
【发布时间】:2020-09-15 21:11:12
【问题描述】:

我的团队目前正致力于将 Discord 聊天机器人迁移到 Kubernetes。我们计划对主要的 bot 服务使用 StatefulSet,因为每个 Shard (pod) 应该只有一个到 Gateway 的连接。每当一个分片连接到所述网关时,它都会告诉它它的 ID(在我们的例子中是 pod 的序号索引)和我们总共运行了多少个分片(StatefulSet 中的副本数量)。 p>

必须告诉网关分片的总数意味着为了扩大或缩小我们的 StatefulSet 我们必须先停止 StatefulSet 中的所有 pod,然后才能使用更新后的值启动新的 pod .

我怎样才能做到这一点?最好通过配置,这样我就不用每次都运行特殊的命令了。

【问题讨论】:

  • 能不能查下相关答案,看看能不能关闭?

标签: docker kubernetes discord


【解决方案1】:

尝试kubectl rollout restart sts <sts name> 命令。它会以 RollingUpdate 的方式一个一个地重启 Pod。

缩小sts kubectl scale --replicas=0 sts <sts name>

放大 sts kubectl scale --replicas=<number of replicas> sts <sts name>

【讨论】:

  • 我想我在最初的问题中没有提到这一点,抱歉:我需要在重新启动它们之前停止所有 pod,因为如果仍有连接,网关不会让你连接额外的分片使用旧的分片计数值打开。
  • 仍然不是我要问的。由于服务与网关交互的方式,我需要一种在更新/缩放发生之前自动停止所有 Pod 的方法
  • 我认为它确实会回答:scale --replicas=0 将停止所有 pod,然后scale --replicas=N 将使用新的所需 pod 编号启动它们。 @hariK 可能想使用 restart 删除答案的第一部分,这确实不符合您的要求。
【解决方案2】:

在任何kubectl scale 之前,由于您需要more control on your nodes,您可以先考虑kubectl drain

当您准备好让节点重新投入使用时,使用 kubectl uncordon,这将使节点再次可调度。

通过排空您的 pod 所在的节点,您将停止所有 pod,并有机会使用新值 scale the statefulset


另请参阅 Keilan Jackson

的“How to Delete Pods from a Kubernetes Node

至少以kubectl cordon <nodename> 开头,将节点标记为不可调度。

如果您的 pod 由 StatefulSet 控制,请首先确保将要删除的 pod 可以安全删除。
如何执行此操作取决于 pod 和您的应用程序对有状态 pod 之一暂时不可用的容忍度。

例如,您可能希望将 MySQL 或 Redis 写入器降级为只读从属设备,更新和发布应用程序代码以暂时不再引用有问题的 pod,或者首先扩展 ReplicaSet 以处理额外的流量可能是由于一个 pod 不可用造成的。

完成后,删除 pod 并等待其替换出现在另一个节点上。

【讨论】:

  • 我只需要停止 StatefulSet 中的 pod,而不是整个节点
  • @PedroFracassi 有没有机会在专用节点中隔离这些 statefulsets pod?因为强制删除由 Statefulset 管理的 pod 似乎很危险 (kubernetes.io/docs/tasks/run-application/…)
【解决方案3】:

这样做的一种方法是, 首先通过运行以下命令获取StatefulSets的YAML配置并将其保存在一个文件中:

kubectl get statefulset NAME -o yaml > sts.yaml

然后通过运行以下命令删除 StatefulSet:

kubectl delete -f sts.yaml

最后,使用您在第一步中获得的相同配置文件再次创建 StatefulSet。

kubectl apply -f sts.yaml

我希望这能回答您的查询,即仅删除 StatefulSets 并创建新的 StatefulSets。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-03
    相关资源
    最近更新 更多