pod - 如何从部署的 n 个副本中仅杀死或停止一个 pod

时间:2021-07-29 10:43:05

标签: kubernetes kubernetes-pod

我有一个测试场景来检查 API 请求是否正在由另一个 pod 处理,如果一个 pod 出现故障。我知道这是默认行为,但我想激发以下场景。

Pod 副本 - 2(Pod A 和 B)

在我的 API 请求期间,我只想杀死/停止 pod A。 在 A 停机期间,请求应由 B 处理。

我知道我们可以重新启动部署并将副本缩放到 0,然后再缩放到 2,但这对我不起作用。

有没有办法只杀死/停止/崩溃 pod A? 任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

如果您想模拟其中一个 Pod 丢失会发生的情况,您可以缩小部署规模

kubectl scale deployment the-deployment-name --replicas=1

并且 Kubernetes 将终止除一个 Pod 之外的所有 Pod;您几乎应该立即看到所有流量都流向了幸存的 Pod。

但是,如果您想模拟其中一个 Pod 崩溃并重新启动时会发生什么情况,则可以删除该 Pod

# kubectl scale deployment the-deployment-name --replicas=2
kubectl get pods
kubectl delete pod the-deployment-name-12345-f7h9j

一旦 pod 开始被删除,Kubernetes Service 应该将所有流量路由到幸存的 pod(状态为 Running 的那些)。但是,Pod 由 ReplicaSet 管理,它希望有 2 个副本,因此如果删除了其中一个 Pod,ReplicaSet 将立即创建一个新的副本。这类似于 pod 崩溃并重新启动时会发生的情况(在这种情况下,您将获得相同的 pod 和相同的节点,如果您删除 pod,它可能会返回到不同的位置)。

答案 1 :(得分:1)

正如您所提到的,您可以手动终止重新启动 pod,这是测试案例的唯一解决方案,否则您可以尝试崩溃单个 POD,但最终会创建相同的场景 POD 将自动重启。

或者您可以增加部署的正常关闭时间,这样 POD 可能需要时间并在很长一段时间内保持终止状态,然后您可以执行测试。

答案 2 :(得分:1)

在 pod 由 replicaSet 控制的 kubernetes 中,如果您杀死一个 pod,它将再次重新创建。所以唯一的办法就是减少副本的数量。 假设您的部署有 4 个副本。你可以通过运行下面的命令缩小到 3

kubectl scale deployment <deployment-name> --replicas=3

我的例子如下所示

kubectl scale  deployment hello-world --replicas=3
deployment.apps/hello-world scaled