18.3.2 启用优雅关闭

有几种方法可以使 Spring 应用程序变得对 Kubernetes 友好,但是您需要做两件最基本的事情,实现优雅的关闭和活跃性和可用性探测。

在任何时候,Kubernetes 都可能决定关闭应用程序正在运行的一个或多个 pod。这可能是因为它感觉到了一些问题,也可能是因为有人感觉到了问题,明确要求关闭或重新启动 pod。不管是什么原因,如果 pod 正在处理一个请求,将 pod 立即关闭,使用请求未处理,是一种非常糟糕的情况。这样做将导致客户端收到错误响应,并要求客户端重试请求。

您可以在 Spring 中启用优雅的关闭,而不是让客户端承担错误。应用程序只需将 server.shutdown 属性设置为“graceful”。这可以在第 6 章中讨论的任何属性来源文件中指定,包括 application.yml,如下所示:

server:
  shutdown: graceful

通过启用优雅关闭,Spring 将允许应用程序延迟关闭一段时间,最多 30秒,以处理任何正在进行的请求。在所有请求处理完之后, 或关闭超时时间过期,应用程序将被允许关闭。

默认情况下,关机超时为 30 秒。但您可以通过 spring.lifecycle.timeout-per-shutdown-phase 属性进行调整。例如,更改超时为 20 秒,您可以将属性设置为:

spring:
  lifecycle.timeout-per-shutdown-phase: 20s

关闭挂起时,服务器将停止接受新请求。这允许在关机前清空所有处理中的请求。

关闭期间并不是应用程序无法处理请求的唯一时机。启动时,应用程序可能需要一段时间来准备处理流量。Spring 应用程序向 Kubernetes 表明它还没有准备好处理流量的方式之一,是准备就绪的探测器。接下来,我们将看一看如何启用存活性和就绪性探测器。

results matching ""

    No results matching ""