Как использовать SERVICE_CHECK_HTTP со скриптом progrium/consul check-http?

Я запускаю контейнер progrium/consul с контейнером gliderlabs/registrator. Я хотел бы иметь возможность автоматически создавать проверки работоспособности для любого контейнера, который зарегистрирован в консуле с регистратором. Используя это, я хотел бы использовать проверки работоспособности консула, чтобы узнать, остановился ли какой-либо контейнер. Я читал, что есть способ сделать это, добавив переменные среды, но все, что я читал, было слишком расплывчатым, например, сообщение ниже:

как определить проверку работоспособности HTTP в контейнере консула для службы на том же хосте?

Итак, я должен установить некоторые переменные среды:

ENV SERVICE_CHECK_HTTP=/howareyou
ENV SERVICE_CHECK_INTERVAL=5s

Устанавливать ли их внутри моего контейнера progrium/consul или моего gliderlabs/registrator? Могу ли я установить их, просто добавив следующие теги в мою команду запуска докера, как это?

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

Примечание: по какой-то причине добавление вышеуказанных переменных среды к командам запуска докеров моего регистратора просто заставило консула думать, что мои узлы выходят из строя с no acks received


person Alex Cohen    schedule 13.06.2016    source источник


Ответы (1)


У меня Consul Health Checks и Gliderlabs Registrator работают тремя способами с моими приложениями Spring Boot:

  • Поместите переменные среды в Dockerfile с помощью ENV или LABEL.

  • Поместите переменные среды, используя -e с docker run

  • Поместите переменные среды в docker-compose.yml в разделе «среда» или «метки».

Докерфайл

В вашем Dockerfile-файле:

ENV SERVICE_NAME MyApp
ENV SERVICE_8080_CHECK_HTTP /health
ENV SERVICE_8080_CHECK_INTERVAL 60s

Конечная точка /health здесь исходит из библиотеки Spring Boot Actuator, которую я просто поместил в свой файл pom.xml в своем приложении Spring Boot. Однако вы можете использовать и любую другую конечную точку.

<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.

Докер Сочинять

Добавьте информацию о проверке работоспособности в свойствах «environment» или «labels»:

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

Запускаем Консул Сервер

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

Образ «gliderlabs/consul-server» по умолчанию активирует пользовательский интерфейс Consul. Таким образом, вам не нужно указывать какие-либо другие параметры.

Затем запустите Регистратор

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.

person dma    schedule 08.07.2016