【问题标题】:How to use SERVICE_CHECK_HTTP with progrium/consul check-http script?如何将 SERVICE_CHECK_HTTP 与 progrium/consul check-http 脚本一起使用?
【发布时间】:2016-06-13 01:52:12
【问题描述】:

我正在运行带有 gliderlabs/registrator 容器的 progrium/consul 容器。我希望能够为注册到 consul 的任何容器自动创建健康检查。使用它我想使用 consul 健康检查来了解是否有任何容器已停止运行。我读到有一种方法可以通过添加环境变量来做到这一点,但是我读到的一切都太模糊了,比如下面的帖子:

how to define HTTP health check in a consul container for a service on the same host?

所以我应该设置一些环境变量:

ENV SERVICE_CHECK_HTTP=/howareyou
ENV SERVICE_CHECK_INTERVAL=5s

我是将它们设置在我的 progrium/consul 容器还是我的 gliderlabs/registrator 中?我会通过像这样在我的 docker run 命令中添加以下标签来设置它们吗?

docker run ...... -e SERVICE_CHECK_HTTP=howareyou -e SERVICE_CHECK_INTERVAL=5s ......

注意:出于某种原因,将上述环境变量添加到我的注册器的 docker run 命令中只会导致 consul 认为我的节点从 no acks received 失败

【问题讨论】:

    标签: docker service-discovery health-monitoring consul


    【解决方案1】:

    我让 Consul Health Checks 和 Gliderlabs Registrator 以三种方式与我的 Spring Boot 应用程序一起工作:

    • 使用ENVLABEL将环境变量放入Dockerfile中

    • 使用-edocker run放置环境变量

    • 将环境变量放入docker-compose.yml中的“environment”或“labels”下

    Dockerfile

    在您的 Dockerfile 文件中:

    ENV SERVICE_NAME MyApp
    ENV SERVICE_8080_CHECK_HTTP /health
    ENV SERVICE_8080_CHECK_INTERVAL 60s
    

    这里的 /health 端点来自 Spring Boot Actuator 库,我只是将它放在我的 Spring Boot 应用程序的 pom.xml 文件中。但是,您也可以使用任何其他端点。

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    

    docker run

    docker run -d -e "SERVICE_NAME=myapp" -e "SERVICE_8080_CHECK_HTTP=/health" -e "SERVICE_8080_CHECK_INTERVAL=10s" -p 8080:8080 --name MyApp myapp
    

    确保您使用的是正确的 HTTP 服务器端口并且可以访问。在我的例子中,Spring Boot 默认使用 8080。

    Docker 编写

    在“环境”或“标签”属性下添加健康检查信息:

    myapp:
        image: apps/myapp
        restart: always
        environment:
         - SERVICE_NAME=MyApp
         - SERVICE_8080_CHECK_HTTP=/health
         - SERVICE_8080_CHECK_INTERVAL=60s
        ports:
         - "8080:8080"
    

    启动 Consul 服务器

    docker run -d -p "8500:8500" -h "consul" --name consul gliderlabs/consul-server -server -bootstrap
    

    “gliderlabs/consul-server”图像默认激活 Consul UI。所以你不必指定任何其他参数。

    然后启动Registrator

    docker run -d \
        --name=registrator \
        -h $(docker-machine ip dockervm) \
        -v=/var/run/docker.sock:/tmp/docker.sock \
        gliderlabs/registrator:v6 -resync 120 -deregister on-success \
        consul://$(docker-machine ip dockervm):8500
    

    “重新同步”和“取消注册”参数将确保 Consul 和 Registrator 同步。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      相关资源
      最近更新 更多