Подготовка и деплой в Rancher
В API -> Keys -> Add Account API Key создаем ключ:
Сохраняем полученные Access Key и Secret Key:
Ставим label на хост где будет запущен traefik:
В Infrastrucure -> Hosts нажимаем на редактирование:
Добавляем label:
Пишем docker-compose для traefik:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
version: ‘2’
services:
proxy:
labels:
io.rancher.scheduler.affinity:host_label: tlb=yes
image: traefik
command:
— —web
— —rancher
— —rancher.accesskey=<ACCESS KEY>
— —rancher.secretkey=<SECRET KEY>
— —rancher.exposedbydefault=false
— —rancher.endpoint=http://rancher.krusche.infra
— —logLevel=DEBUG
ports:
— «80:80»
— «8080:8080»
volumes:
— /dev/null:/traefik.toml
|
io.rancher.scheduler.affinity:host_label: tlb=yes | Запускает traefik на хостах с указанным label |
—web | Включает веб интерфейс |
—rancher | Включает поддержку Rancher |
—rancher.exposedbydefault=false | По умолчанию добавляет Rancher сервисы |
Деплоим traefik в Rancher:
В Staks -> User -> Add Stack, пишем название стека и загружаем docker-compose.yml
Включаем поддержку traefik в сервисах к которым трафик будет идти через балансер:
1
2
3
4
5
6
7
8
9
|
version: ‘2’
services:
nginx:
image: nginx
labels:
traefik.frontend.rule: Host:nginx.krusche.infra
traefik.port: ’80’
traefik.enable: ‘true’
traefik.backend: some—nginx
|
traefik.enable | Включает поддержку traefik |
traefik.frontend.rule | Смотрит на приходящий запрос |
traefik.port | Порт в контейнере на котором запущено приложение |
traefik.backend | Бекенд на который проксируется трафик |
Если все хорошо, то перейдя по адресу traefik_ip_addess:8080, увидим:
Сбор метрик балансера
Для сбора метрик будем использовать Prometheus и для визуализации Grafana. Что б включить сбор метрик в traefik дописываем в docker-compose.yml две строчки
— —web.metrics.prometheus
— —web.metrics.prometheus.buckets=0.1,0.3,1.2,5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
version: ‘2’
services:
proxy:
labels:
io.rancher.scheduler.affinity:host_label: tlb=yes
image: traefik
command:
— —web
— —rancher
— —web.metrics.prometheus
— —web.metrics.prometheus.buckets=0.1,0.3,1.2,5.0
— —rancher.accesskey=<ACCESS KEY>
— —rancher.secretkey=<SECRET KEY>
— —rancher.exposedbydefault=false
— —rancher.endpoint=http://rancher.krusche.infra
— —logLevel=DEBUG
ports:
— «80:80»
— «8080:8080»
volumes:
— /dev/null:/traefik.toml
|
Создаем директории /opt/conf/prometheus:
1
|
mkdir —p /opt/conf/prometheus/
|
Создаем там файл prometheus.yml:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
# my global config
global:
scrape_interval: 15s # By default, scrape targets every 15 seconds.
evaluation_interval: 15s # By default, scrape targets every 15 seconds.
# scrape_timeout is set to the global default (10s).
# Attach these labels to any time series or alerts when communicating with
# external systems (federation, remote storage, Alertmanager).
external_labels:
monitor: ‘my-project’
# Load and evaluate rules in this file every ‘evaluation_interval’ seconds.
rule_files:
— «alert.rules»
# — «first.rules»
# — «second.rules»
# A scrape configuration containing exactly one endpoint to scrape:
# Here it’s Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
— job_name: ‘prometheus’
# Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 5s
# metrics_path defaults to ‘/metrics’
# scheme defaults to ‘http’.
static_configs:
— targets: [‘traefik:8080’]
|
Деплоим grafana и prometheus:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
version: ‘2’
services:
prometheus:
image: prom/prometheus
expose:
— 9090
volumes:
— /opt/conf/prometheus/:/etc/prometheus/
external_links:
— traefik/proxy:traefik
grafana:
image: grafana/grafana
ports:
— ‘3000:3000’
|
Grafana должна быть доступна по адресу grafana_ip:3000. Переходим в Data Sources -> Add Data Source и настраиваем подключение у Prometheus
Теперь скачиваем Traefik Realtime Metrics dashboard с grafana.com. Импортируем Dashboard и наслаждаемся результатом