【问题标题】:Kubernetes Pod warm-up for load balancing用于负载平衡的 Kubernetes Pod 预热
【发布时间】:2019-09-07 19:53:01
【问题描述】:

我们有一个 Kubernetes 服务,它的 pod 需要一些时间来预热第一个请求。基本上,第一个传入的请求将从 Redis 读取一些缓存值,这些请求可能需要更长的时间来处理。当这些新创建的 pod 准备就绪并接收到全部流量时,它们可能会在长达 30 秒内变得不太响应,然后才能从 Redis 正确加载并缓存所有内容。

我知道,我们绝对应该重组应用程序以防止这种情况发生,不幸的是,这在不久的将来是不可行的(我们正在努力)。

如果可以减少新创建的 Pod 的重量,那就太好了,所以它们会在开始时收到 1/10 的流量,随着时间的推移,重量会增加。这对于我们的应用程序的新部署版本来说也很好,可以查看它是否正常运行。

【问题讨论】:

    标签: kubernetes load-balancing kubernetes-ingress


    【解决方案1】:

    为什么您需要在第一次调用时加载缓存,而不是在与就绪探测挂钩的心跳中加载?另一种选择是在 kubernetes 中使用 init containers

    【讨论】:

      【解决方案2】:

      直到可以重组应用程序以在内部执行此“启动”...

      在 Kubernetes 上运行时,请查看 Container Lifecycle Hooks,特别是 PostStart 挂钩。文档here 和示例here

      似乎“......容器的状态在 postStart 处理程序完成之前未设置为 RUNNING”的行为可以帮助您。

      很少有像“......无法保证钩子会在容器 ENTRYPOINT 之前执行”这样的陷阱,因为“...... postStart 处理程序相对于容器的代码异步运行”,以及“......没有参数传递给处理程序”。

      也许自定义脚本可以使用一些重试逻辑来模拟第一个请求以等待应用程序启动?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-03
        • 2020-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-29
        相关资源
        最近更新 更多