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 终止,它们将再次重新平衡。
这意味着他们在重新平衡期间处理的数据实际上已经丢失,因为工作是有状态的,因此在此移交时间内无法做任何有意义的事情。
理想的解决方案是:
- 运行pods发出终止信号
- 他们保存当前状态
- 新 pods 已启动并重新平衡 Kafka 分区
- 初始状态由 new 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
我有 4 个来自 Kafka 的消费者部署 运行 的副本并进行了一些处理。
当我开始部署应用程序的新版本时,在删除现有 pods 之前创建了 4 个新的 pods,并且在终止宽限期内,消费者将重新平衡工作所有 8 pods 在他们退出之前。一旦原始 pods 终止,它们将再次重新平衡。
这意味着他们在重新平衡期间处理的数据实际上已经丢失,因为工作是有状态的,因此在此移交时间内无法做任何有意义的事情。
理想的解决方案是:
- 运行pods发出终止信号
- 他们保存当前状态
- 新 pods 已启动并重新平衡 Kafka 分区
- 初始状态由 new 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