Ngawasi lan mlebu layanan eksternal menyang kluster Kubernetes

Ngawasi lan mlebu layanan eksternal menyang kluster Kubernetes

Good luck kanggo kabeh.

Aku durung nemokake pandhuan umum online babagan ngangkut barang lan ngumpulake metrik saka layanan pihak katelu menyang sistem sing dipasang ing Kubernetes. Aku ngirim solusiku. Artikel iki nganggep yen sampeyan wis duwe karya Prometheus lan layanan liyane. Minangka conto sumber data kanggo layanan stateful eksternal, DBMS bakal digunakake PostgreSQL ing wadhah docker. Perusahaan nggunakake manajer paket Helm, ing ngisor iki ing teks bakal ana conto. Kanggo kabeh solusi, kita nyiapake grafik dhewe, sing kalebu grafik nested kabeh layanan sing digunakake.

logging

Akeh perusahaan nggunakake tumpukan teknologi kanggo ngumpulake, ndeleng lan sentralisasi log Elasticsearch + Logstash + kibana, dicekak ELK. Ing kasus kita, ora perlu ngindeks isi lan aku nggunakake sing luwih entheng Loki. Kasedhiya minangka paket Helm, ditambahake minangka subchart kanthi ngganti nilai ingress lan pv sing cocog karo sistem kita.

nilai.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"

Kanggo ngirim log menyang conto Loki nggunakake Loki Docker Logging Driver.

Sampeyan kudu nginstal add-on iki ing kabeh docker sarwa dumadi saka ngendi sampeyan pengin nampa log. Ana sawetara cara kanggo ngandhani daemon carane nggunakake padding. Aku milih driver ing yaml Docker Compose, kang bagean Ansible buku dolanan.

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

ngendi loki_url: kube-loki.example.domain/loki/api/v1/push

Metrik

Metrik diklumpukake saka PostgreSQL nggunakake postgres_exporter kanggo Prometheus. Lanjutan saka file ing ndhuwur Ansible buku dolanan.

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"
...

Kanggo luwih cetha, kita bakal nulis jeneng layanan stateful eksternal nggunakake Endpoints.

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

Konfigurasi Prometheus kanggo nampa data postgres_exporter ditindakake kanthi ngowahi nilai ing subchart.

nilai.yaml

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

Kanggo nggambarake data sing ditampa, pasang Dashboard sing cocog ing
Grafana lan ngatur sumber data. Iki uga bisa ditindakake liwat nilai ing subchart Grafana.

Apa sing katon kaya
Ngawasi lan mlebu layanan eksternal menyang kluster Kubernetes

Muga-muga artikel cekak iki mbantu sampeyan ngerti ide utama ing solusi iki lan ngirit wektu nalika nyetel ngawasi lan log layanan eksternal kanggo Loki / Prometheus ing kluster Kubernetes.

Source: www.habr.com

Add a comment