DigitalOcean Kubernetes Kümesi İzleme: Helm ve Prometheus Operator ile Kapsamlı Kurulum Rehberi
Kubernetes kümeleri, modern bulut tabanlı uygulamaların temelini oluşturur ve bu karmaşık sistemlerin sorunsuz çalışmasını sağlamak için etkili bir izleme stratejisi vazgeçilmezdir. DigitalOcean Kubernetes (DOKS), geliştiricilere ve operasyon ekiplerine güçlü ve yönetilebilir bir Kubernetes deneyimi sunarken, bu kümelerin performansını, sağlığını ve kaynak kullanımını sürekli olarak gözlemlemek kritik öneme sahiptir. Bu makalede, DigitalOcean Kubernetes kümenizi Helm ve Prometheus Operator kullanarak nasıl kapsamlı bir şekilde izleyeceğinizi adım adım açıklayacağız. Prometheus Operator, Kubernetes üzerinde Prometheus, Alertmanager ve ilgili bileşenlerin yönetimini otomatize eden güçlü bir araçtır, Helm ise bu bileşenlerin kurulumunu ve yönetimini büyük ölçüde basitleştirir.
Neden İzleme Önemlidir?
Kubernetes gibi dinamik ve dağıtık bir ortamda izleme, sadece sorunları tespit etmekle kalmaz, aynı zamanda proaktif bir şekilde müdahale etmenize ve sistem performansını optimize etmenize olanak tanır. İşte izlemenin temel faydaları:
* Performans Sorunlarını Tespit Etme: Uygulama veya altyapıdaki darboğazları, yüksek gecikmeleri veya düşük verimi anında belirleyerek kullanıcı deneyiminin kötüleşmesini önler.
* Kaynak Kullanımını Optimize Etme: CPU, bellek, disk ve ağ gibi kaynakların kullanımını izleyerek gereksiz tüketimi azaltır ve maliyetleri düşürür. Ayrıca, uygulamaların ihtiyaç duyduğu kaynakları doğru bir şekilde tahsis etmeye yardımcı olur.
* Hata Ayıklama ve Sorun Giderme: Bir sorun ortaya çıktığında, kapsamlı metrikler ve loglar sayesinde sorunun kök nedenini hızlıca bulup çözebilirsiniz.
* Uygulama Sağlığını ve Kullanılabilirliğini Sağlama: Uygulamaların ve altyapı bileşenlerinin sürekli olarak sağlıklı çalıştığından emin olmak, kesinti sürelerini minimize eder ve yüksek kullanılabilirlik sağlar.
* Proaktif Müdahale: Belirlenen eşik değerlerinin aşılması durumunda otomatik uyarılar alarak, sorunlar kullanıcıları etkilemeden önce müdahale etme şansı verir.
Prometheus Operator ve Helm’e Genel Bakış
İzleme altyapımızı kurmak için iki temel aracı kullanacağız: Prometheus Operator ve Helm. Bu araçlar, Kubernetes ortamında izleme çözümlerini dağıtma ve yönetme süreçlerini önemli ölçüde kolaylaştırır.
Prometheus Operator Nedir?
Prometheus Operator, CoreOS tarafından geliştirilen ve Prometheus izleme ekosistemini Kubernetes üzerinde yönetmek için tasarlanmış bir Kubernetes Operator’ıdır. Kubernetes’in genişletilebilirliğini kullanarak, Prometheus, Alertmanager, ServiceMonitor, PodMonitor ve PrometheusRule gibi özel kaynak tanımları (CRD’ler – Custom Resource Definitions) aracılığıyla izleme bileşenlerini yönetir.
* Otomatik Keşif: Prometheus Operator, ServiceMonitor ve PodMonitor gibi CRD’ler sayesinde Kubernetes servisleri ve pod’ları üzerindeki metrik uç noktalarını otomatik olarak keşfedebilir ve Prometheus yapılandırmasına ekleyebilir. Bu, yeni uygulamalar dağıtıldığında veya mevcut uygulamalar güncellendiğinde manuel yapılandırma ihtiyacını ortadan kaldırır.
* Kolay Yapılandırma: Prometheus ve Alertmanager gibi bileşenlerin yapılandırması, Kubernetes API’si üzerinden deklaratif bir şekilde yönetilebilir. Bu, yapılandırma değişikliklerinin versiyonlanmasını ve dağıtımını kolaylaştırır.
* Ölçeklenebilirlik ve Yüksek Erişilebilirlik: Operator, Prometheus ve Alertmanager örneklerinin ölçeklenmesini ve yüksek erişilebilirlik için yedekli dağıtımlarını yönetebilir.
* Uyarı Yönetimi: PrometheusRule CRD’leri ile uyarı kuralları kolayca tanımlanabilir ve Alertmanager’a iletilir.
Helm Nedir?
Helm, Kubernetes uygulamaları için bir paket yöneticisidir. Uygulamaların ve hizmetlerin Kubernetes kümelerine dağıtımını, yükseltilmesini, yapılandırılmasını ve kaldırılmasını basitleştiren “Chart” adı verilen önceden yapılandırılmış paketler kullanır.
* Kolay Kurulum: Karmaşık uygulamaları tek bir komutla dağıtmanızı sağlar.
* Sürüm Yönetimi: Uygulamaların farklı sürümlerini kolayca yönetebilir ve gerektiğinde önceki sürümlere geri dönebilirsiniz.
* Bağımlılık Yönetimi: Bir uygulamanın bağımlılıklarını otomatik olarak kurar ve yönetir.
* Özelleştirme: values.yaml dosyaları aracılığıyla Chart’ları kümenizin ve uygulamanızın özel ihtiyaçlarına göre özelleştirebilirsiniz.
Prometheus Operator’ı Helm ile dağıtmak, kurulum sürecini son derece basitleştirir ve “kube-prometheus-stack” Helm Chart’ı, Prometheus Operator’ın yanı sıra Prometheus, Alertmanager, Grafana, Node Exporter ve Kube State Metrics gibi tüm temel izleme bileşenlerini tek bir pakette sunar.
Ön Koşullar
Bu rehbere başlamadan önce aşağıdaki ön koşulların karşılandığından emin olun:
* DigitalOcean Hesabı ve DOKS Kümesi: Aktif bir DigitalOcean hesabınız olmalı ve en az bir adet DigitalOcean Kubernetes kümesi oluşturmuş olmalısınız. Eğer bir kümeniz yoksa, DigitalOcean kontrol panelinden veya doctl CLI aracıyla kolayca oluşturabilirsiniz.
* kubectl Kurulumu ve Küme Erişimi: Yerel makinenizde kubectl komut satırı aracı kurulu ve DigitalOcean Kubernetes kümenize erişim için yapılandırılmış olmalıdır. kubeconfig dosyanızı doğru bir şekilde ayarladığınızdan emin olun. kubectl get nodes komutunu çalıştırarak kümenize başarıyla bağlanabildiğinizi doğrulayabilirsiniz.
* helm Kurulumu: Yerel makinenizde Helm CLI aracı kurulu olmalıdır. Helm kurulum talimatları için resmi Helm web sitesine (helm.sh) başvurabilirsiniz.
* doctl (isteğe bağlı): DigitalOcean CLI aracı olan doctl, küme oluşturma ve yönetme gibi işlemleri komut satırından yapmanızı sağlar. Bu rehberde doctl zorunlu olmamakla birlikte, küme ile etkileşim için faydalı olabilir.
DigitalOcean Kubernetes Kümesi Kurulumu (Kısa Bir Özet)
Eğer henüz bir DOKS kümeniz yoksa, hızlıca oluşturmak için aşağıdaki adımları izleyebilirsiniz:
1. DigitalOcean Kontrol Paneli: DigitalOcean hesabınıza giriş yapın, sol menüden “Kubernetes” seçeneğine tıklayın ve “Create Kubernetes Cluster” düğmesini kullanın. İstediğiniz bölgeyi, Kubernetes sürümünü ve düğüm havuzu (node pool) boyutunu/sayısını seçerek kümenizi oluşturun.
2. doctl CLI: doctl kuruluysa, aşağıdaki gibi bir komutla küme oluşturabilirsiniz:
doctl kubernetes cluster create my-doks-cluster \
--region nyc1 \
--version 1.28.2-do.0 \
--node-pool "name=worker-pool,size=s-2vcpu-4gb,count=2"
(Sürüm ve bölgeyi güncel DigitalOcean seçeneklerine göre ayarlayın.)
Küme oluşturulduktan sonra, kubeconfig dosyanızı indirmeniz veya doctl ile otomatik olarak yapılandırmanız gerekir:
doctl kubernetes cluster kubeconfig save my-doks-cluster
Bu komut, ~/.kube/config dosyanıza küme erişim bilgilerini ekleyecektir. Ardından, küme bağlantınızı test edin:
kubectl get nodes
Düğümlerinizin “Ready” durumunda olduğunu görmelisiniz.
Prometheus Operator’ı Helm ile Kurulum
Şimdi DigitalOcean Kubernetes kümemize Prometheus Operator’ı ve tüm bağımlı izleme bileşenlerini Helm kullanarak kurmaya başlayabiliriz.
Helm Repository Ekleme
İlk adım olarak, Prometheus Operator’ı içeren “kube-prometheus-stack” Helm Chart’ının bulunduğu Helm repository’sini eklememiz gerekiyor:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm repo add komutu, prometheus-community adında bir repository’yi yerel Helm yapılandırmanıza ekler. helm repo update ise tüm eklenmiş repository’lerdeki Chart bilgilerini günceller.
Namespace Oluşturma
İzleme bileşenlerini diğer uygulamalarınızdan ayrı tutmak ve daha iyi organizasyon sağlamak için özel bir namespace oluşturmak iyi bir uygulamadır:
kubectl create namespace monitoring
Bu komut, monitoring adında yeni bir Kubernetes namespace’i oluşturur.
Prometheus Operator Kurulumu
Artık Prometheus Operator’ı ve tüm izleme yığınını kube-prometheus-stack Helm Chart’ı ile kurabiliriz. Bu Chart, Prometheus, Alertmanager, Grafana, Kube State Metrics ve Node Exporter gibi tüm gerekli bileşenleri içerir.
helm install prometheus-operator prometheus-community/kube-prometheus-stack \
--namespace monitoring \
--set prometheus.prometheusSpec.serviceMonitorSelectorNilUsesPods=false \
--set grafana.ingress.enabled=true \
--set grafana.ingress.hosts[0]="grafana.your-domain.com" \
--set grafana.adminPassword="your-secure-password" \
--set prometheus.ingress.enabled=true \
--set prometheus.ingress.hosts[0]="prometheus.your-domain.com" \
--set alertmanager.ingress.enabled=true \
--set alertmanager.ingress.hosts[0]="alertmanager.your-domain.com"
Bu komut oldukça kapsamlıdır ve birkaç önemli parametre içerir:
* helm install prometheus-operator prometheus-community/kube-prometheus-stack: prometheus-operator adıyla kube-prometheus-stack Chart’ını kurar.
* --namespace monitoring: Tüm bileşenlerin monitoring namespace’ine dağıtılmasını sağlar.
* --set prometheus.prometheusSpec.serviceMonitorSelectorNilUsesPods=false: Bu parametre, Prometheus’un tüm ServiceMonitor’ları otomatik olarak keşfetmesini sağlar. Varsayılan olarak, Prometheus sadece kendi namespace’indeki ServiceMonitor’ları keşfeder. false olarak ayarlandığında, tüm namespace’lerdeki ServiceMonitor’ları dinleyecektir.
* --set grafana.ingress.enabled=true, --set grafana.ingress.hosts[0]="grafana.your-domain.com": Grafana için bir Ingress kaynağı oluşturur. grafana.your-domain.com yerine kendi alan adınızı kullanmalısınız. Bu, Grafana’ya bir dış IP adresi veya Load Balancer üzerinden erişmenizi sağlar.
* --set grafana.adminPassword="your-secure-password": Grafana’nın varsayılan admin şifresini belirler. Bu şifreyi kesinlikle güçlü ve benzersiz bir şifreyle değiştirin.
* --set prometheus.ingress.enabled=true, --set prometheus.ingress.hosts[0]="prometheus.your-domain.com": Prometheus Web UI için bir Ingress kaynağı oluşturur.
* --set alertmanager.ingress.enabled=true, --set alertmanager.ingress.hosts[0]="alertmanager.your-domain.com": Alertmanager Web UI için bir Ingress kaynağı oluşturur.
Önemli Not: Ingress kaynaklarının çalışabilmesi için kümenizde bir Ingress Controller’ın (örneğin NGINX Ingress Controller) kurulu olması gerekmektedir. DigitalOcean Load Balancer ile entegre olan NGINX Ingress Controller’ı kurmak için aşağıdaki komutu kullanabilirsiniz (eğer henüz kurulu değilse):
helm upgrade --install ingress-nginx ingress-nginx \
--repo https://kubernetes.github.io/ingress-nginx \
--namespace ingress-nginx --create-namespace \
--set controller.service.type=LoadBalancer \
--set controller.service.annotations."service\.beta\.kubernetes\.io/do-loadbalancer-protocol"="https" \
--set controller.service.annotations."service\.beta\.kubernetes\.io/do-loadbalancer-tls-passthrough"="true"
Bu komut, NGINX Ingress Controller’ı kurar ve DigitalOcean Load Balancer’ı kullanarak dışarıdan erişilebilir hale getirir. Load Balancer’ın bir dış IP adresi alması birkaç dakika sürebilir. Bu IP adresini, DNS sağlayıcınızda yukarıdaki your-domain.com yerine kullandığınız alan adları için A kaydı olarak tanımlamanız gerekecektir.
Kurulumun tamamlandığını doğrulamak için aşağıdaki komutu kullanabilirsiniz:
kubectl get pods -n monitoring
Tüm Pod’ların Running durumunda olduğunu görmelisiniz.
Kurulan Bileşenlere Erişim
Prometheus Operator, Prometheus, Grafana ve Alertmanager gibi ana bileşenler artık kümenizde çalışıyor olmalı. Bu bileşenlere nasıl erişeceğinizi görelim.
Prometheus Web UI
Prometheus’un web arayüzüne erişmek için Ingress yapılandırmasını kullandıysanız, tarayıcınızdan prometheus.your-domain.com adresine gidebilirsiniz. Eğer Ingress kullanmadıysanız veya geçici olarak erişmek istiyorsanız, kubectl port-forward komutunu kullanabilirsiniz:
kubectl port-forward svc/prometheus-kube-prometheus-prometheus -n monitoring 9090:9090
Ardından tarayıcınızda http://localhost:9090 adresine giderek Prometheus UI’a erişebilirsiniz. Burada, toplanan metrikleri sorgulayabilir, uyarı kurallarını ve hedef durumlarını inceleyebilirsiniz.
Grafana Paneli
Grafana, Prometheus’tan toplanan metrikleri görselleştirmek için kullanılan güçlü bir gösterge tablosu aracıdır. Ingress yapılandırmasını kullandıysanız, tarayıcınızdan grafana.your-domain.com adresine gidebilirsiniz. Kullanıcı adı admin, şifre ise kurulum sırasında --set grafana.adminPassword ile belirlediğiniz şifredir.
Eğer Ingress kullanmadıysanız veya geçici olarak erişmek istiyorsanız, kubectl port-forward komutunu kullanabilirsiniz:
kubectl port-forward svc/prometheus-grafana -n monitoring 3000:80
Ardından tarayıcınızda http://localhost:3000 adresine giderek Grafana paneline erişebilirsiniz. İlk girişte şifrenizi değiştirmeniz şiddetle tavsiye edilir.
Grafana, kube-prometheus-stack ile birlikte birçok önceden yapılandırılmış gösterge tablosu (dashboard) ile gelir. Bu panolar, küme sağlığı, düğüm performansı, Pod metrikleri ve daha fazlası hakkında kapsamlı bilgiler sunar.
Alertmanager Web UI
Alertmanager’ın web arayüzüne erişmek için Ingress yapılandırmasını kullandıysanız, tarayıcınızdan alertmanager.your-domain.com adresine gidebilirsiniz. Eğer Ingress kullanmadıysanız veya geçici olarak erişmek istiyorsanız, kubectl port-forward komutunu kullanabilirsiniz:
kubectl port-forward svc/prometheus-kube-prometheus-alertmanager -n monitoring 9093:9093
Ardından tarayıcınızda http://localhost:9093 adresine giderek Alertmanager UI’a erişebilirsiniz. Burada, aktif uyarıları, susturulmuş uyarıları ve Alertmanager yapılandırmasını görebilirsiniz.
DigitalOcean Specific Monitoring (Opsiyonel ama Önemli)
DigitalOcean Kubernetes kümeleri, temel Kubernetes bileşenlerinin yanı sıra DigitalOcean’a özgü entegrasyonlar da içerir. Bu entegrasyonların metriklerini izlemek, kümenizin genel sağlığı hakkında daha derinlemesine bilgi edinmenizi sağlar.
* DigitalOcean Cloud Controller Manager (CCM): DOKS kümelerindeki Load Balancer’lar, PersistentVolume’lar ve diğer DigitalOcean kaynaklarını yöneten bir bileşendir. CCM’in kendi metrik uç noktası vardır.
* DigitalOcean CSI (Container Storage Interface): DOKS kümelerinde Block Storage ve Spaces gibi depolama çözümlerini yöneten CSI sürücüsüdür. CSI sürücüsü de performans metrikleri sağlar.
kube-prometheus-stack genellikle bu DigitalOcean’a özgü metrikleri otomatik olarak toplamaz. Bunları Prometheus’a dahil etmek için ek ServiceMonitor veya PodMonitor kaynakları tanımlamanız gerekebilir. Ancak, çoğu durumda, Node Exporter ve Kube State Metrics gibi standart bileşenler DOKS düğümlerinizin ve genel küme durumunuzun büyük bir bölümünü zaten kapsayacaktır. DigitalOcean’ın kendi izleme araçları (DigitalOcean Monitoring) da temel düğüm metriklerini sağlar ve bu, Prometheus ile tamamlayıcı bir rol oynayabilir.
Eğer spesifik DigitalOcean bileşenlerinden metrik toplamanız gerekirse, ilgili bileşenin metrik uç noktasını (genellikle /metrics yolu üzerinde) bulup ona yönelik bir ServiceMonitor veya PodMonitor oluşturmanız gerekecektir. Örneğin, bir DigitalOcean CSI sürücüsü Pod’unun metriklerini toplamak için:
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
name: do-csi-monitor
namespace: monitoring
spec:
selector:
matchLabels:
app: do-csi-driver # CSI sürücüsü Pod'unuzun etiketini kontrol edin
podMetricsEndpoints:
- port: metrics # CSI sürücüsünün metrik portu
path: /metrics
namespaceSelector:
matchNames:
- kube-system # CSI sürücüsü genellikle kube-system namespace'inde çalışır
Bu, sadece bir örnek olup, gerçek etiketler ve portlar için DOKS kümenizdeki CSI sürücüsü Pod’unu incelemeniz gerekebilir (kubectl describe pod ).
Özelleştirme ve Gelişmiş Konfigürasyonlar
kube-prometheus-stack Helm Chart’ı, values.yaml dosyası aracılığıyla son derece özelleştirilebilir. Bu, izleme yığınınızı kümenizin ve uygulamanızın özel ihtiyaçlarına göre ince ayar yapmanızı sağlar.
values.yaml Dosyası ile Özelleştirme
kube-prometheus-stack Chart’ının varsayılan values.yaml dosyasını helm show values prometheus-community/kube-prometheus-stack > values.yaml komutuyla indirip düzenleyebilirsiniz. Ardından, helm upgrade komutuyla bu dosyayı kullanarak kurulumu güncelleyebilirsiniz:
helm upgrade prometheus-operator prometheus-community/kube-prometheus-stack \
--namespace monitoring \
-f values.yaml
Bazı yaygın özelleştirme alanları şunlardır:
* PersistentVolumeClaim Boyutları: Prometheus ve Alertmanager’ın metrik ve durum verilerini depoladığı PersistentVolumeClaim (PVC) boyutlarını ayarlayabilirsiniz. Örneğin:
prometheus:
prometheusSpec:
storageSpec:
volumeClaimTemplate:
spec:
resources:
requests:
storage: 50Gi # Prometheus için 50GB depolama
alertmanager:
alertmanagerSpec:
storage:
volumeClaimTemplate:
spec:
resources:
requests:
storage: 5Gi # Alertmanager için 5GB depolama
DigitalOcean Block Storage, DOKS kümelerinde varsayılan depolama sınıfıdır ve bu PVC’ler otomatik olarak DigitalOcean Block Storage birimleri olarak sağlanacaktır.
* Resource Limitleri: Her bir bileşenin (Prometheus, Grafana, Alertmanager vb.) CPU ve bellek limitlerini ve isteklerini ayarlayarak kaynak kullanımını optimize edebilirsiniz.
prometheus:
prometheusSpec:
resources:
requests:
cpu: 200m
memory: 1Gi
limits:
cpu: 1000m
memory: 4Gi
* Alertmanager Konfigürasyonu: Alertmanager’ı Slack, Email, PagerDuty gibi bildirim kanallarıyla entegre edebilirsiniz. Bu yapılandırmalar alertmanager.config altında yapılır.
alertmanager:
config:
global:
resolve_timeout: 5m
route:
group_by: ['alertname', 'cluster', 'service']
group_wait: 30s
group_interval: 5m
repeat_interval: 1h
receiver: 'slack-notifications'
receivers:
- name: 'slack-notifications'
slack_configs:
- channel: '#alerts'
send_resolved: true
api_url: 'https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX'
* Grafana Panelleri ve Veri Kaynakları: Özel Grafana panelleri ekleyebilir veya ek veri kaynakları tanımlayabilirsiniz.
* Node Exporter ve Kube State Metrics Ayarları: Bu bileşenlerin kaynak tüketimini veya topladığı metrikleri özelleştirebilirsiniz.
PrometheusRule Oluşturma
Prometheus Operator, PrometheusRule CRD’si aracılığıyla uyarı kurallarını yönetir. Bu kurallar, belirli metrik eşikleri aşıldığında veya belirli durumlar oluştuğunda Alertmanager’a uyarılar gönderir.
Örnek bir CPU kullanım uyarısı kuralı:
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: kubernetes-cpu-alert
namespace: monitoring
spec:
groups:
- name: kubernetes-cpu-usage
rules:
- alert: HighNodeCPUUsage
expr: 100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for: 5m
labels:
severity: warning
annotations:
summary: "Node {{ $labels.instance }} üzerindeki CPU kullanımı çok yüksek."
description: "Node {{ $labels.instance }} üzerindeki CPU kullanımı son 5 dakikadır %80'in üzerinde."
Bu kuralı bir .yaml dosyasına kaydedip kubectl apply -f your-rule.yaml -n monitoring komutuyla uygulayabilirsiniz.
ServiceMonitor ve PodMonitor Kullanımı
Uygulamalarınızdan metrik toplamak için ServiceMonitor veya PodMonitor kullanırsınız. ServiceMonitor, bir Kubernetes Service’i tarafından sunulan metrik uç noktalarını keşfederken, PodMonitor doğrudan Pod’lardaki metrik uç noktalarını hedefler.
Örnek bir uygulamanın metriklerini izlemek için ServiceMonitor tanımı:
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: my-app-monitor
namespace: monitoring
labels:
release: prometheus-operator # Bu etiketi prometheus.prometheusSpec.serviceMonitorSelector ile eşleşecek şekilde ayarlayın
spec:
selector:
matchLabels:
app: my-app # Metriklerini izlemek istediğiniz uygulamanın servisine ait etiket
endpoints:
- port: http-metrics # Uygulamanızın metriklerinin sunulduğu Service portunun adı
path: /metrics # Metriklerin sunulduğu yol
namespaceSelector:
matchNames:
- default # Uygulamanızın çalıştığı namespace
Bu ServiceMonitor‘ı uyguladığınızda, Prometheus otomatik olarak my-app etiketli servisin http-metrics portundaki /metrics yolundan metrikleri toplamaya başlayacaktır. Uygulamanızın metrikleri sağlamak için Prometheus uyumlu bir istemci kütüphanesi (örneğin Prometheus Go client) kullanması gerektiğini unutmayın.
Sorun Giderme ve En İyi Uygulamalar
İzleme altyapısı kurarken bazı yaygın sorunlarla karşılaşabilir ve belirli en iyi uygulamaları takip ederek sisteminizin sağlamlığını artırabilirsiniz.
Yaygın Sorunlar
* Helm Kurulum Hataları: helm install veya helm upgrade komutları başarısız olursa, çıktıyı dikkatlice inceleyin. Genellikle eksik bağımlılıklar, yanlış yapılandırma veya kaynak yetersizliği gibi sorunlar belirtilir.
* Pod’ların Başlamaması: kubectl get pods -n monitoring komutunda bazı Pod’lar Pending, CrashLoopBackOff veya Error durumundaysa:
* kubectl describe pod : Pod’un olaylarını ve neden başlamadığını gösterir.
* kubectl logs : Pod’un loglarını kontrol edin.
* Kaynak limitleri yetersiz olabilir. values.yaml dosyasında CPU/bellek limitlerini artırmayı deneyin.
* PersistentVolumeClaim sorunları olabilir. kubectl get pvc -n monitoring komutuyla PVC’lerin Bound durumda olduğunu kontrol edin.
* Metriklerin Görünmemesi: Prometheus UI’da beklediğiniz metrikleri göremiyorsanız:
* kubectl get servicemonitors -n monitoring veya kubectl get podmonitors -n monitoring: Monitör kaynaklarınızın doğru yapılandırıldığından emin olun.
* Prometheus UI’daki “Status -> Targets” sayfasını kontrol edin. Hedeflerinizin UP durumda olduğundan ve doğru metrik uç noktalarını hedeflediğinden emin olun.
* Uygulamanızın gerçekten metrikleri doğru formatta (/metrics yolunda) sunup sunmadığını kontrol edin.
* Grafana’ya Erişim Sorunları:
* Ingress kullanıyorsanız, kubectl get ingress -n monitoring komutuyla Ingress kaynağınızın durumunu kontrol edin. Load Balancer’ın IP adresini aldığından ve DNS kaydınızın doğru olduğundan emin olun.
* kubectl logs komutuyla Ingress Controller’ın loglarını kontrol edin.
* Port-forwarding kullanıyorsanız, komutun hala çalıştığından ve doğru portu ilettiğinden emin olun.
En İyi Uygulamalar
* Kaynak Limitleri ve İstekleri Belirleme: Her Pod için CPU ve bellek istekleri (requests) ve limitleri (limits) belirlemek, kümenizin istikrarlı çalışmasını sağlar ve aşırı kaynak tüketimini önler. Prometheus ve Grafana gibi bileşenler önemli miktarda kaynak tüketebilir, bu yüzden bunları iyi ayarlayın.
* PersistentVolume Kullanma: Prometheus ve Alertmanager’ın verileri için PersistentVolume kullanmak, Pod’lar yeniden başlatıldığında veya taşındığında verilerin kaybolmamasını sağlar. kube-prometheus-stack bunu varsayılan olarak yapar, ancak PVC boyutlarını ihtiyaçlarınıza göre ayarlayın.
* Yedekleme Stratejileri: Prometheus verisi kritikse, düzenli yedekleme stratejileri düşünün. Bu, Prometheus’un remote_write özelliğini kullanarak verileri uzun süreli depolama çözümlerine (örneğin Thanos, Mimir) göndermek veya PVC’lerin anlık görüntülerini almak olabilir.
* Güvenlik:
* Grafana ve Prometheus arayüzlerine erişimi Ingress ile sağlarken HTTPS kullanmak için sertifikaları yapılandırın (örneğin Cert-Manager ile Let’s Encrypt).
* Grafana’nın varsayılan admin şifresini güçlü bir şifreyle değiştirin.
* Prometheus ve Alertmanager’a halka açık erişimi dikkatlice yönetin. Mümkünse, VPN veya IP kısıtlamaları kullanarak erişimi sınırlayın.
* Otomatik Ölçeklendirme: DOKS kümenizdeki düğümlerin veya uygulamaların yoğunluğunu izleyerek Horizontal Pod Autoscaler (HPA) veya Vertical Pod Autoscaler (VPA) gibi araçlarla otomatik ölçeklendirme stratejileri uygulayın. Prometheus metrikleri HPA için veri kaynağı olarak kullanılabilir.
Sonuç
DigitalOcean Kubernetes kümenizi Helm ve Prometheus Operator ile izlemek, uygulamanızın ve altyapınızın sağlığını, performansını ve kaynak kullanımını anlamak için sağlam bir temel oluşturur. Bu kapsamlı rehberde, kube-prometheus-stack Chart’ını kullanarak Prometheus, Grafana ve Alertmanager gibi temel izleme bileşenlerini nasıl kuracağınızı, bunlara nasıl erişeceğinizi ve DigitalOcean’a özgü bazı hususları nasıl yöneteceğinizi adım adım öğrendiniz.
Etkili bir izleme sistemi kurmak, sorunları proaktif olarak tespit etmenize, performans darboğazlarını gidermenize ve sonuç olarak daha kararlı ve güvenilir bir hizmet sunmanıza olanak tanır. DigitalOcean’ın yönetilebilir Kubernetes hizmetinin sağladığı kolaylıklarla Prometheus Operator’ın gücünü birleştirmek, izleme stratejinizi basitleştirirken aynı zamanda en iyi uygulamaları takip etmenizi sağlar.
Unutmayın ki izleme, sürekli bir süreçtir. Kümeniz ve uygulamalarınız geliştikçe, izleme yapılandırmanızı ve uyarı kurallarınızı da gözden geçirmeli ve güncellemelisiniz. Bu kurulum, DOKS kümenizin gelecekteki büyümesi ve karmaşıklığı için sağlam bir temel sunar.