Наблюдение и регистриране на външни услуги към клъстера Kubernetes

Наблюдение и регистриране на външни услуги към клъстера Kubernetes

Късмет на всички.

Не намерих онлайн общо ръководство за регистриране и събиране на показатели от услуги на трети страни в системи, внедрени в Kubernetes. Публикувам моето решение. Тази статия предполага, че вече имате работещ Прометей и други услуги. Като пример за източник на данни за външна услуга с постоянно състояние ще бъде използвана СУБД PostgreSQL в контейнер докер. Компанията използва мениджър на пакети Шлем, по-долу в текста ще има примери за него. За цялото решение изготвяме собствена диаграма, която включва вложени диаграми на всички използвани услуги.

Сеч

Много компании използват набор от технологии за събиране, преглед и централизиране на регистрационни файлове Elasticsearch + Logstash + kibana, съкратено ЕЛК. В нашия случай няма нужда да индексираме съдържанието и използвах по-лек Локи. Предлага се като пакет Helm, добавихме го като поддиаграма, като променихме стойностите за ingress и pv, за да отговарят на нашата система.

стойности.yaml

ingress:
  enabled: true
  annotations:
     kubernetes.io/ingress.class: nginx
  hosts:
    - host: kube-loki.example.domain
      paths: 
        - /
  tls: []

....

persistence:
  type: pvc
  enabled: true
  accessModes:
    - ReadWriteOnce
  size: 100Gi
  finalizers:
    - kubernetes.io/pvc-protection
  existingClaim: "pv-loki"

За изпращане на регистрационни файлове към инстанция Локи употреба Драйвер за регистриране на Loki Docker.

Трябва да инсталирате тази добавка на всичко докер хостове, от които искате да получавате регистрационни файлове. Има няколко начина да кажете на демона как да използва подложката. Избирам драйвера в yaml Докер Композиране, което е част Ansible книга с игри.

postgres.yaml

    - name: Run containers
      docker_compose:
        project_name: main-postgres
        definition:
          version: '3.7'
          services:
            p:
              image: "{{ postgres_version }}"
              container_name: postgresql
              restart: always
              volumes:
                - "{{ postgres_dir }}/data:/var/lib/postgresql/data"
                - "{{ postgres_dir }}/postgres_init_scripts:/docker-entrypoint-initdb.d"
              environment:
                POSTGRES_PASSWORD: {{ postgres_pass }}
                POSTGRES_USER: {{ postgres_user }}
              ports:
                - "{{ postgres_ip }}:{{ postgres_port }}:5432"
              logging:
                driver: "loki"
                options:
                  loki-url: "{{ loki_url }}"
                  loki-batch-size: "{{ loki_batch_size }}"
                  loki-retries: "{{ loki_retries }}"
...

където loki_url: kube-loki.example.domain/loki/api/v1/push

Метрика

Метриките се събират от PostgreSQL с помощта на postgres_exporter за Прометей. Продължение на горния файл Ansible книга с игри.

postgres.yaml

...
            pexp:
              image: "wrouesnel/postgres_exporter"
              container_name: pexporter
              restart: unless-stopped
              environment:
                DATA_SOURCE_NAME: "postgresql://{{ postgres_user }}:{{ postgres_pass }}@p:5432/postgres?sslmode=disable"
              ports:
                - "{{ postgres_ip }}:{{ postgres_exporter_port }}:9187"
              logging:
                driver: "json-file"
                options:
                  max-size: "5m"
...

За по-голяма яснота ще напишем имената на външните услуги със състояние, използвайки крайни точки.

postgres-service.yaml

apiVersion: v1
kind: Endpoints
metadata:
  name: postgres-exporter
subsets:
  - addresses:
      - ip: {{ .Values.service.postgres.ip }}
    ports:
      - port: {{ .Values.service.postgres.port }}
        protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
  name: postgres-exporter
  labels:
    chart:  "{{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}"
spec:
  ports:
    - protocol: TCP
      port: {{ .Values.service.postgres.port }}
      targetPort: {{ .Values.service.postgres.port }}

Конфигурирането на Prometheus за получаване на данни от postgres_exporter се извършва чрез редактиране на стойности в поддиаграмата.

стойности.yaml

scrape_configs:
...
  - job_name: postgres-exporter
    static_configs:
      - targets: 
         - postgres-exporter.applicationnamespace.svc.cluster.local:9187
        labels:
          alias: postgres
...

За да визуализирате получените данни, инсталирайте съответното табло за управление
Графана и конфигуриране на източници на данни. Това може да стане и чрез стойности в поддиаграмата Grafana.

Как изглежда
Наблюдение и регистриране на външни услуги към клъстера Kubernetes

Надявам се, че тази кратка статия ви помогна да разберете основните идеи зад това решение и ви спести време при настройване на наблюдение и регистриране на външни услуги за Loki/Prometheus в клъстер на Kubernetes.

Източник: www.habr.com

Добавяне на нов коментар