Kubernetes Monitor Prometheus Grafana Kurulumu

Deniz TÜRKMEN
6 min readDec 5, 2022

--

Helm Chart

Merhabalar,

Bu yazımda Kubernetes clusterımızda kubernetes durumunu,podların ve nodeların cpu ve ram tüketimlerini görüntülemek için promethues ve grafana kurulumunu inceliycez.

Prometheus: Hangi portları dinlememiz gerektiğini, dinlediğimiz bu portlarda çalışan entegre sistemlerle neler yapabileceğimizi söyleyen, herhangi bir hata durumunda tanımladığımız kural setlerini devreye sokan ve alertmanager ile konuşan monitoring araçıdır.

Grafana: Grafana projesi 2014 yılında Torkel Ödegaard tarafından başlatılmış ve son birkaç yıl içerisinde GitHub’daki en popüler açık kaynak projelerinden biri haline gelmiştir. Verileri görselleştirme, sorgulama ve metrikler ile ilgili alarm oluşturma imkanı sağlar.

Promethues ve grafanayı minikube clusterımız ile ayağa kaldırcaz. Bunun için ilk olarak minikube başlatalım.

minikube start --memory=8000 --cpus=4

Minikube sistemizde kurulu değil ise diğer yazımdan nasıl kurulduğuna bakabilirsiniz.

Promethues ile,

  • Kubernetes clusterımızın durumunu.
  • Nodeların durumunu
  • Objelerin (pod,ingress,service account) durumunlarını monitör edebiliriz.

Kurulumu helm chart ile devam edeceğiz. Kurulum yapacağımız helm chart içerisinde alert,metric ve dashboard ayarları kurulu olarak gelmektedir.

Not: Helm chart dışında manuel olarak kurulum yapsaydık tüm karmaşık işleri tek tek kendimiz ayarlaması gerekecekti. Bunlar,

  • Alınan metricler için sorgu yazma.
  • Dashboard hazırlama.
  • Alert mekanizması ayarlama gibi gibi bir çok karmaşık ayarı kendimiz manuel olarak ayarlamak zorunda kalacaktık.

Helm chart içerinde Promethues Stack yaml bu configurasyon ayarlarını bizim için tanımlanmış. Şimdi de helm chart kurulumuna bakalım. Bunun için,

curl https://baltocdn.com/helm/signing.asc | sudo apt-key add -sudo apt-get install apt-transport-https --yesecho "deb https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.listsudo apt-get updatesudo apt-get install helm

Komutları ile helm yükleyebilirsiniz.

helm version

ile versiyonuna bakabilirsiniz.

Helm başarılı ile kurduktan sonra şimdi de yazımısın konusu olan Kubernetes Promethues Stack kurulumuna başlayalım.

Minikube clusterımıza bakalım. Bunun için,

kubectl get all -A

Monitoring adında bir tane namespace oluşturalım.

kubectl create namespace monitoringkubectl get ns

Monitoring adında bir namespace oluşturuldu. Şimdi de Promethues stack helm ile deploy edelim. Bunun için,

helm repo add prometheus-community https://prometheus-community.github.io/helm-chartshelm repo updatehelm install k8spromethuesstack --namespace monitoring prometheus-community/kube-prometheus-stack

Başarılı ile yaml deploy edildi.

kubectl — namespace monitoring get pods -l "release=k8spromethuesstack"kubectl get pods -n monitoring

Podlarımız statusu running durumda çalışan podlarıma bakacak olursak.

  • Bilgilendirme için alert
  • Promethues stack ve operator
  • Node exporter
  • Grafana

Şimdide servis objemize bakalım. Bunun için,

kubectl get svc -n monitoring

Görüldüğü gibi bütün servicelerin tipi ClusterIP türünde ingress yazmak için promethues ve grafana için tipini kubectl edit svc service_name ile tipini load balancer çevirebilirsiniz. Port forwarding ile promethues açalım ve metriclere bakalım. Bunun için,

kubectl port-forward pod_name port_number -n namespace

port-forward yaptığımıza göre localhost:9090 gittiğimizde.

Alerts sekmesine baktığmızda,

Gördüğünüz gibi alert mekanizmasında geldi. Biz prometheus helm chart ile değil de manuel olarak kursaydık buradaki alert tek tek kendimiz tanımlamamız gerekecekti.

Status sekmesinden target bakacak olursak.

Bizim için helm chart zor ve karmaşık ayarları otomatik olarak girmiştir. Şimdi de aldığımız bir kaç metrice bakalım. Bunun için classic ui sekmesine geliyoruz. Bir kaç sorgu yazalım.

Tüm podları listelemek için,

kube_pod_created

Mevcut clusterımızda namespacelere göre dağılımı için,

count by (namespace) (kube_pod_created)

Kubernetes clusterında master ve worker nodeların toplamını görmek için,

count by (namespace) (kube_node_created)

nodeların statusu bakmak için,

(kube_node_status_capacity)

Görüldüğü gibi sorgu(query) ile aldığımız metricler aggregate fonksiyonları yazarak daha genişletilmiş sorgular koşabiliriz.

  • sum
  • count by
  • min
  • max gibi

Şimdide grafana ile oluşturulan dashboard inceleyelim. Bunun için,

kubectl get svc -n monitoringkubeclt edit svc service_name -n monitoring

type clusterIP yi ingress tanımlamak için LoadBalancer olarak değiştiriyoruz.

ve

kubectl get svc -n monitoring

Şimdi de ingress oluşturmak için,

cat <<EOF | kubectl apply -f -kind: IngressapiVersion: networking.k8s.io/v1metadata:name: grafana-ingressnamespace: monitoringannotations:kubernetes.io/ingress.class: nginxnginx.ingress.kubernetes.io/ssl-redirect: “false”nginx.ingress.kubernetes.io/rewrite-target: /spec:tls:- hosts:- web.grafana.comrules:- host: web.grafana.comhttp:paths:- path: /pathType: Prefixbackend:service:name: k8spromethuesstack-grafanaport:number: 3000EOF

Ingress aldığı ip ve domain ismini /etc/hosts ekliyoruz.

Ingress oluştuğuna göre şimdi de tarayıcıdan “web.grafana.com” adresine gittiğimizde bizi grafananın login sayfasını karşılamaktadır.

password öğrenmek için,

kubectl get secret k8spromethuesstack-grafana -n monitoring -o jsonpath=”{.data.admin-password}” | base64 — decode ; echo
Username: adminpassword: prom-operator

Görüldüğü gibi başarılı şekilde login olduk. Şimdide prometheusdan alınan metriclerle oluşturulan dashboard inceleyelim. Bunun için,

Sol sekmeden browse tıkladğımızda tanımlı dashboard listelenmektedir.

Kubernetes Compute Resources Cluster dashboard baktığımızda.

CoreDns dashboard bakalım.

İlgili dashboardları kontrol edebilir ya da add panel diyerek kendi dashboardlarınızı oluşturabilirsiniz.

Bu yazımızın da sonuna gelmiş bulunmaktayız. Araştırmalarım ve sektörde karşılaştığım senaryolar üzerine yazılarımı yazmaya devam edeceğim. Umarım faydalı bir yazı olmuştur. Yazımı okuduğunuz için teşekkürler.

Referanslar;

--

--

Deniz TÜRKMEN
Deniz TÜRKMEN

No responses yet