Простая инструкция как установить и начать мониторинг своих сервисов для небольшого 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. Ну это как дополнение.