Kubernetes ortamında Prometheus ve Grafana

K8s, Prometheus, Grafana ve get-of-metrics kurulum ve çalıştırılması işlemleri gerçekleştirilmiştir. Ubuntu 18.04.5 LTS makinesi üzerinde çalışılmıştır.

kubectl kurulum
kubectl bizim K8s kümesi ile API Server aracılığıyla iletişim kurmamızı sağlar. Yazının ilerleyen kısımlarında önceden oluşturduğum yaml
dosyalarını bu komut ile K8s kümesinde konuşandırılmasını sağlayacağız.
1- Komut satırını çalıştırın ve en son sürümünü indirin.
curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"
2- kubectl binary dosyasını çalıştırılabilir hale getirin.
chmod +x ./kubectl
3- Klasörü /usr/local/bin içerisine taşıyın.
sudo mv ./kubectl /usr/local/bin/kubectl
4- kubectl kurulduğundan emin olun.
kubectl version --client --short

minikube kurulum
Tek bir makine içerisinde tek bir node (hem master hem worker görevini üstlenir) K8s kümesi oluşturulacak. Böylece kendimize ait bir geliştime ve test ortamını sağlamış oluruz.
1- Öncelikle kullandığınız makinanın sanallaştırmayı desteklediğini kontrol edin. Komutu çalıştırdıktan sonra aşağıdaki gibi çıktı almanız gerekli.
grep -E --color 'vmx|svm' /proc/cpuinfo

2- Eğer hali hazırda hypervisor kuruluysa direk olarak minikube kurulumuna geçebilirsiniz. Linux’ta, sanallaştırmanın etkinleştirilmesinin gerekli olmadığı için Docker ile kurulumundan bahsedeceğim. Öncelikle, kurulmuş eski versiyonlar varsa kaldırıldığından emin olalım.
sudo apt-get remove docker docker-engine docker.io containerd runc
3- apt paket indeksini güncelleyip, ardından HTTPS üzerinden repoları kullanmasına izin vermek için paketleri yükleyin.
sudo apt-get update
sudo apt-get -y install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
4- Docker resmi GPG anahatırın ekleyin.
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
5- 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
‘in son 8 karekterini arayarak anahtara sahip olduğunu doğrulayın.
sudo apt-key fingerprint 0EBFCD88

6- “stable” repoyu eklemek için aşağıdaki komutu kullanın.
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
7- Docker Engine son sürümünü kurulduğundan emin olmak için sudo apt-get update
komutunu kullanın ardından kurulum için aşağıdaki komutu çalıştırın.
sudo apt-get install docker-ce docker-ce-cli containerd.io
8- Docker’ın kurulduğundan emin olmak için aşağıdaki komutu çalıştırın. Ekranda bir bilgi mesajı göreceksiniz ve ardından container kendi kendini yok edicek.
sudo docker run --rm hello-world
Not-1: Docker yansıları sudo docker image ls
ve docker image ls
farklı listeleniyorsa bağlantıda anlatılan yolu izleyerek sorun çözümlenebilir. https://docs.docker.com/engine/install/linux-postinstall/
Not-2: K8s tarafından indirilen yansıların listelenmediği veya el ile eklenen yansılar için yansı çekme hatası alındığında aşağıdaki komut ile sorun aşılabilir. (Ref: https://stackoverflow.com/a/46067700/14091937)
eval $(minikube docker-env)


Fakat makinadan çıkış yapıldığında, tekrar erişildiğinde yansıların tekrar listelenmediği görülür. Bu durumda yukarıdaki komutun her makinaya erişildiğinde tekrar çalıştırılması gerekir.

9- minikube kurulumuna başlayabiliriz artık. Son sürümünü alttaki komut ile indirin.
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 \
&& chmod +x minikube
10- Aşağıdaki komutları sırayla çalıştırarak öncelikle minikube çalıştırabilir olması için /usr/local/bin içerisine klasör oluşturup ardından kurulumu gerçekleştirin.
sudo mkdir -p /usr/local/bin/
sudo install minikube /usr/local/bin/
11- Gerekli kurulumlar tamamlandı. Şimdi local K8s Cluster’ımızı başlatma vakti. Öncelikle Docker ve minikube için gerekli izinleri verip, ardından default driverı docker olarak set edin. Son komut ile Cluster’ı başlatın. (Not: Eğer bu adımı gerçekleştirilirken hata alırsanızminikube start
komutunu koşturarak önce başlatmayı deneyin ardından hata alacaksınızdır. Bu sayede home dizini içerisinde .minikube klasörü oluşturulur ve işleme kaldığınız yerden devam edebilirsiniz.)
sudo usermod -aG docker <username> && newgrp dockersudo chown -R $USER $HOME/.minikube; chmod -R u+wrx $HOME/.minikubesudo minikube config set driver dockerminikube start

Ayrıca, minikube status
ile kontrol edin.

Son olarak, kubectl version --short

Kubernetes Cluster’ımızın kullanıma hazır. Şimdi sırada Grafana, Prometheus ve get-of-metrics (https://github.com/eminaktas/get-of-metrics) betimlemesini bu ortamda ayaklandıracağız.
Prometheus kurulum
Prometheus için gerekli dosyaları aşağıda Gist ile paylaştım. Bu dosyaların hepsini bir klasör altına toplayın.
Aşağıdaki pv.yml ve pvc.yml dosylarını göreceksiniz ama bunlar kustomization.yml
içerisinde yoruma alınmış durumdalar. Dosyalar konuşlandırıldığı zaman deployment.yml içerisinde Pod’un yaşamına bağlı olarak Prometheus verileri tutulacak şekilde çalışmaktadır.
Persistent Volume oluşturup kullanmak isterseniz kustomization.yml
içerisindeki yorum satırlanırını kaldırıp, ardından volumes
altındaki prometheus-data
yı aşağıdaki gibi değiştirebilirsiniz.
- name: prometheus-data
persistentVolumeClaim:
claimName: prometheus-pvc
Prometheus prometheus-config.yml
dosyasında konfigüre edilmiş şekliyle Kubernetes kümesi içerisinde ayaklandırılacak get-of-metrics konteynerleri ve ayrıca targets.yml
içerisindeki hostların ölçümlerini kendi veri tabanına kayıtlayacaktır.
1- kubectl komutunu çalıştıralarak oluşturulmuş yml
dosyalarını K8s API üzerinden K8s Master’a iletilmesini sağla ve Prometheus kısa bir süre içerisinde ayaklanır.
kubectl appyl -k .
Yeni bir hedef makine eklemek istediğinizde prometheus-config.yml
içerisindeki targets.yml
dosyasına hostları ekleyip, klasör içerisindeyken kubectl apply -k .
komutunu çalıştırmanız yeterlidir.
Grafana kurulum
Grafana için ayarlamalar yapılmasına gerek yok. İsterseniz secret.yml
içerisindeki kullanıcı bilgilerini değiştirebilirsiniz.
1- Yine tek bir adımda klasör içerisindeyken aşağıdaki komut satırıyla Grafana’yı konuşlandırın.
kubectl apply -k .
get-of-metrics kurulumu
Bu betimleme Broadcom Ağ Anahtarlarının ölçümlerin toplanması için üretilmiştir. Eğer OF-DPA’in sağladığı client_port_table_dump — s
komut ile ölçümlere erişebiliyorsanız bu betimlemeyi kullanabilirisiniz.
Konuşlandırmadan önce hangi ağ anahtarına bağlanmak istiyorsanız, o ağ anahtarının host, kullanıcı adı, şifre ve bir takma isim bilgilerini secret.yml
içerisinde önceden tanımlamanız gerekmektedir.
1- Prometheus ve Grafana’da olduğu gibi aynı şekilde get-of-metrics’i konuşlandıracağız.
kubectl apply -k .
Eğer birden fazla makine için bu konteyneri ayaklandırmanız gerekirse yeni makineler için sadece metadata
altındaki name
etiketlerinin değerleri değiştirilmesi gerekecektir. Böylece yeni oluşturulacak konteyner için tekillik sağlanmış olur. namespace.yml
içerisine dokunulması gerek yok, zaten hali hazırda ilk konuşlandırma işlemi sırasında get-of-metrics
isminde bir namespace oluşturulur.
Kaynak 1: https://kubernetes.io/docs/tasks/tools/install-kubectl/
Kaynak 2: https://kubernetes.io/docs/tasks/tools/install-minikube/