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
Takođe, možete koristiti komandu „kubectl get service“ da vidite da li su service-ovi za Prometheus i Grafana kreirani.
Napomena: u zavisnosti od konfiguracije manifest fajla, potrebno je prilagoditi komande za pristup Prometheus-u i Grafana-i ili pristupiti njima preko ingres-a.
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