kubernetes - 如何确保 运行 pods 在为部署创建新 pods 之前终止

kubernetes - How to ensure running pods are terminated before new pods are created for a deployment

我有 4 个来自 Kafka 的消费者部署 运行 的副本并进行了一些处理。

当我开始部署应用程序的新版本时,在删除现有 pods 之前创建了 4 个新的 pods,并且在终止宽限期内,消费者将重新平衡工作所有 8 pods 在他们退出之前。一旦原始 pods 终止,它们将再次重新平衡。

这意味着他们在重新平衡期间处理的数据实际上已经丢失,因为工作是有状态的,因此在此移交时间内无法做任何有意义的事情。

理想的解决方案是:

我现在不担心如何 save/pass 状态,但想避免必要的重新平衡和由于在旧 pods 之前创建新的 pods 而产生的输出数据终止的

我知道这意味着如果新版本出现问题,服务可能会中断。消费者比传入的数据快得多,并且会赶上,停机几个小时也没问题。

我可以在部署的 kubeconfig 中设置什么配置来通知 kubernetes 更改其部署策略的顺序?

默认更新策略是 RollingUpdate,这会导致观察到的行为。您可以通过设置 spec.strategy.type 将其设置为 Recreate,例如:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: some-app
spec:
  replicas: 3
  strategy:
    type: Recreate
[...]

来自 docs 的策略:

All existing Pods are killed before new ones are created