Kubernetes Horizontal Pod Autoscaler’dan KEDA’ya Geçiş

Yunus Emre Polat
Arabam Labs
Published in
3 min readDec 11, 2023

Keda Nedir? HPA ile Farkları Nelerdir? Nasıl deploy edilir?

Kubernetes-based Event-Driven Autoscaling (KEDA)bir Kubernetes uygulaması olarak çalışır ve K8s clusterlerinde event-driven scaling (olay bazlı ölçeklendirme) sağlar. Bu, uygulamaların dinamik olarak yüklerine göre ölçeklendirilebilmesini sağlar.

HPA, belirli ölçütler üzerinden pod sayısını otomatik olarak ölçeklendirmek için kullanılan özel bir Kubernetes özelliğidir. KEDA ise genel bir kavramdır ve Kubernetes ekosistemi içinde çeşitli araçlar veya özel uygulama durumları tarafından uygulanabilir. KEDA, belirli olayları veya durumları temel alarak ölçeklendirme kararları verme yeteneğini ifade eder.

KEDA ile beraber HPA’nın cpu ve memory metric’lerine ek olarak prometheus,RabbitMQ ve PostgreSQL metriclerine göre scale edebiliyoruz.

Scale edilebilecek uygulamalar ve metriclerini kullanarak deploymentı scale edebileceğimiz uygulamaların listesi KEDA’nın kendi sitesinde mevcut.

https://keda.sh/docs/2.12/concepts/#architecture

Kedayı helm chart yardımıyla kullanacağımız kubernetes cluster üzerine kurmamız gerekiyor. Bunun için hazır helm chart’lar mevcut.
örneğin:
https://github.com/kedacore/charts/releases

Github’daki bu helm chart’ı indirip cluster ayarlarını helm chart’a tanımlamamız gerekiyor.

keda klasörü altındaki values.yaml’a kubernetes cluster configimizi giriyoruz.

values.yaml içinde bulunan clusterDomain satırına kubernetes cluster ismimizi yazıyoruz.

clusterDomain: tenant-cluster

Keda’nın çalışabilmesi için kubernetes cluster üzerimizde keda’mıza ait bir namespace olusturmamız gerekiyor.

kubectl create namespace KEDA

Keda configimiz hazır. Artık helm chart’ı ci.yaml dosyamız üzerinden deploy alarak kubernetes cluster’ımızda çalıştırabiliriz.

Keda-admission-webhooks:

Admission webhooks Kubernetes API’sine gelen istekleri dinleyen ve bu istekleri değiştirebilen veya engelleyebilen özel uygulamalardır. Bu, Kubernetes nesnelerini oluştururken veya güncellerken özel davranışları uygulamak için kullanılır.

Keda-operator:

Keda-operator KEDA’nın Kubernetes üzerinde nasıl dağıtılacağını ve yönetileceğini sağlayan bir Kubernetes operatörüdür. Kubernetes operatörleri, karmaşık uygulama durumlarını yönetmeyi ve uygulamaların daha kolayca dağıtılmasını sağlamayı amaçlayan özel Kubernetes denetleyicileridir.

Keda-operator-metrics-apiserver:

KEDA, uygulamaların belirli olaylar gerçekleştikçe otomatik olarak ölçeklenmesini sağlar. Bu ölçeklendirme faaliyetlerini anlamak ve izlemek için çeşitli metrikler ve ölçümler kullanılır. keda-operator-metrics-apiserver bu metrikleri toplamak ve sağlamak için kullanılır.

Kubernetes’e cıktığımız projelerin hpa.yaml dosyalarını indirdiğimiz helm chart’daki samples> nginx-scaledobject.yml dosyasına bakarak güncelliyoruz.

apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: {{ include "app.fullname" . }}
labels:
{{- include "app.labels" . | nindent 4 }}
spec:
scaleTargetRef:
name: {{ include "app.fullname" . }}
minReplicaCount: {{ .Values.autoscaling.minReplicas }}
maxReplicaCount: {{ .Values.autoscaling.maxReplicas }}
triggers:
- type: cpu
metricType: Utilization
metadata:
value: "{{ .Values.autoscaling.targetCPUUtilizationPercentage }}"
- type: memory
metricType: Utilization
metadata:
value: "{{ .Values.autoscaling.targetMemoryUtilizationPercentage }}"

Bir sonraki yazıda prometheus metriclerine göre nasıl scale edebileceğimizi yazacağım.

--

--