KEDA (Kubernetes-based Event Driven Autoscaler) is een open-source project dat de autoscaling-mogelijkheden van Kubernetes uitbreidt voorbij de ingebouwde Horizontal Pod Autoscaler (HPA). Terwijl HPA geweldig is voor CPU- en geheugengebaseerde scaling, gaat KEDA een stap verder door je te laten schalen op basis van aangepaste metrics zoals wachtrijdiepte, API-verkeer of vrijwel elke metric die je kunt bedenken.

Dit maakt KEDA een echte game-changer:

  • Event-gedreven scaling: Reageer op echte gebeurtenissen, niet alleen op resourcegebruik
  • Van nul naar held: Schaal van nul pods wanneer er geen belasting is
  • Metric flexibiliteit: Gebruik metrics van verschillende bronnen zoals Prometheus, Azure Monitor, AWS CloudWatch en meer
  • Eenvoudige integratie: Werkt naadloos met bestaande Kubernetes-implementaties

Aan de slag met KEDA

Klaar om KEDA uit te proberen? Laten we het installatieproces doorlopen:

1. Installeer KEDA

Laten we eerst KEDA in je cluster installeren. Je kunt Helm gebruiken voor een snelle en eenvoudige installatie:


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

Of, als je de voorkeur geeft aan de YAML-methode:


kubectl apply -f https://github.com/kedacore/keda/releases/download/v2.8.1/keda-2.8.1.yaml

2. Definieer een ScaledObject

Nu komt het leuke gedeelte - bepalen hoe je wilt schalen. KEDA gebruikt een aangepaste resource genaamd ScaledObject om het schaalgedrag te bepalen. Hier is een voorbeeld dat een deployment schaalt op basis van het aantal berichten in een RabbitMQ-wachtrij:


apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: rabbitmq-scaledobject
  namespace: default
spec:
  scaleTargetRef:
    deploymentName: my-deployment
  pollingInterval: 15
  cooldownPeriod:  30
  maxReplicaCount: 30
  triggers:
  - type: rabbitmq
    metadata:
      queueName: myqueue
      host: amqp://guest:[email protected]:5672/
      queueLength: "5"

Dit ScaledObject vertelt KEDA om de "my-deployment" deployment te schalen op basis van de lengte van de "myqueue" RabbitMQ-wachtrij. Wanneer er meer dan 5 berichten in de wachtrij staan, zal KEDA beginnen met het opschalen van de deployment.

KEDA in actie: Praktische scenario's

Laten we enkele praktische toepassingen verkennen waar KEDA uitblinkt:

Scenario 1: API-verkeer schalen

Stel je voor dat je een API hebt die sporadische verkeerspieken ervaart. Met KEDA kun je schalen op basis van het aantal inkomende verzoeken:


apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: api-scaler
spec:
  scaleTargetRef:
    deploymentName: api-deployment
  triggers:
  - type: prometheus
    metadata:
      serverAddress: http://prometheus.monitoring:9090
      metricName: http_requests_total
      threshold: "100"
      query: sum(rate(http_requests_total{job="api-gateway"}[2m]))

Deze setup schaalt je API-deployment wanneer de snelheid van inkomende verzoeken meer dan 100 per seconde bedraagt over een periode van 2 minuten.

Scenario 2: Batch job verwerking

Voor batchverwerkingsjobs kun je werknemers schalen op basis van het aantal openstaande taken:


apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: batch-job-scaler
spec:
  scaleTargetRef:
    deploymentName: batch-worker
  triggers:
  - type: postgresql
    metadata:
      connectionFromEnv: POSTGRES_CONNECTION
      query: "SELECT COUNT(*) FROM jobs WHERE status='pending'"
      targetQueryValue: "10"

Dit ScaledObject schaalt de batch-worker deployment op basis van het aantal openstaande jobs in een PostgreSQL-database.

Pro Tips voor KEDA Meesterschap

Als je aan je KEDA-reis begint, houd dan deze tips in gedachten:

  1. Begin klein: Begin met een niet-kritieke workload om vertrouwd te raken met het gedrag van KEDA.
  2. Monitor nauwkeurig: Houd je schaalpatronen in de gaten om je triggers te verfijnen.
  3. Combineer met HPA: KEDA kan samenwerken met HPA voor nog flexibelere scaling.
  4. Gebruik scaling jobs voor kostenoptimalisatie: KEDA kan deployments naar nul schalen wanneer er geen werk is, wat je geld bespaart.
  5. Verken aangepaste scalers: Als de ingebouwde scalers niet aan je behoeften voldoen, kun je aangepaste scalers maken.

Potentiële valkuilen: Let op je stappen!

Hoewel KEDA krachtig is, zijn er een paar dingen om op te letten:

  • Te agressief schalen: Zorg ervoor dat je cooldown-periodes geschikt zijn om snel op- en afschalen te voorkomen.
  • Betrouwbaarheid van metrics: Zorg ervoor dat je schaalmetrics betrouwbaar zijn en bestand tegen kortetermijnschommelingen.
  • Resource limieten: Vergeet niet om resourceverzoeken en limieten op je pods in te stellen om uitputting van clusterresources te voorkomen.
"Met grote schaalkracht komt grote verantwoordelijkheid." - Oom Ben, als hij een DevOps-ingenieur was

De toekomst van autoscaling: Wat is de volgende stap voor KEDA?

KEDA is actief in ontwikkeling, met nieuwe functies en verbeteringen in het vooruitzicht. Enkele spannende gebieden om in de gaten te houden:

  • Verbeterde ondersteuning voor meer cloud-native eventbronnen
  • Verbeterde integratie met servicemeshes
  • Geavanceerde voorspellingsgebaseerde schaalalgoritmen

Houd de KEDA GitHub-repository in de gaten voor de laatste updates en functies.

Afronding: Is KEDA geschikt voor jou?

KEDA brengt een nieuw niveau van flexibiliteit en responsiviteit naar Kubernetes autoscaling. Als je toepassingen te maken hebben met variabele workloads, event-gedreven architecturen, of schaalvergroting op basis van aangepaste metrics vereisen, kan KEDA het ontbrekende stuk in je Kubernetes-puzzel zijn.

Onthoud, autoscaling is net zo goed een kunst als een wetenschap. Begin met experimenteren met KEDA in een gecontroleerde omgeving, monitor het gedrag nauwkeurig en werk je schaalstrategieën bij. Voor je het weet, heb je een Kubernetes-cluster dat als een droom schaalt, reagerend op de eb en vloed van je workloads met gracieuze efficiëntie.

Dus, ben je klaar om je Kubernetes autoscaling naar een hoger niveau te tillen? Probeer KEDA en zie hoe je cluster een slanke, efficiënte schaalmachine wordt!

Verder lezen

Veel plezier met schalen, Kubernetes-enthousiastelingen!