Я хочу автоматически очищать данные от всех созданных сервисов в моем докере с помощью Prometheus. Я делаю это на кластере с двумя воркерами и примерно 7 сервисами. Службы, которые я хочу очистить, развернуты по всему миру.
Я настроил Prometheus на очистку, используя dns_sd_config
и цель tasks.cadvisor
. В результате будет возвращен один хост, а сервисов должно быть два.
> tasks.cadvisor
Server: 127.0.0.11
Address: 127.0.0.11#53
Non-authoritative answer:
Name: tasks.cadvisor
Address: 10.0.1.9
В этом примере я могу найти только один узел CAdvisor, тогда как на самом деле их два.
Однако, когда я выполняю поиск службы, которая дважды запускается на одном и том же рабочем узле, при поиске удается найти обе службы.
> tasks.nginx
Server: 127.0.0.11
Address: 127.0.0.11#53
Non-authoritative answer:
Name: tasks.nginx
Address: 10.0.1.25
Name: tasks.nginx
Address: 10.0.1.20
Похоже, что Docker DNS не может выполнять поиск за пределами своего собственного рабочего узла. Как настроить Docker таким образом, чтобы поиск DNS возвращал все экземпляры службы во всех рабочих процессах?
Вот моя текущая настройка докера:
version: '3'
services:
db:
image: postgres
deploy:
replicas: 1
placement:
constraints:
- node.role == manager
volumes:
- db-data:/var/lib/postgresql/data
backend:
build: reggie-server
image: requinard2/reggie-server
command: python manage.py runserver 0.0.0.0:8000
deploy:
mode: global
environment:
- PRODUCTION=1
depends_on:
- db
nginx:
build: reggie-nginx
image: requinard2/reggie-nginx
deploy:
mode: global
ports:
- "80:80"
- "443:443"
depends_on:
- "backend"
- "prometheus"
- "grafana"
prometheus:
build: reggie-prometheus
image: requinard2/reggie-prometheus
ports:
- "9090:9090"
deploy:
replicas: 1
placement:
constraints:
- node.role == manager
volumes:
- prometheus-data:/prometheus
depends_on:
- backend
- cadvisor
grafana:
deploy:
replicas: 1
placement:
constraints:
- node.role == manager
image: grafana/grafana:5.1.0
environment:
GF_SERVER_ROOT_URL=/grafana:
volumes:
- grafana-data:/var/lib/grafana
depends_on:
- "prometheus"
cadvisor:
image: google/cadvisor:latest
deploy:
mode: global
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
depends_on:
- redis
redis:
deploy:
replicas: 1
placement:
constraints:
- node.role == manager
image: redis:latest
volumes:
backend-code:
db-data:
grafana-data:
prometheus-data: