Kubernetes klusterrean kanpoko zerbitzuak kontrolatzea eta erregistratzea

Kubernetes klusterrean kanpoko zerbitzuak kontrolatzea eta erregistratzea

Zorte on guztioi.

Ez dut sarean gida orokorrik aurkitu hirugarrenen zerbitzuetatik inplementatutako sistemetan erregistratu eta neurketak biltzeko. Kubernetes. Nire irtenbidea argitaratzen ari naiz. Artikulu honek suposatzen du dagoeneko lan bat duzula Prometeo eta beste zerbitzu batzuk. Kanpoko egoera zerbitzu baterako datu-iturburu baten adibide gisa, DBMS bat erabiliko da PostgreSQL edukiontzi batean Docker. Enpresak paketeen kudeatzailea erabiltzen du Helm, behean testuan horren inguruko adibideak egongo dira. Soluzio osorako, gure diagrama propioa prestatzen ari gara, erabilitako zerbitzu guztien grafiko habiaratuak biltzen dituena.

Erregistratzea

Enpresa askok teknologia pila erabiltzen dituzte erregistroak biltzeko, ikusteko eta zentralizatzeko Elasticsearch + Logstash + kibana, ELK gisa laburtua. Gure kasuan, ez dago edukia indexatu beharrik eta arinago bat erabili dut Loki. Helm pakete gisa dago eskuragarri, azpidiagrama gisa gehitu dugu sarrera eta pv balioak aldatuz gure sistemara egokitzeko.

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

Instantzia batera erregistroak bidaltzeko Loki erabilera Loki Docker Logging Driver.

Gehigarri hau guztia instalatu behar duzu Docker erregistroak jaso nahi dituzun ostalariak. Daemonari betegarria nola erabili esateko hainbat modu daude. Yaml-en kontrolatzailea hautatzen dut Docker Compose, parte dena Ansible jolas liburua.

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

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

Metrikak

Metrikak PostgreSQL-tik biltzen dira postgres_exporter egiteko Prometeo. Goiko fitxategiaren jarraipena Ansible jolas liburua.

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

Argitasun handiagoa lortzeko, Endpoints erabiliz kanpoko egoera-zerbitzuen izenak idatziko ditugu.

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 datuak jasotzeko konfiguratzea azpidiagramako balioak editatuz egiten da.

balioak.yaml

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

Jasotako datuak ikusteko, instalatu dagokion Arbela
Grafana eta datu-iturriak konfiguratu. Hau Grafana azpidiagramako balioen bidez ere egin daiteke.

Nolakoa da
Kubernetes klusterrean kanpoko zerbitzuak kontrolatzea eta erregistratzea

Espero dut artikulu labur honek irtenbide honen atzean dauden ideia nagusiak ulertzen lagundu izana eta denbora aurreztu izana Loki/Prometheus-en kanpoko zerbitzuen jarraipena eta saioa Kubernetes kluster batean konfiguratzean.

Iturria: www.habr.com

Gehitu iruzkin berria