Google kubernetes pods 关闭并启动
Google kubernetes pods shutdown and start
我们正在使用 Google kubernetes 部署我们的微服务,circlci 用于部署集成,我们在 githup 存储库中定义我们的 k8s 文件。
我们面临的问题是一些服务在启动时需要加载数据库模式和其他预数据,但是 google kubernetes shutdown old pods before the new pods全面启动。
我们能否以某种方式告诉 kubernetes 等到新的 pods 完全加载或者至少等待 10 秒然后关闭旧的 pods.
是的,这是可能的。根据描述,听起来您正在使用一个已更新的部署。新的 pods 已创建,旧的已删除,然后新的就绪。
要解决此问题,您需要在 pods 上设置适当的 readinessProbe configured or readinessGates,以便 pod 状态仅在实际准备就绪后才变为就绪状态。如果您不确定放置什么作为探测,您还可以定义 initialDelaySeconds
并猜测您认为 pod 需要多长时间启动。
您还应该考虑使用 minReadySeconds
的部署规范字段以及定义适当的 deployment strategy。您可以确保滚动更新创建新的 pods(通过定义 maxSurge 字段)并确保在新的 pod 准备就绪并接收流量(使用 maxUnavailable 字段 = 0)之前不会删除旧的 pod。
一个例子是:
spec:
replicas: 3
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
这将在任何给定时间维护 3 个工作副本。推送新版本时,将使用新图像创建 1 个新 pod。在新的处于就绪状态之前,没有 pods 会脱机。一旦是,旧的 pods 之一将被终止并且循环再次进行。如果您希望一次性推出,请随意将 maxSurge
值更改为更大的数字。
我们正在使用 Google kubernetes 部署我们的微服务,circlci 用于部署集成,我们在 githup 存储库中定义我们的 k8s 文件。
我们面临的问题是一些服务在启动时需要加载数据库模式和其他预数据,但是 google kubernetes shutdown old pods before the new pods全面启动。
我们能否以某种方式告诉 kubernetes 等到新的 pods 完全加载或者至少等待 10 秒然后关闭旧的 pods.
是的,这是可能的。根据描述,听起来您正在使用一个已更新的部署。新的 pods 已创建,旧的已删除,然后新的就绪。
要解决此问题,您需要在 pods 上设置适当的 readinessProbe configured or readinessGates,以便 pod 状态仅在实际准备就绪后才变为就绪状态。如果您不确定放置什么作为探测,您还可以定义 initialDelaySeconds
并猜测您认为 pod 需要多长时间启动。
您还应该考虑使用 minReadySeconds
的部署规范字段以及定义适当的 deployment strategy。您可以确保滚动更新创建新的 pods(通过定义 maxSurge 字段)并确保在新的 pod 准备就绪并接收流量(使用 maxUnavailable 字段 = 0)之前不会删除旧的 pod。
一个例子是:
spec: replicas: 3 strategy: rollingUpdate: maxSurge: 1 maxUnavailable: 0
这将在任何给定时间维护 3 个工作副本。推送新版本时,将使用新图像创建 1 个新 pod。在新的处于就绪状态之前,没有 pods 会脱机。一旦是,旧的 pods 之一将被终止并且循环再次进行。如果您希望一次性推出,请随意将 maxSurge
值更改为更大的数字。