在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。

results matching ""

    No results matching ""