我正在尝试在Kubernetes中设置一个有状态的Apache Flink应用程序,我需要在发生中断时保存当前状态,例如有人删除pod或由于群集大小调整而重新安排。
我在容器中添加了一个preStop钩子来实现这种行为,但是当我使用kubectl delete pod
删除一个pod时,它会在旧的Pod终止之前旋转一个新的Pod。
像this one这样的指南使用重新创建更新策略来确保一次只运行一个pod。这在更新部署的情况下工作正常,但它不包括我上面描述的中断。我也尝试将spec.strategy.rollingUpdate.maxSurge
设置为0,但这没有任何区别。
是否可以配置我的部署,以便在另一个终止之前没有任何pod启动,或者我是否需要切换到StatefulSet?
我赞同@Cosmic Ossifrage,因为StatefulSets可以轻松实现您的目标。 StatefulSets
中的每个Pod都具有独特的持久身份和稳定的主机名,Kubernetes Engine无论在何处安排它们都能保持这些主机名。
因此,StatefulSets
按顺序部署并以反向顺序终止,假设Kubernetes StatefulSet控制器每次完全删除前一个Pod后也会删除一个Pod。