在OpenShift中,可以声明两种类型的检查。Readiness检查用于在更新微服务时避免停机。在滚动更新中,OpenShift等待新版本的准备,然后关闭前一个版本。它对新微服务的Readiness检查端点进行pings,直到它准备好,并验证它,确保微服务已成功初始化。Liveness检查是用来确定一个pod是否还活着。OpenShift定期调用Liveness检查端点。如果一个pod没有正面响应检查,它将重新启动。Liveness 检查关注于微服务需要的关键资源以正确的行为存在。在下面的示例中,我们将使用相同的端点进行检查。但是,最好使用两个不同的端点。
样例代码是在openshift/hello-microservice-openshift-health-checks中。如果打开这个Verticle,就会看到HealthCheck处理程序来验证HTTP服务器是否已经启动:
private boolean started;
@Override
public void start() {
Router router = Router.router(vertx);
router.get("/health").handler(
HealthCheckHandler.create(vertx)
.register("http-server-running",
future -> future.complete(
started ? Status.OK() : Status.KO())));
router.get("/").handler(this::hello);
router.get("/:name").handler(this::hello);
vertx.createHttpServer()
.requestHandler(router::accept)
.listen(8080, ar -> started = ar.succeeded());
}
Fabric8 Maven插件被配置为使用“ /health”用于readiness和liveness健康检查。一旦部署了这个版本的hello microservice,所有后续部署的服务都将使用readiness检查以避免停机,如图5-6所示。
图5 -6:滚动更新
当pod准备好时,OpenShift将请求路由到这个pod并关闭旧的。当我们升级时,OpenShift不会将请求路由到没有准备好的pod。