我有一个StatefulSet,有两个Pod,它有一个无头服务,每个Pod都有一个LoadBalancer服务,可以向全世界提供。
假设pod的名称是pod-0和pod-1。
如果我想删除pod-0但保持pod-1活动,我无法做到这一点。
我试
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?
5条答案
按热度按时间t8e9dugd1#
StatefulSet控制器不支持这种情况。也许你能做的最好的事情就是尝试使用sleep shim自己创建pod,也许你可以更快。但是这样sts控制器就会永远不高兴。
oiopk7p52#
您可以尝试使用自定义控制器,如:https://github.com/openkruise/kruise/
如果您使用
CloneSet
自定义资源,则可以通过选择性pod删除进行更精细的控制。字符串
https://openkruise.io/en-us/docs/cloneset.html的
删除
deployment
或StatefulSet
的特定pod的问题已经存在多年,没有解决方案:https://github.com/kubernetes/kubernetes/issues/45509nlejzf6q3#
zazmityj4#
K8s 1.21+中的ReplicaSet将有
PodDeletionCost
POD注解来解决Deployment的问题,但到目前为止还没有解决STS的问题。z9gpfhce5#
如果您
kubectl delete
了StatefulSet,但添加了--cascade=orphan
选项,则StatefulSet将被删除,但Pod将保留。然后您可以按照任何顺序杀死它们。当您重新创建StatefulSet时,它应该采用剩余的Pod并创建新的Pod来替换丢失的Pod。