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,它可能会在不同的地方恢复)。
我有一个测试方案来检查 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 个副本。您可以通过 运行 下面的命令
缩小到 3kubectl 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,它可能会在不同的地方恢复)。