Çavdêrîkirin û tomarkirina karûbarên derveyî ji koma Kubernetes re

Çavdêrîkirin û tomarkirina karûbarên derveyî ji koma Kubernetes re

Serkeftin ji her kesî re.

Min rêbernameyek giştî ya serhêl li ser têketin û berhevkirina metrîkên ji karûbarên sêyemîn ên li pergalên ku di nav de hatine bicîh kirin nedît Kubernetes. Ez çareseriya xwe diweşînim. Ev gotar texmîn dike ku we jixwe xebatek heye Prometheus û xizmetên din. Wekî mînakek çavkaniyek daneyê ji bo karûbarek dewletî ya derveyî, DBMS dê were bikar anîn PostgreSQL di konteynir de Docker. Pargîdanî rêveberek pakêtê bikar tîne Bêr, li jêr di nivîsê de dê mînak li ser hebin. Ji bo tevahî çareseriyê, em nexşeya xwe ya ku tê de nexşeyên hêlîn ên hemî karûbarên ku hatine bikar anîn amade dikin.

Logging

Gelek pargîdan komek teknolojiyê bikar tînin ku têketin berhev bikin, bibînin û navendî bikin Elasticsearch + Logstash + kibana, bi kurteya ELK. Di doza me de, ne hewce ye ku naverokê navnîş bikin û min siviktir bikar anî Lokî. Ew wekî pakêtek Helm peyda dibe, me bi guheztina nirxan ji bo têketinê û pv-yê ku li gorî pergala xwe biguhezîne, ew wekî binegrafek zêde kir.

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

Ji bo mînakek têketin bişînin Lokî bikaranîn Loki Docker Logging Driver.

Divê hûn vê pêvekê li ser her tiştî saz bikin Docker mêvandarên ku hûn dixwazin têketin jê bistînin. Gelek away hene ku meriv ji daemon re bêje ka meriv çawa peldankê bikar tîne. Ez ajokerê di yaml de hildibijêrim Docker Compose, ku beşek e Ansible playbook.

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

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

Metrics

Metrîk ji PostgreSQL bi kar têne berhev kirin postgres_exporter bo Prometheus. Berdewama dosyaya jorîn Ansible playbook.

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

Ji bo zelalbûna mezintir, em ê navên karûbarên dewletparêz ên derveyî bi karanîna Endpoints binivîsin.

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

Veavakirina Prometheus ji bo wergirtina daneya postgres_exporter bi guherandina nirxan di binegrafê de pêk tê.

nirxan.yaml

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

Ji bo dîtina daneyên wergirtî, Dashboard-a guncan tê de saz bikin
Grafana û çavkaniyên daneyan mîheng bikin. Ev jî dikare bi navgîniya nirxan di binegrafa Grafana de were kirin.

Çawa xuya dike
Çavdêrîkirin û tomarkirina karûbarên derveyî ji koma Kubernetes re

Ez hêvî dikim ku ev gotara kurt ji we re bû alîkar ku hûn ramanên bingehîn ên li pişt vê çareseriyê fam bikin û dema ku hûn çavdêrîkirin û tomarkirina karûbarên derveyî ji bo Loki / Prometheus di komek Kubernetes de saz bikin dema we xilas kir.

Source: www.habr.com

Add a comment