Kubernetes кластерине тышкы кызматтарды көзөмөлдөө жана каттоо

Kubernetes кластерине тышкы кызматтарды көзөмөлдөө жана каттоо

Баарына ийгилик.

Мен үчүнчү тараптын кызматтарынан өлчөөлөрдү каттоо жана чогултуу боюнча жалпыланган колдонмону онлайн режиминде орнотулган системаларга таба алган жокмун. Kubernetes. Мен чечимимди жарыялап жатам. Бул макалада сизде мурунтан эле иш бар деп болжолдойт Prometheus жана башка кызматтар. Тышкы мамлекеттик кызмат үчүн маалымат булагынын мисалы катары, DBMS колдонулат PostgreSQL контейнерде ютуб. Компания пакет менеджерин колдонот башкаруу рулю, төмөндө текстте ал боюнча мисалдар болот. Бүтүндөй чечим үчүн биз колдонулган бардык кызматтардын уяланган диаграммаларын камтыган өзүбүздүн диаграммабызды даярдап жатабыз.

Каттоо

Көптөгөн компаниялар журналдарды чогултуу, көрүү жана борборлоштуруу үчүн бир катар технологияларды колдонушат ElasticSearch + 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 Logging Driver.

Бул кошумчаны бардык нерсеге орнотушуңуз керек ютуб журналдарды алууну каалаган хосттор. Демонго толтургучту кантип колдонууну айтуунун бир нече жолу бар. Мен 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 үчүн Prometheus. Жогорудагы файлдын уландысы 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"
...

Көбүрөөк түшүнүктүү болушу үчүн, биз 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 }}

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 үчүн тышкы кызматтарга мониторинг жүргүзүү жана каттоону орнотууда убакытты үнөмдөөгө жардам берди деп үмүттөнөм.

Source: www.habr.com

Комментарий кошуу