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

Tec*_*irl 1 kubernetes kubernetes-pod

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

Pod 副本 - 2 个(Pod A 和 B)

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

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

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

Dav*_*aze 5

如果您想模拟其中一个 pod 丢失时会发生什么,您可以缩小部署规模

kubectl scale deployment the-deployment-name --replicas=1
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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