缩小 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 正常关闭?