1

缩小 Kubernetes pod 并没有优雅地关闭 Vertx 应用程序(用 java 开发)。它基本上杀死了容器。

覆盖 io.vertx.core.Launcher 类的 beforeStoppingVertx 和 afterStoppingVertx 方法并打印一些日志以验证 Vertx 是否正常关闭。当 Pod 缩小时,永远不会调用 beforeStoppingVertx 和 afterStoppingVertx 方法。

  @Override
  public void beforeStoppingVertx(Vertx vertx) {
    LOG.info("Vertx Closing Gracefully");
    vertx.close();
  }

  @Override
  public void afterStoppingVertx() {
    LOG.info("Vertx Closed Gracefully");
  }

尝试将 60 秒的宽限期添加到作为通用模板的部署 yml 中,但它仍然没有用(即使在 60 秒后也没有调用 beforeStoppingVertx 和 afterStoppingVertx 方法)

我怀疑 vert.x 永远不会被告知要关闭。或者它没有收到消息。我们确实有在 Kubernetes 中定义 Pre Stop 挂钩的选项, https: //kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-termination

问题是实际的脚本是什么,我们需要在 Pre-stop 钩子中提到它,它会指示 Vert.x 正常关闭?

4

0 回答 0