Prometheus — установка для небольшого Kubernetes кластера

Простая инструкция как установить и начать мониторинг своих сервисов для небольшого Kubernetes кластера. В данном примере мы не будем использовать Prometheus оператор, но для сложных динамичных систем и огромного количества сервисов использование оператора просто необходимо.

Для начала подготовим Prometheus.yml файл:

global:
  scrape_interval:     60s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 60s # Evaluate rules every 15 seconds. The default is every 1 minute.

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
        # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
scrape_configs:
  - job_name: 'my-service-scrapper'
    scheme: https
    static_configs:
      - targets: ['service.sassoft.ru:443']

В качестве target можно указывать как и URI сторонних сервисов так и внутренний fqdn kubernetes service name чтобы не ходить наружу.

Следующий шаг, создаем ConfigMap:

kubectl create configmap prometheus-cm —from-file=./prometheus.yml

Далее описываем Prometheus Kubernetes manifest:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: prometheus
  labels:
    app: prometheus
spec:
  replicas: 1
  selector:
    matchLabels:
      app: prometheus
  template:
    metadata:
      labels:
        app: prometheus
    spec:
      containers:
        - name: prometheus
          image: prom/prometheus
          volumeMounts:
            - name: prometheus-volume
              mountPath: /etc/prometheus/prometheus.yml
              subPath: prometheus.yml
          ports:
            - containerPort: 9090
      volumes:
        - name: prometheus-volume
          configMap:
            name: prometheus-cm
---
kind: Service
apiVersion: v1
metadata:
  name: prometheus
spec:
  type: NodePort
  selector:
    app: prometheus
  ports:
    - name: promui
      protocol: TCP
      port: 9090
      targetPort: 9090

Применяем манифест:

kubectl apply -f prometheus-k8s.yaml

Смотрим, на каком порту был поднят Prometheus service:

kubectl get services

prometheus         NodePort    10.245.136.99    <none>        9090:30698/TCP               2m

Отлично! Теперь можем зайти на UI (как пример http://0.0.0.0:30698) и посмотреть что Prometheus стал опрашивать наш сервис (вы же не забыли добавить /metrics в ваш сервис?).

Для безопасности необходимо закрыть Prometheus от посторонних глаз, это можно сделать через Basic Auth + Nginx. Также вместо NodePort можно сделать сервис типа ClusterIP и прописать красивое имя и соответсвующий Ingress. Ну это как дополнение.

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *