我有一个带有2个吊舱的StatefulSet。它具有无头服务,每个吊舱都具有LoadBalancer服务,该服务可向世界各地提供。
比方说,窗格名称是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?
答案 0 :(得分:1)
StatefulSet控制器不支持此功能。可能最好的办法就是尝试使用睡眠垫片自己创建该Pod,也许您可能会更快。但是,然后sts控制器将永远不高兴。
答案 1 :(得分:0)
答案 2 :(得分:0)
您可以尝试使用自定义控制器,例如: https://github.com/openkruise/kruise/
如果您使用CloneSet
自定义资源,则可以通过选择性的吊舱移除进行更精细的控制。
apiVersion: apps.kruise.io/v1alpha1
kind: CloneSet
spec:
# ...
replicas: 4
scaleStrategy:
podsToDelete:
- sample-9m4hp # you select which pod to remove
https://openkruise.io/en-us/docs/cloneset.html
移除deployment
或StatefulSet
的特定吊舱的问题已经提出多年,但一直没有解决:
https://github.com/kubernetes/kubernetes/issues/45509