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

pod - How to kill or stop only one pod from n replicas of a deployment

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

Pod 副本 - 2(Pod A 和 B)

在我的 API 请求期间,我只想 kill/stop pod A。 在A停机期间,请求应该由B处理。

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

有什么方法可以 kill/stop/只让 pod A 崩溃吗? 任何帮助将不胜感激。

如您所述,您可以手动 杀死重新启动唯一的pod测试案例的解决方案,否则您可以尝试使单个 POD 崩溃,但最终,它会创建相同的场景 POD 将自动重启。

或者您可以增加部署的正常关闭时间,这样 POD 可能会花费一些时间并在终止状态下停留很长时间,您可以执行测试。

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

缩小到 3
kubectl scale deployment <deployment-name> --replicas=3

我的例子如下图

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

如果您想模拟 pods 之一丢失时发生的情况,您可以缩小部署规模

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

并且 Kubernetes 将终止除其中之一以外的所有 pods;您应该几乎立即看到所有流量都流向幸存的 pod。

但是如果您想模拟 pods 之一崩溃并重新启动时发生的情况,您可以删除 pod

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

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