Kubernetes кластеріне сыртқы қызметтерді бақылау және тіркеу

Kubernetes кластеріне сыртқы қызметтерді бақылау және тіркеу

Барлығына сәттілік.

Мен үшінші тарап қызметтерінен алынған жүйелерге көрсеткіштерді тіркеу және жинау бойынша жалпылама нұсқаулықты онлайнда таба алмадым. Kubernetes. Мен өз шешімімді жариялаймын. Бұл мақалада сізде бұрыннан жұмыс бар деп болжанады Прометей және басқа да қызметтер. Сыртқы күйі бар қызметке арналған деректер көзінің мысалы ретінде ДҚБЖ пайдаланылады PostgreSQL контейнерде Докер. Компания пакет менеджерін пайдаланады Хельм, төменде мәтінде оған мысалдар болады. Толық шешім үшін біз барлық пайдаланылған қызметтердің кірістірілген диаграммаларын қамтитын жеке диаграммамызды дайындап жатырмыз.

Тіркеу

Көптеген компаниялар журналдарды жинау, қарау және орталықтандыру үшін көптеген технологияларды пайдаланады Elasticearch + Logstash + кибана, ELK деп қысқартылған. Біздің жағдайда мазмұнды индекстеудің қажеті жоқ және мен жеңілірек қолдандым Локи. Ол Helm пакеті ретінде қол жетімді, біз оны жүйеге сәйкес кіру және 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 ішіндегі драйверді таңдаймын Docker құрастырыңызбөлігі болып табылатын Қажет ойын кітапшасы.

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 үшін Прометей. Жоғарыдағы файлдың жалғасы Қажет ойын кітапшасы.

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 }}

Postgres_exporter деректерін алу үшін Prometheus конфигурациялау ішкі диаграммадағы мәндерді өңдеу арқылы орындалады.

мәндер.yaml

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

Алынған деректерді визуализациялау үшін тиісті бақылау тақтасын орнатыңыз
Графана және деректер көздерін конфигурациялаңыз. Мұны Grafana ішкі диаграммасындағы мәндер арқылы да жасауға болады.

Бұл қалай көрінеді
Kubernetes кластеріне сыртқы қызметтерді бақылау және тіркеу

Бұл қысқа мақала сізге осы шешімнің негізгі идеяларын түсінуге көмектесті және Kubernetes кластерінде Loki/Prometheus үшін сыртқы қызметтерді бақылау мен тіркеуді орнату кезінде уақытты үнемдеді деп үміттенемін.

Ақпарат көзі: www.habr.com

пікір қалдыру