缩小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");
}
字符串
尝试在部署yml(通用模板)中添加60秒的暂停时间,但仍然没有用(即使在60秒后也没有调用beforeStoppingVertx和afterStoppingVertx方法)
我怀疑vert.x从来没有被告知要关闭。或者它没有收到消息。我们确实有在Kubernetes中定义Pre Stop钩子的选项,https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-termination
问题是什么是实际的脚本,我们需要提到作为Pre-stop钩子的一部分,它将指示Vert.x优雅地关闭?
1条答案
按热度按时间mepcadol1#
IMHO,而不是Kubernetes Vertx甚至不会触发
vertx.close()
,因为您使用的是自定义Launcher类。尝试在main方法的末尾添加以下shutdown钩子:
字符串