DevOps

Kubernetes manifest za deployment i monitoring performansi aplikacije

Kubernetes manifest

U današnjem svetu, razvoj i održavanje aplikacija je sve više zahtevna i kompleksnih zadataka.
Korišćenje Kubernetes-a može pomoći da se olakša ovaj proces, omogućavajući lako deployment aplikacije na podu i praćenje njene performanse u realnom vremenu.

Kubernetes manifesti su ključni za ovaj proces, omogućavajući definisanje resursa koji su potrebni za rad aplikacije, kao i podešavanje monitoring-a i alert-a.
U ovom tekstu ćemo se detaljno pozabaviti korišćenjem Kubernetes manifesta za deployment aplikacije i monitoring njene performanse, kroz primere korišćenja Prometheus-a, Grafana-e i Health Checks-a.
Takođe ćemo prikazati kako kreirati Kubernetes pod i koje su komande potrebne za ovaj proces.

Ukratko, u ovom tekstu ćete saznati:

  • Kako koristiti Kubernetes manifeste za deployment aplikacije na podu
  • Kako konfigurisati Prometheus za monitoring performansi aplikacije
  • Kako koristiti Grafana za vizualizaciju podataka o performansi aplikacije
  • Kako konfigurisati Kubernetes Health Checks za praćenje zdravlja aplikacije
  • Kako kreirati Kubernetes pod sa zadatim resursima i okruženjem

Nadamo se da će ovaj tekst pomoći da se lakše razumije korišćenje Kubernetes manifesta za deployment i monitoring performansi aplikacije, i da će pomoći u poboljšanju rada vaše aplikacije.

Kao DevOps inženjer, želeo bih da podelim sa vama važnost korišćenja DevOps alata za monitoring i analizu performansi aplikacije.
U današnjem brzom i dinamičnom svetu poslovanja, imati performativnu aplikaciju je ključno za uspeh vaše organizacije. DevOps alati vam pomažu da otkrijete i otklonite probleme u performansi aplikacije ranije, što znači da ćete biti u mogućnosti da brže reagujete na potrebe vaših klijenata i zadržite konkurentnost na tržištu.

Zašto je monitoring performansi aplikacije važan

Monitoring performansi aplikacije je važan zato što vam omogućava da otkrijete i otklonite probleme u performansama ranije.

Šta su DevOps alati

DevOps alati su softverski alati koji se koriste za automatizaciju procesa razvoja, testiranja, deploy-a i monitoring-a aplikacije.
Ovi alati vam pomažu da poboljšate efikasnost rada tima i povećate performansu aplikacije.

Kako koristiti DevOps alate za monitoring performansi aplikacije

Postoji mnogo DevOps alata koji se koriste za monitoring performansi aplikacije, ali neki od najpopularnijih su:

  • Nagios: vam omogućava da nadgledate performansu vaše aplikacije u realnom vremenu i da primite obaveštenja o problemima.
  • Zabbix: vam omogućava da kreirate grafikone i izveštaje o performansi vaše aplikacije. Takođe omogućava automatizovanu notifikaciju o problemima u performansi.
  • Grafana: vam omogućava da kreirate interaktivne grafikone i dashboard-e za monitoring performansi aplikacije. Možete videti u realnom vremenu kako se performansa aplikacije menja i kreirati alarm u slučaju problema.
  • Prometheus: ovaj alat se koristi za praćenje performansi aplikacije i infrastrukture. Pored toga što omogućava monitoring, takođe vam daje mogućnost analize podataka o performansi.

Kako koristiti DevOps alate za analizu performansi aplikacije

DevOps alati takođe vam pomažu da analizirate podatke o performansi aplikacije. Na primer, možete koristiti ovaj alat da analizirate koliko vremena je potrebno za deploy aplikacije ili koliko je resursa potrebno za rad aplikacije. Ova analiza vam omogućava da identifikujete probleme i poboljšate performansu aplikacije.

Ako analizirate podatke o performansi vaše aplikacije i uočite da je CPU iskorišćenost visoka, možete identifikovati da je problem u lošem kodu ili neoptimalnom konfigurisanju servera.
Ovakve analize su od ključnog značaja za otkrivanje problema i donošenje odluka o poboljšanju performansi aplikacije.

Primer manifesta za monitoring Kubernetesa, Grafane i Prometheus-a

Kada se radi o monitoring-u Kubernetesa klastera, jedan od najboljih načina je korišćenjem Prometheus-a i Grafana.
Ova dva alata se lako instaliraju i konfigurišu pomoću Kubernetes manifesta.

Primer manifesta za instaliranje Prometheus-a i Grafana:

apiVersion: v1
kind: Namespace
metadata:
  name: monitoring
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: prometheus-config
  namespace: monitoring
data:
  prometheus.yml: |
    global:
      scrape_interval: 15s
    scrape_configs:
    - job_name: prometheus
      static_configs:
      - targets:
        - localhost:9090
---
apiVersion: v1
kind: Service
metadata:
  name: prometheus-service
  namespace: monitoring
spec:
  selector:
    app: prometheus
  ports:
  - name: http
    port: 9090
    targetPort: 9090
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: prometheus-deployment
  namespace: monitoring
spec:
  selector:
    matchLabels:
      app: prometheus
  replicas: 1
  template:
    metadata:
      labels:
        app: prometheus
    spec:
      containers:
      - name: prometheus
        image: prom/prometheus
        ports:
        - containerPort: 9090
        volumeMounts:
        - name: config-volume
          mountPath: /etc/prometheus
      volumes:
      - name: config-volume
        configMap:
          name: prometheus-config

Isti princip se može primeniti i za instaliranje Grafana. U ovom primeru, manifest sadrži konfiguraciju za povezivanje sa Prometheus-om kao izvorom podataka za grafikone.


apiVersion: v1
kind: Service
metadata:
  name: grafana-service
  namespace: monitoring
spec:
  selector:
    app: grafana
  ports:
  - name: http
    port: 3000
    targetPort: 3000
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: grafana-deployment
  namespace: monitoring
spec:
  selector:
    matchLabels:
      app: grafana
  replicas: 1
  template:
    metadata:
      labels:
        app: grafana
    spec:
      containers:
      - name: grafana
        image: grafana/grafana
        ports:
        - containerPort: 3000
        env:
        - name: GF_SECURITY_ADMIN_USER
          value: admin
        - name: GF_SECURITY_ADMIN_PASSWORD
          value: admin
        - name: GF_
        GF_DATASOURCES_NAME
          value: Prometheus
       - name: GF_DATASOURCES_URL
          value: http://prometheus-service:9090
       - name: GF_DATASOURCES_ACCESS
         value: proxy
       - name: GF_DATASOURCES_IS_DEFAULT
         value: true
         volumeMounts:
       - name: grafana-storage
         mountPath: /var/lib/grafana
         volumes:
      - name: grafana-storage
          emptyDir: {}

Dakle, ovde sada pišemo imperativ komancdu za instaliranje Prometheus-a i Grafana:

kubectl apply -f prometheus-grafana-manifest.yaml

Ova komanda koristi kubectl (kubectl je klijent za komunikaciju sa Kubernetes API-jem) i njegovu opciju “apply” koja koristi fajl sa manifestom (u ovom slučaju prometheus-grafana-manifest.yaml) za kreiranje ili izmenu resursa u Kubernetes klasteru.
Nakon što se izvrši komanda za instaliranje Prometheus-a i Grafana, Kubernetes će kreirati sve resurse koji su definisani u manifest fajlu. To može uključivati deployment, service, configmap, secret, itd.
 
Da bi se potvrdilo da je Prometheus i Grafana uspešno instaliran, možete koristiti komandu “kubectl get pods” da vidite da li su podovi za Prometheus i Grafana kreirani i da li su u stanju “Running”.
Takođe, možete koristiti komandu “kubectl get service” da vidite da li su service-ovi za Prometheus i Grafana kreirani.
 
Nakon toga, možete pristupiti Prometheus UI-u i Grafana UI-u putem IP adrese i porta za svaki service.
Napomena: u zavisnosti od konfiguracije manifest fajla, potrebno je prilagoditi komande za pristup Prometheus-u i Grafana-i ili pristupiti njima preko ingres-a.
 
Prometheus komande za alert Prometheus ima mogućnost konfigurisanja alert-a kako bi vas obaveštavao o određenim problemima u performansi vaše aplikacije.
Ovo se može postići korišćenjem Alertmanager-a i definisanjem pravila za alert u Prometheus konfiguracionom fajlu.
Primer pravila za alert:

groups:
name: example
rules:
alert: HighErrorRate
expr: rate(request_errors{job="myapp"}[5m]) > 0.5
for: 1m
labels:
severity: critical
annotations:
summary: "High error rate on {{ $labels.job }}"

Alertmanager

Ovo pravilo će pokrenuti alert “HighErrorRate” ukoliko se stopa grešaka u aplikaciji “myapp” poveća na više od 0.5% u poslednjih 5 minuta.
Alert će se održati 1 minut i označen kao “critical” prioritet. Konfiguracija Alertmanager-a se vrši u posebnom konfiguracionom fajlu, u kom se definišu rute za slanje alert-a (e-mail, Slack, PagerDuty itd.).
Nakon što su konfiguracije napravljene, potrebno je restartovati Prometheus da bi se promene primenile.
Napomena: Ova konfiguracija je samo primer i može se prilagoditi vašim potrebama.
Potrebno je testirati i fino podesiti pravila alert-a pre nego što se koriste u produkciji.

Primer manifesta za deployment aplikacije na Kubernetes podu.
Kada se radi o deployment-u aplikacije na Kubernetes podu, manifest se koristi za definisanje resursa koji su potrebni za rad aplikacije.
Primer manifesta za deployment Node.js aplikacije:


apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deployment
  labels:
    app: myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:latest
        ports:
        - containerPort: 3000
        env:
        - name: NODE_ENV
          value: production
        resources:
          limits:
            cpu: "500m"
            memory: "512Mi"

Ovaj manifest kreira Deployment sa tri replike, koji koristi sliku aplikacije “myapp:latest” i otvara port 3000. Takođe, postavlja se okruženje u produkciju i definiše limita resursa za CPU i memoriju.

Primer manifesta za monitoring zdravlja aplikacije na podu

Kada je aplikacija deployed na Kubernetes podu, važno je pratiti njenu zdravlje i rad. To se može postići korišćenjem Kubernetes Health Checks.

Primer manifesta za Health Checks aplikacije:


apiVersion: v1
kind: Service
metadata:
  name: myapp-service
  labels:
    app: myapp
spec:
  selector:
    app: myapp
  ports:
  - name: http
    port: 3000
    targetPort: 3000
  healthCheck:
    httpGet:
      path: /health
      port: 3000
    initialDelaySeconds: 15
    timeoutSeconds: 5
    periodSeconds: 10
    successThreshold: 1
    failureThreshold: 3

Ovaj manifest kreira Kubernetes Service sa Health Check-om koji periodično proverava endpoint “/health” na portu 3000.
Ukoliko se endpoint ne vrati sa 200 status kod u 3 uzastopna provera, Kubernetes će pokrenuti restart pod-a.

Kombinacijom ovih manifesta, moguće je da se deployment aplikacije na podu i monitoring njene zdravlja u realnom vremenu.

Kreiranje Kubernetes pod-a

Kreiranje pod-a u Kubernetes-u se vrši korišćenjem komande “kubectl create pod”. Ova komanda kreira novi pod sa zadatim resursima i okruženjem.

Primer komande za kreiranje pod-a:

kubectl create pod myapp-pod --image=myapp:latest --env="NODE_ENV=production" --limits="cpu=500m,memory=512Mi"

Ova komanda kreira pod sa imenom “myapp-pod”, koji koristi sliku “myapp:latest” i postavlja okruženje u “production”, takođe definiše limita resursa za CPU i memoriju.
Nakon što je pod kreiran, može se pratiti njegov status i resursi korišćenja korišćenjem komande “kubectl get pod myapp-pod”

Napomena: ovaj primer je samo ilustrativan i potrebno je prilagoditi parametre za vašu aplikaciju.
Videli smo kako se kreira Kubernetes manifest fajl. Što ga više budete koristili u polsu, olakšaće vam svakodnevnicu za 10 puta.

Monitoring aplikacije

Nakon uspešne instalacije Grafane i Prometheusa, preporučljivo je da prvo podesite monitoring za aplikaciju koja se nalazi u istom namespace-u.
To možete učiniti tako što ćete konfigurisati Prometheus da skenira endpoint-ove vaše aplikacije i da konfiguriše pravila za alerting.

Takođe, možete konfigurisati Grafanu da prikazuje podatke koji su prikupljeni od Prometheusa. To možete učiniti pomoću Grafana Data Sources i Dashboard-a.
Nakon što ste podesili monitoring za aplikaciju, preporučljivo je da testirate da li monitoring radi kako treba i da li su pravila za alerting podešena ispravno.

U nekom daljem periodu, preporučljivo je da redovno pratite performanse vaše aplikacije i da pratite bilo koje potencijalne probleme koji se pojave.
Ako imate više aplikacija u istom klasteru, dobro bi bilo da ponovite ovaj proces za svaku aplikaciju, kako bi ste bili sigurni da sve aplikacije imaju monitoring.

Napišite komentar