Kubernetes'te KEDA ile Otomatik Pod Ölçekleme: Adım Adım Kurulum ve Örnekler

Kubernetes'te KEDA ile Otomatik Pod Ölçekleme: Adım Adım Kurulum ve Örnekler

Kubernetes üzerinde çalışan uygulamalar zaman zaman yoğun trafik alabilir. Bu durumlarda uygulamanın yük altında kalmadan esnek şekilde büyüyüp küçülmesi çok önemlidir. Kubernetes'in yerleşik HorizontalPodAutoscaler (HPA) özelliği bunun için güzel bir başlangıç sunar. Ancak HPA genellikle sadece CPU ve RAM gibi temel metriklerle sınırlıdır.

İşte tam burada devreye KEDA (Kubernetes-based Event Driven Autoscaler) giriyor. KEDA, Prometheus, Kafka, Redis, RabbitMQ gibi pek çok kaynaktan gelen metriklere göre uygulamanızı otomatik olarak ölçeklendirebilir.

Bu yazıda, KEDA’nın Kubernetes ortamına nasıl kurulacağını, nelere dikkat edilmesi gerektiğini ve örnek ScaledObject konfigürasyonlarıyla nasıl kullanılacağını göstereceğim.


Ön Koşul: Metrics Server Kurulu mu?

KEDA'nın cpu tabanlı metriklerle çalışabilmesi için Kubernetes ortamında Metrics Server yüklü olmalı. Kontrol etmek için:

kubectl get apiservices | grep metrics

Yoksa kurmak için şu komutu kullanabilirsin:

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

Eğer TLS hataları alırsan (örneğin self-signed sertifika nedeniyle), Deployment’a --kubelet-insecure-tls argümanını eklemen gerekebilir:

containers:
- name: metrics-server
  args:
  - --kubelet-insecure-tls

YAML’yi indirip düzenledikten sonra deploy etmen yeterli.


KEDA Kurulumu (Helm ile)

Öncelikle Helm repository ekleyelim ve KEDA’yı yükleyelim:

helm repo add kedacore https://kedacore.github.io/charts
helm repo update
helm install keda kedacore/keda \
  --namespace keda \
  --create-namespace \
  --version 2.17.1

Kurulum sonrası pod’ların durumunu kontrol edebilirsin:

kubectl get pods -n keda

Pod’lar Running olduktan sonra KEDA kullanıma hazırdır.


Örnek ScaledObject: CPU Temelli Otomatik Ölçekleme

apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: nginx-scaledobject
  namespace: echo-test  # <-- Uygulamanın bulunduğu namespace
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx-deployment  # <-- Ölçeklenecek Deployment adı
  minReplicaCount: 1
  maxReplicaCount: 6
  pollingInterval: 20       # Her 20 saniyede metrik kontrol edilir
  cooldownPeriod: 60        # Ölçeklendirme sonrası en az 60 saniye beklenir
  advanced:
    horizontalPodAutoscalerConfig:
      behavior:
        scaleUp:
          stabilizationWindowSeconds: 60
          policies:
          - type: Pods
            value: 1
            periodSeconds: 60
        scaleDown:
          stabilizationWindowSeconds: 60
          policies:
          - type: Pods
            value: 1
            periodSeconds: 60
  triggers:
    - type: cpu
      metadata:
        type: Utilization
        value: "75"  # %75 CPU kullanımına ulaşınca scale up

Prometheus Tabanlı Ölçekleme

KEDA, Prometheus üzerinden özel metriklerle de çalışabilir. Aşağıdaki örnek, belirli bir band genişliği değerine göre pod sayısını artırır:

apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: nginx-scaledobject
  namespace: echo-test
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx-deployment
  minReplicaCount: 1
  maxReplicaCount: 6
  pollingInterval: 20
  cooldownPeriod: 60
  advanced:
    horizontalPodAutoscalerConfig:
      behavior:
        scaleUp:
          stabilizationWindowSeconds: 60
          policies:
          - type: Pods
            value: 1
            periodSeconds: 60
        scaleDown:
          stabilizationWindowSeconds: 60
          policies:
          - type: Pods
            value: 1
            periodSeconds: 60
  triggers:
    - type: prometheus
      metadata:
        serverAddress: http://prometheus-server.monitoring.svc.cluster.local:80
        metricName: nginx_bandwidth_per_pod
        threshold: "12192"  # Byte/s gibi düşünülebilir
        query: |
          sum(rate(container_network_receive_bytes_total{namespace="echo-test", pod=~"nginx-deployment.*"}[5m]))

KEDA ile uygulamalarını CPU, özel Prometheus metrikleri ve birçok başka kaynakla birlikte esnek bir şekilde ölçeklendirebilirsin. Üstelik kurulumu oldukça basit, YAML tanımları da oldukça açık.

Uygulaman beklenenden fazla trafik almaya başladığında artık senin yerine otomatik olarak büyüyebilecek. Gerektiğinde de geri çekilecek.

Read more

Systemd ile Kendi Servisini Yaz: Flask ve Yedekleme Script’i Üzerinden Uygulamalı Rehber

Systemd ile Kendi Servisini Yaz: Flask ve Yedekleme Script’i Üzerinden Uygulamalı Rehber

Linux’ta çalışan bir script ya da uygulamayı sürekli aktif halde tutmak, hata durumunda yeniden başlatmak veya sistemi yeniden başlattığınızda otomatik olarak ayağa kaldırmak istiyorsanız systemd tam aradığınız şey. Bu rehberde hem bir Flask uygulamasını, hem de günlük çalışan basit bir yedekleme script’ini systemd servislerine dönüştüreceğiz. Gereksiz terimler yok,