【发布时间】:2020-01-22 23:57:26
【问题描述】:
我有一个有 2 个 pod 的 StatefulSet。它有一个无头服务,每个 pod 都有一个 LoadBalancer 服务,可以让全世界都使用它。
假设 pod 名称是 pod-0 和 pod-1。
如果我想删除 pod-0 但保持 pod-1 处于活动状态,我无法执行此操作。
我试过了
kubectl delete pod pod-0
这会删除它,但随后会重新启动它,因为 StatefulSet 副本设置为 2。
所以我尝试了
kubectl delete pod pod-0
kubectl scale statefulset some-name --replicas=1
这会删除 pod-0,删除 pod-1,然后重新启动 pod-0。我猜是因为当副本设置为 1 时,StatefulSet 想要保持 pod-0 处于活动状态而不是 pod-1。
但是如何保持 pod-1 处于活动状态并删除 pod-0?
【问题讨论】:
-
你为什么要这样做?为什么“pod-0”不存在真的很重要?
-
每个 pod 都包含用户创建的特定数据。因此有状态集。我想存储用户创建的所有数据,并在用户下次需要时将其返回。当一个用户创建了许多 Pod 或许多用户创建了许多 Pod 时,我希望能够根据用户请求关闭任意 Pod。
-
解决这个问题的一种方法是为每个 pod 创建一个副本数为 1 的 StatefulSet。这将确保可以根据用户请求删除任何 pod,并且仍然保留其后面的持久卷。但这意味着要管理很多 StatefulSet ......我认为效率有点低。
-
一种方式是设置持久化卷,另一种方式是设置Redis或其他缓存方案。因此,您不必介意丢失任何豆荚。
标签: kubernetes kubernetes-pod kubernetes-statefulset