ื ื™ื˜ื•ืจ ื•ืจื™ืฉื•ื ืฉื™ืจื•ืชื™ื ื—ื™ืฆื•ื ื™ื™ื ืœืืฉื›ื•ืœ Kubernetes

ื ื™ื˜ื•ืจ ื•ืจื™ืฉื•ื ืฉื™ืจื•ืชื™ื ื—ื™ืฆื•ื ื™ื™ื ืœืืฉื›ื•ืœ Kubernetes

ื‘ื”ืฆืœื—ื” ืœื›ื•ืœื.

ืœื ืžืฆืืชื™ ืžื“ืจื™ืš ืžืงื•ื•ืŸ ืขืœ ืจื™ืฉื•ื ื•ืื™ืกื•ืฃ ืžื“ื“ื™ื ืžืฉื™ืจื•ืชื™ ืฆื“ ืฉืœื™ืฉื™ ืœืžืขืจื›ื•ืช ื”ืคืจื•ืกื•ืช ื‘ ืงื•ื‘ืจื ื˜. ืื ื™ ืžืคืจืกื ืืช ื”ืคืชืจื•ืŸ ืฉืœื™. ืžืืžืจ ื–ื” ืžื ื™ื— ืฉื›ื‘ืจ ื™ืฉ ืœืš ืขื•ื‘ื“ ืคืจื•ืžืชืื•ืก ื•ืฉื™ืจื•ืชื™ื ื ื•ืกืคื™ื. ื›ื“ื•ื’ืžื” ืœืžืงื•ืจ ื ืชื•ื ื™ื ืขื‘ื•ืจ ืฉื™ืจื•ืช stateful ื—ื™ืฆื•ื ื™, ื™ืฉืžืฉ DBMS PostgreSQL ื‘ืžื™ื›ืœ ืกึทื•ึธืจ. ื”ื—ื‘ืจื” ืžืฉืชืžืฉืช ื‘ืžื ื”ืœ ื—ื‘ื™ืœื•ืช ื”ื’ื”, ืœืžื˜ื” ื‘ื˜ืงืกื˜ ื™ื”ื™ื• ื“ื•ื’ืžืื•ืช ืขืœื™ื•. ืขื‘ื•ืจ ื”ืคืชืจื•ืŸ ื›ื•ืœื•, ืื ื• ืžื›ื™ื ื™ื ืชืจืฉื™ื ืžืฉืœื ื•, ื”ื›ื•ืœืœ ืชืจืฉื™ืžื™ื ืžืงื•ื ื ื™ื ืฉืœ ื›ืœ ื”ืฉื™ืจื•ืชื™ื ืฉื‘ื”ื ื ืขืฉื” ืฉื™ืžื•ืฉ.

ืจื™ืฉื•ื

ื—ื‘ืจื•ืช ืจื‘ื•ืช ืžืฉืชืžืฉื•ืช ื‘ืขืจื™ืžื” ืฉืœ ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ื›ื“ื™ ืœืืกื•ืฃ, ืœื”ืฆื™ื’ ื•ืœืจื›ื– ื™ื•ืžื ื™ื Elasticsearch + ืœื•ื’ืกื˜ืืฉ + ืงื™ื‘ืื ื”, ื‘ืงื™ืฆื•ืจ ELK. ื‘ืžืงืจื” ืฉืœื ื•, ืื™ืŸ ืฆื•ืจืš ื‘ืื™ื ื“ืงืก ืฉืœ ื”ืชื•ื›ืŸ ื•ื”ืฉืชืžืฉืชื™ ื‘ืงืœ ืžืฉืงืœ ื™ื•ืชืจ ืœื•ืงื™. ื–ื” ื–ืžื™ืŸ ื›ื—ื‘ื™ืœืช Helm, ื”ื•ืกืคื ื• ืื•ืชื• ื›ืชืจืฉื™ื ืžืฉื ื” ืขืœ ื™ื“ื™ ืฉื™ื ื•ื™ ื”ืขืจื›ื™ื ืขื‘ื•ืจ ingress ื•-pv ื›ื“ื™ ืฉื™ืชืื™ืžื• ืœืžืขืจื›ืช ืฉืœื ื•.

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

ื›ื“ื™ ืœืฉืœื•ื— ื™ื•ืžื ื™ื ืœืžื•ืคืข ืœื•ืงื™ ืฉื™ืžื•ืฉ ืžื ื”ืœ ื”ืœื•ื’ื™ื ื’ ืฉืœ ืœื•ืงื™ ื“ื•ืงืจ.

ืขืœื™ืš ืœื”ืชืงื™ืŸ ืืช ื”ืชื•ืกืฃ ื”ื–ื” ืขืœ ื”ื›ืœ ืกึทื•ึธืจ ืžืืจื—ื™ื ืฉืžื”ื ื‘ืจืฆื•ื ืš ืœืงื‘ืœ ื™ื•ืžื ื™ื. ื™ืฉื ืŸ ืžืกืคืจ ื“ืจื›ื™ื ืœื•ืžืจ ืœื“ืžื•ืŸ ื›ื™ืฆื“ ืœื”ืฉืชืžืฉ ื‘ืจื™ืคื•ื“. ืื ื™ ื‘ื•ื—ืจ ืืช ื”ื“ืจื™ื™ื‘ืจ ื‘-yaml ื“ื•ืงืจ ืœื”ืœื—ื™ืŸ, ืฉื”ื•ื ื—ืœืง ื‘ืœืชื™ ืืคืฉืจื™ ืกืคืจ ืžืฉื—ืง.

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

ื”ื’ื“ืจืช Prometheus ืœืงื‘ืœืช ื ืชื•ื ื™ postgres_exporter ืžืชื‘ืฆืขืช ืขืœ ื™ื“ื™ ืขืจื™ื›ืช ืขืจื›ื™ื ื‘ืชืจืฉื™ื ื”ืžืฉื ื”.

values.yaml

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

ื›ื“ื™ ืœื“ืžื™ื™ืŸ ืืช ื”ื ืชื•ื ื™ื ืฉื”ืชืงื‘ืœื•, ื”ืชืงืŸ ืืช ืœื•ื— ื”ืžื—ื•ื•ื ื™ื ื”ืžืชืื™ื ื‘
ื’ืจืคื ื” ื•ืœื”ื’ื“ื™ืจ ืžืงื•ืจื•ืช ื ืชื•ื ื™ื. ื ื™ืชืŸ ืœืขืฉื•ืช ื–ืืช ื’ื ื‘ืืžืฆืขื•ืช ืขืจื›ื™ื ื‘ืชืจืฉื™ื ื”ื’ืจืืคื ื”.

ืื™ืš ื–ื” ื ืจืื”
ื ื™ื˜ื•ืจ ื•ืจื™ืฉื•ื ืฉื™ืจื•ืชื™ื ื—ื™ืฆื•ื ื™ื™ื ืœืืฉื›ื•ืœ Kubernetes

ืื ื™ ืžืงื•ื•ื” ืฉืžืืžืจ ืงืฆืจ ื–ื” ืขื–ืจ ืœืš ืœื”ื‘ื™ืŸ ืืช ื”ืจืขื™ื•ื ื•ืช ื”ืขื™ืงืจื™ื™ื ืžืื—ื•ืจื™ ืคืชืจื•ืŸ ื–ื” ื•ื—ืกืš ืœืš ื–ืžืŸ ื‘ืขืช โ€‹โ€‹ื”ื’ื“ืจืช ื ื™ื˜ื•ืจ ื•ืจื™ืฉื•ื ืฉืœ ืฉื™ืจื•ืชื™ื ื—ื™ืฆื•ื ื™ื™ื ืขื‘ื•ืจ Loki/Prometheus ื‘ืืฉื›ื•ืœ Kubernetes.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”