Helm ile Kubernetes ortamında ELK Stack kurulumu
Selamlar, bu yazıda kubernetes ortamında helm kullanarak ELK Stack kurulumuna basit bir ifade ile değinmiş olacağız..
Bağımlılıkların ve bu bağımlıkların yapılandırılması ile beraber paketlemiş ‘mikro hizmetler/servisler’e olan uçtan uca oluşturulan teknolojisi ile modern uygulamaların oranı gittikçe artmakta…Uygulamaların büyüyerek birbirinden farklı sunuculara dağıtılmış birden çok kapsayıcıya yayılır hale gelmesi, bunların yönetimini daha da karmaşık hale getirmekte olduğudan dolayı Kubernetes, bu sözünü ettiğimiz karmaşıklığın yönetilebilmesi adına nerede ve nasıl çalışacağını kontrol eden açık kaynak bir API sağlıyor…
Sektörün ihtiyaçları doğrultusunda container yapılarının yoğun olarak kullanılmaya başlanması ile beraber, ‘yönetim ve operasyon’ yükünü kısıtlı kaynaklar ile kaldırabilmek adına bu sistemleri otonom haline getirmek kaçınılmaz bir hal aldı…Aslına bakarsanız Kubernetes’in öne çıktığı en önemli nokta burası…
Sözünü ettiğimiz konteyner ve kubernetes yapısı kullandığımız yazılımlara ‘over engineering’ katan bir bileşen değil, fakat neredeyse tamamı IT ile ilgili bir alt yapı bileşenidir…Her ne kadar da tek bir konteynerı tek bir makine üzerinden yönetmek kolay olsa da, bu durum N tane konteyner’ı N tane makine üzerinde ‘high available’ gerekçesiyle N farklı sürümde yönetmek zor olacağından dolayı bu işi bizim yerimize yapan birine ihtiyaç duyduk ve bu container orkeastrasını yönetmek için kendimize aslında bir ‘şef’ bulmuş olduk…
Kurulumlara geçmeden önce Helm ve Minikube yapısına özetle değinebilmek gerekirse; Helm, platformlarda paket yönetimi için bir uygulamanın kurulumu ve gerekli ön-gereksinimlerinin,ilgili kütüphaneler ile kurulması ve sonrasında uygulamanın kurulabilmesi adına geliştirilmiş bir ‘kurulum’ yöneticisidir…İfadeyi biraz daha anlamlı hale getirebilmek için bir örnek verelim;Linux platformlarda bir uygulama kurmak için “apt,yum,rpm, vb..” paket yönetim sistemleri ile uygulamayı docker vs gibi repositorylerde arar ve kurarız…Aslında bu paket yönetim yazılımları bu sözünü ettiğimiz uygulamaları kurmak için gerekli olan binary ve öngereksinimleri kurar ve sonrasında uygulamanın kendisini kurmuş olur…Kullandığımız modern platformaların hepsinde bu sözünü ettiğimiz paket yöneticisi var aslında…Örneğin; Windows ortaında OneGet,Chocolatey, MacOs ortamında brew gibi örnekler verilebilir,Linux için sudo örnekleri verilebilir…
Minikube bir parça dokunabilmek gerekirse,basit bir ifade ile; Kubernetes’i local bilgisayarımızda kullanmamızı sağlayan bir uygulama olarak tanımlayabilmek mümkün…Kullanım amacı olarak kubernetesi herhangi bir kubernetes cluster’ı kurmadan önce öğrenme veya yazdığımız bir uygulamanın kubernetes clusterına host etmeden önce,uygulamanın çalışıp çalışmadığını kontrol etmek için kullanırız…
Kubernetes ortamına Elastic Stack kurulumu
Ön Gereksinimler
- Minikube
- Helm
- Docker
- VirtualBox
arbade@Ardas-MacBook-Pro ~ % minikube start😄 minikube v1.15.0 on Darwin 11.0.1Creating virtualbox VM (CPUs=2, Memory=2048MB, Disk=20000MB)✨ Using the hyperkit driver based on existing profile👍 Starting control plane node minikube in cluster minikube🏃 Updating the running hyperkit "minikube" VM ...🐳 Preparing Kubernetes v1.19.4 on Docker 19.03.13 ...🔎 Verifying Kubernetes components...🌟 Enabled addons: storage-provisioner, default-storageclass, dashboard🏄 Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
Default’da Minikube VM’i 2GB bellek ve 2 CPU çekirdeği kullanacak şekilde yapılandırılmıştır…Fakat elimizdeki resource ElasticSearch için yeterli değil…Dolayısıyla da, 8GB bir memory’nin ve 4 CPU çekirdeğinin doğru olabileceğini düşünüyorum ve minikube’u bu config ayarları ile ayağa kaldırmak istiyoruz
minikube start --cpus 4 --memory 8192
Helm’in kurulu olduğunu varsaydığımızda,Kubernetes API server ile helm client’ın haberleşebilmesi için helm init komutu ve tiller’ deploy komutları ile devam edelim;
Helm initkubectl get pods -n kube-system | grep tiller
Tiller’ın kurulmasını sağladıktan sonra kubectl ile tiller pod’umuzun oluşup oluşmadığına bakalım(Bu işlem, bir iki dakika sürebilir…Pod LifeCycle’ına göre bkz:https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/)
Sonrasında podumuzun kullanılabilir olduğunu şu şekilde görebilmemiz gerekir:
Helm ile ElasticSearch Cluster’ını Deploy edelim!
Helm repo’muza elasticsearch’ü ekleyelim
Helm repo add elastic https://Helm.elastic.co
"elastic" has been added to your repositories
Ardından, Minikube’de multi-node’lu bir ElasticSearch cluster’ı kurmak için Helm konfigürasyonunu indirelim
curl -O https://raw.githubusercontent.com/elastic/Helm-charts/master/elasticsearch/examples/minikube/values.yaml
İndirdiğimiz konfigurasyonu helm chartında tanımlayalım
Helm install --name elasticsearch elastic/elasticsearch -f ./values.yaml
Sonucunda,ElasticSearch pod’larımızın statülerini kontrol edelim
Port Forwading ile ElasticSearch’ü 9200 portuna yönlendirelim ve localhost:9200'da ayağa kaldıralım
kubectl port-forward svc/elasticsearch-master 9200
Helm ile Kibana’yı Deploy edelim!
Deploy’dan önce Kibana’dan bir parça bahsetmek gerekirse kısaca şu şekilde özetleyelim…ElasticSearch için açık kaynaklı bir veri görselleştirme platformu diyebiliriz..Yani bir ElasticSearch cluster’ında indexlenen içeriğin üzerinde bir görselleştirme sağlamakta…
Helm install --name kibana elastic/kibanakubectl get pods
Yukarıda’da belirtiğim gibi bir pod’un kullanılabilir duruma gelmesi bir kaç dakika sürmekte
Kibana’yı localımizde kullanabilmek için 5601 portuna ‘port-forwading’ yapıyoruz:
kubectl port-forward deployment/kibana-kibana 5601
http://localhost:5601'den kibana’ya erişim sağlayaibliriz
MetricBeat’i Deploy Edelim!
Son olarak kısaca MetricBeat’den bahsetmek gerekirse,ElasticSearch’ün eklentilerinden birisidir…Aslında MetricBeat ile işletim sisteminden ve sunucu da çalışan servislerden düzenli aralıklarla kullanılan modüllere göre verileri toplayarak elasticsearch de bu verileri tutan ve içerisinde dashboardlarla sistem ve servisleri trace etmemizi sağlayan bir plugin diyebiliriz
Helm install --name metricbeat elastic/metricbeat
Helm Chart’da kullanabilmek için MetricBeat’i indiriyoruz ve daha sonra podlarımızın durumunu kontrol ediyoruz
Ve bütün podlarımız ayakta!…Curl ile metriklerin ElasticSearch’e indexlenmesini sağlayalım:
curl localhost:9200/_cat/indices
green open .kibana_task_manager QxPJtK5rQtGGguLRv5h9OQ 1 1 2 4 87.7kb 44.8kb
green open metricbeat-7.3.0-2019.09.18-000001 DeXaNAnMTWiwrQKNHSL0FQ 1 1 291 0 1.1mb 544.1kb
green open .kibana_1 gk0OHIZDQWCNcjgb-uCBeg 1 1 4 0 30.3kb 15.1kb
Ardından Index Pattern tanımlamak ve analiz edebilmek için Kibana’yı açalım ve sırası ile şu adımları takip edelim…Management>Kibana>Index Pattern
Create Index Pattern buttonu’na tıklayalım ve MetricBeat’i tanımlayalım
‘metricbeat*-’ olarak Index Pattern’i ekleyelim ve sonraki adımda ‘@timestamp’ ekleyelim ve zaman filtersini uygulayalım
Finalde Discover sayfasına döndüğümüzde…MetricBeat tarafından Kubernetes Cluster’ı için toplanan metricleri görüyor olacağız
Keyifli olabilmesi dileğiyle…
Arda Batuhan Demir