Kubernetes:如何在不重新创建的情况下删除由StatefulSet管理的特定pod?
我有一套有两个豆荚的大礼包。它有一个无头服务,每个吊舱都有一个负载平衡器服务,使它可以向全世界提供 假设吊舱的名称是吊舱0和吊舱1 如果我想删除pod-0,但保持pod-1处于活动状态,我无法执行此操作 我试过了Kubernetes:如何在不重新创建的情况下删除由StatefulSet管理的特定pod?,kubernetes,kubernetes-pod,kubernetes-statefulset,Kubernetes,Kubernetes Pod,Kubernetes Statefulset,我有一套有两个豆荚的大礼包。它有一个无头服务,每个吊舱都有一个负载平衡器服务,使它可以向全世界提供 假设吊舱的名称是吊舱0和吊舱1 如果我想删除pod-0,但保持pod-1处于活动状态,我无法执行此操作 我试过了 kubectl delete pod pod-0 这会删除它,但会重新启动它,因为StatefulSet replica设置为2 所以我试过了 kubectl delete pod pod-0 kubectl scale statefulset some-name --replica
kubectl delete pod pod-0
这会删除它,但会重新启动它,因为StatefulSet replica设置为2
所以我试过了
kubectl delete pod pod-0
kubectl scale statefulset some-name --replicas=1
这将删除pod-0,删除pod-1,然后重新启动pod-0。我猜是因为当replica设置为1时,StatefulSet希望保持pod-0处于活动状态,而不是pod-1
但是,如何保持pod-1处于活动状态并删除pod-0?状态集控制器不支持此操作。也许你能做的最好的事情就是试着用睡眠垫片自己制作一个豆荚,也许你可以更快。但是sts控制器将永远不快乐。这是StatefulSet控制器不支持的。也许你能做的最好的事情就是试着用睡眠垫片自己制作一个豆荚,也许你可以更快。但是sts控制器将永远不快乐。
- Statefulset始终创建索引为0..(副本-1)的POD
- 如果您真的想更好地控制单个pod,我想您需要创建单独的STS对象(replica=1)
- Statefulset始终创建索引为0..(副本-1)的POD
- 如果您真的想更好地控制单个pod,我想您需要创建单独的STS对象(replica=1)
CloneSet
自定义资源,您可以通过选择性豆荚移除进行更精细的控制
apiVersion: apps.kruise.io/v1alpha1
kind: CloneSet
spec:
# ...
replicas: 4
scaleStrategy:
podsToDelete:
- sample-9m4hp # you select which pod to remove
移除部署
或状态集
的特定POD的问题多年来一直没有解决:
您可以尝试使用自定义控制器,如: 如果您使用
CloneSet
自定义资源,您可以通过选择性豆荚移除进行更精细的控制
apiVersion: apps.kruise.io/v1alpha1
kind: CloneSet
spec:
# ...
replicas: 4
scaleStrategy:
podsToDelete:
- sample-9m4hp # you select which pod to remove
移除部署
或状态集
的特定POD的问题多年来一直没有解决:
你为什么要这么做?为什么“pod-0”不存在真的很重要?每个pod都包含用户创建的特定数据。因此有状态集。我想存储用户创建的所有数据,并在下次用户需要时将其返回。当一个用户创建了许多pod或许多用户创建了许多pod时,我希望能够根据用户请求关闭任意pod。解决方法之一是为每个pod创建一个副本计数为1的状态集。这将确保可以根据用户请求删除任何pod,并且仍然保留其后面的持久卷。但这将意味着要管理大量的statefulset..我认为效率有点低。一种方法是使用持久卷设置它,另一种方法是设置Redis或其他缓存解决方案。所以你不介意丢失任何豆荚。你为什么要这么做?为什么“pod-0”不存在真的很重要?每个pod都包含用户创建的特定数据。因此有状态集。我想存储用户创建的所有数据,并在下次用户需要时将其返回。当一个用户创建了许多pod或许多用户创建了许多pod时,我希望能够根据用户请求关闭任意pod。解决方法之一是为每个pod创建一个副本计数为1的状态集。这将确保可以根据用户请求删除任何pod,并且仍然保留其后面的持久卷。但这将意味着要管理大量的statefulset..我认为效率有点低。一种方法是使用持久卷设置它,另一种方法是设置Redis或其他缓存解决方案。所以你不介意丢失任何豆荚。什么是睡眠垫片?创建一个副本计数为1的新状态集来承载每个pod怎么样?这样,任何pod都可以独立删除。但它不能很好地扩展。太多statefulsets听起来您的用例与statefulsets不匹配。1副本的部署和Sts之间没有太大区别。什么是睡眠垫片?创建一个副本计数为1的新状态集来承载每个pod怎么样?这样,任何pod都可以独立删除。但它不能很好地扩展。太多statefulsets听起来您的用例与statefulsets不匹配。对于1个副本,部署和Sts之间没有太大区别。