Kubernetes:如何在不重新创建的情况下删除由 StatefulSet 管理的特定 Pod?
Kubernetes : How to delete a specific pod managed by StatefulSet without it being recreated?
我有一个带有 2 个 pods 的 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。我猜是因为当 replica 设置为 1 时,StatefulSet 想要保持 pod-0 处于活动状态而不是 pod-1。
但是如何保持 pod-1 处于活动状态并删除 pod-0?
StatefulSet 控制器不支持此功能。可能你能做的最好的事情就是尝试用睡眠垫片自己创建那个 pod,也许你可以更快。但是这样sts控制器就会永远不开心了。
- Statefulset 总是创建索引为 0..(replica-1) 的 pods。
- 如果你真的想更好地控制个人 pods,我想你需要创建单独的 STS 对象(副本 = 1)
您可以尝试使用自定义控制器,例如:
https://github.com/openkruise/kruise/
如果您使用 CloneSet
自定义资源,您可以通过有选择地删除 pod 来进行更精细的控制。
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
的特定 pods 的问题已开放多年,但仍未解决:
https://github.com/kubernetes/kubernetes/issues/45509
K8s 1.21+ 中的 ReplicaSet 将有 PodDeletionCost
POD 注释来解决 Deployments 的问题,但到目前为止还没有解决 STS 的问题。
我有一个带有 2 个 pods 的 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。我猜是因为当 replica 设置为 1 时,StatefulSet 想要保持 pod-0 处于活动状态而不是 pod-1。
但是如何保持 pod-1 处于活动状态并删除 pod-0?
StatefulSet 控制器不支持此功能。可能你能做的最好的事情就是尝试用睡眠垫片自己创建那个 pod,也许你可以更快。但是这样sts控制器就会永远不开心了。
- Statefulset 总是创建索引为 0..(replica-1) 的 pods。
- 如果你真的想更好地控制个人 pods,我想你需要创建单独的 STS 对象(副本 = 1)
您可以尝试使用自定义控制器,例如: https://github.com/openkruise/kruise/
如果您使用 CloneSet
自定义资源,您可以通过有选择地删除 pod 来进行更精细的控制。
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
的特定 pods 的问题已开放多年,但仍未解决:
https://github.com/kubernetes/kubernetes/issues/45509
K8s 1.21+ 中的 ReplicaSet 将有 PodDeletionCost
POD 注释来解决 Deployments 的问题,但到目前为止还没有解决 STS 的问题。