Das KEDA Helm Chart ist der offizielle Weg, KEDA – den Kubernetes Event-Driven Autoscaler – in Ihrem Cluster zu installieren. Ein einziges helm install stellt alles bereit, was KEDA braucht, um Ihre Workloads ereignisbasiert zu skalieren: den Operator, den Metrics Server, die Admission Webhooks und die Custom Resources, mit denen Sie Ihre Skalierungsregeln definieren.
Dieser Leitfaden behandelt das Chart im Detail. Sie erfahren, was es installiert, wie Sie es einrichten und verifizieren, welche values.yaml-Parameter wichtig sind, wie Sie KEDA hochverfügbar betreiben, wie Sie es absichern und überwachen, wie Sie es per GitOps verwalten und wie Sie es aktualisieren oder deinstallieren, ohne defekte Ressourcen zurückzulassen.
Was ist das KEDA Helm Chart?
KEDA skaliert Ihre Pods auf Basis von Events – etwa der Länge einer Queue, dem Lag eines Kafka-Topics, der Anzahl von HTTP-Requests oder einem Cron-Zeitplan. Der eingebaute Horizontal Pod Autoscaler (HPA) kann nur nach CPU und Arbeitsspeicher skalieren. KEDA ergänzt all diese Event-Quellen und kann einen Workload zudem auf null Pods herunterskalieren, wenn nichts zu tun ist.
KEDA ersetzt den HPA nicht. Es liest Ihre Event-Quelle aus und erstellt einen HPA, der die eigentliche Skalierung übernimmt und dabei mit externen Metriken versorgt wird. Was skaliert werden soll, beschreiben Sie in einer Custom Resource namens ScaledObject.
Das Helm Chart installiert KEDA und seine unterstützenden Komponenten in einem Schritt – deshalb ist es der empfohlene Weg für das Deployment.
Was das Chart in Ihrem Cluster installiert
Wenn Sie das KEDA Helm Chart in Ihrem Cluster installieren, werden folgende Komponenten eingerichtet:
a. KEDA Operator: Der zentrale Controller in KEDA. Er überwacht Ihre ScaledObject- und ScaledJob-Ressourcen und verwaltet den HPA, der die Skalierung übernimmt. Er ist das Herzstück von KEDA.
b. Metrics API Server: Stellt Ihre eventbasierten Metriken über die API external.metrics.k8s.io für Kubernetes bereit. So kann der HPA anhand von Werten wie der Queue-Länge skalieren – nicht nur nach CPU oder Arbeitsspeicher.
c. Admission Webhooks: Sie validieren Ihre KEDA-Ressourcen bereits beim Erstellen. Konfigurationsfehler werden so früh erkannt, etwa wenn zwei ScaledObject-Ressourcen denselben Workload skalieren wollen.
Zusätzlich installiert das Chart die CRDs, die die KEDA-Ressourcentypen hinzufügen, mit denen Sie arbeiten: ScaledObject, ScaledJob, TriggerAuthentication und ClusterTriggerAuthentication. Außerdem richtet es die RBAC-Berechtigungen ein, die diese Komponenten benötigen.

Voraussetzungen und Versionskompatibilität
Prüfen Sie vor der Installation von KEDA die folgenden Voraussetzungen und Versionsanforderungen:
a. KEDA 2.20 erfordert Kubernetes 1.30 oder neuer – prüfen Sie also zunächst Ihre Cluster-Version mit kubectl version. Außerdem benötigen Sie Helm 3, denn das KEDA Chart unterstützt ausschließlich Helm 3.
b. Stellen Sie sicher, dass Ihr Cluster über genügend freie Ressourcen verfügt, um die KEDA-Komponenten auszuführen. Das Chart bezieht seine Container-Images von ghcr.io, Ihre Nodes brauchen also Netzwerkzugriff auf die Image-Registry.
c. Der KEDA Metrics Server erstellt zudem einen clusterweiten APIService. Eventuelle Network Policies im Namespace keda müssen den von KEDA benötigten Traffic zulassen. Wenn Ihr Cluster stark abgeschottet oder air-gapped ist, stellen Sie vor der Installation sicher, dass der erforderliche Netzwerkzugriff und die Images verfügbar sind.
Das KEDA Helm Chart installieren
Fügen Sie zunächst das offizielle KEDA-Repository hinzu und aktualisieren Sie es:
helm repo add kedacore https://kedacore.github.io/chartshelm repo updateInstallieren Sie in einen dedizierten Namespace und pinnen Sie die Chart-Version, statt einfach die jeweils neueste zu nehmen:
helm install keda kedacore/keda \ --namespace keda \ --create-namespace \ --version <chart-version>Das Pinnen der Version ist wichtig, weil die Chart-Version einer bestimmten KEDA-App-Version entspricht – und Sie wollen genau die Version einsetzen, die Sie getestet haben. Verfügbare Versionen sehen Sie mit helm search repo kedacore/keda --versions.
Verifizieren Sie nach der Installation die drei Komponenten, die einwandfrei laufen müssen. Prüfen Sie, ob die Pods laufen:
kubectl get pods -n kedaBestätigen Sie anschließend, dass die CRDs vorhanden sind und der APIService für externe Metriken registriert und verfügbar ist:
kubectl get crd | grep keda.shkubectl get apiservice v1beta1.external.metrics.k8s.ioWenn die Pods laufen und der APIService bei Available True anzeigt, ist KEDA korrekt installiert.
Weitere Möglichkeiten, KEDA zu deployen
Das Helm Chart ist der empfohlene Weg, KEDA zu installieren – aber nicht der einzige. Die richtige Wahl hängt davon ab, wie Sie Ihr Cluster verwalten. Diese Alternativen gibt es:
a. OpenShift: Sie können KEDA über den OperatorHub und den Operator Lifecycle Manager (OLM) installieren. Dann verwaltet OLM den KEDA Operator und seine Upgrades statt Helm.
b. Reine YAML-Manifeste: Wenn Sie kein Helm einsetzen können, stellt KEDA für jedes Release YAML-Manifeste bereit, die Sie mit kubectl apply anwenden. Bei diesem Ansatz verwalten Sie CRDs und Upgrades selbst.
c. MicroK8s: KEDA ist als integriertes Add-on verfügbar, das Sie mit einem einzigen Befehl aktivieren können.
Unabhängig von der gewählten Methode sind die zentralen KEDA-Komponenten und CRDs identisch. Der Hauptunterschied liegt darin, wie KEDA paketiert und verwaltet wird.
Wichtige Parameter in values.yaml
Diese Parameter in values.yaml sollten Sie kennen:
a. Image-Registries, -Repositories und -Tags: Jede KEDA-Komponente (image.keda, image.metricsApiServer und image.webhooks) hat eine eigene Registry, ein eigenes Repository und einen eigenen Tag. Lassen Sie den Tag leer, verwendet das Chart die KEDA-App-Version. In restriktiven Umgebungen können Sie hier Ihre eigene Image-Registry oder einen Mirror eintragen.
b. crds.install und CRD-Ownership: Standardmäßig installiert und verwaltet das Chart die CRDs. Wenn ein anderes Tool – etwa ein GitOps-Tool – sie bereits verwaltet, setzen Sie crds.install: false, damit nicht zwei Systeme versuchen, dieselben CRDs zu verwalten.
c. watchNamespace und Namespace-Scope: Standardmäßig überwacht KEDA alle Namespaces. Mit watchNamespace beschränken Sie KEDA auf einen bestimmten Namespace. Das kann in einem gemeinsam genutzten Cluster nützlich sein, wenn Sie einschränken wollen, wo KEDA aktiv ist.
d. Resource Requests und Limits: Über resources.operator, resources.metricServer und resources.webhooks können Sie die Ressourcen für Operator, Metrics Server und Webhooks separat festlegen. Setzen Sie angemessene Requests und Limits, damit KEDA auch dann zuverlässig läuft, wenn das Cluster unter Last steht.
KEDA für Hochverfügbarkeit konfigurieren
In der Produktion soll KEDA nicht ausfallen, nur weil ein Node wegfällt. Betreiben Sie die Komponenten mit mehreren Replicas und verteilen Sie diese auf verschiedene Nodes.
Der Operator unterstützt mehrere Replicas über operator.replicaCount. Er nutzt Leader Election: Nur eine Operator-Instanz ist jeweils aktiv, während die anderen bei Bedarf übernehmen können.
Auch der Metrics API Server kann über metricsServer.replicaCount mit mehreren Replicas laufen. Das hilft, externe Metriken verfügbar zu halten, wenn eine Replica ausfällt.
Nutzen Sie außerdem Pod Anti-Affinity, um Replicas auf verschiedene Nodes zu verteilen, sowie ein PodDisruptionBudget (PDB), damit ein Node Drain nicht alle Replicas gleichzeitig trifft.
Eine produktionsreife values.yaml kann so aussehen:
operator: replicaCount: 2metricsServer: replicaCount: 2podDisruptionBudget: operator: minAvailable: 1 metricServer: minAvailable: 1affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: topologyKey: kubernetes.io/hostname labelSelector: matchLabels: app: keda-operatorHTTP- und TLS-Einstellungen der Scaler anpassen
Viele KEDA Scaler verbinden sich über HTTP mit externen Systemen. In einer stark abgesicherten Umgebung müssen Sie diese Verbindungen unter Umständen genauer steuern. KEDA bietet Einstellungen für HTTP-, TLS- und Proxy-Verbindungen:
a. HTTP-Timeout: KEDA_HTTP_DEFAULT_TIMEOUT legt das Standard-Timeout für Scaler fest, die den eingebauten HTTP-Client von KEDA nutzen. Der Wert wird in Millisekunden angegeben. Einige Scaler verwenden eigene Vendor-SDKs, für diese gilt die Einstellung nicht.
b. Minimale TLS-Version: KEDA_HTTP_MIN_TLS_VERSION legt die minimale TLS-Version für ausgehende HTTP-Verbindungen von KEDA fest. KEDA_SERVICE_MIN_TLS_VERSION bestimmt die minimale TLS-Version für KEDAs eigene TLS-Dienste, etwa die Webhook- und gRPC-Services. Der Standard ist TLS 1.3.
c. TLS-Cipher-Liste: Mit KEDA_HTTP_TLS_CIPHER_LIST können Sie einschränken, welche TLS-Ciphers KEDA verwenden darf. Diese Einstellung wirkt jedoch nicht auf TLS 1.3, da die Go-TLS-Bibliothek eine Konfiguration dieser Ciphers für TLS 1.3 nicht erlaubt.
d. HTTP- und HTTPS-Proxy: Muss sich KEDA über einen Unternehmens-Proxy mit externen Systemen verbinden, konfigurieren Sie die Standard-Umgebungsvariablen HTTP_PROXY, HTTPS_PROXY und NO_PROXY am KEDA Operator.
Die Installation absichern
Zwei Einstellungen können die Sicherheit von KEDA in der Produktion erhöhen: eingeschränkter Zugriff auf Secrets und das Zertifikatsmanagement. Im Einzelnen:
a. Zugriff auf Secrets einschränken: Standardmäßig kann KEDA Secrets in allen überwachten Namespaces lesen. Über die permissions.operator-Einstellungen lässt sich dieser Zugriff so beschränken, dass der Operator nur Secrets in seinem eigenen Release-Namespace oder nur bestimmte, namentlich genannte Secrets lesen darf. Das reduziert die Angriffsfläche, falls der Operator kompromittiert wird.
b. Zertifikate verwalten: KEDA erzeugt eigene selbstsignierte Zertifikate, speichert sie in einem Secret namens kedaorg-certs und mountet sie in seine Komponenten. KEDA rotiert diese Zertifikate automatisch und aktualisiert die erforderlichen Kubernetes-Ressourcen, damit sie vertrauenswürdig bleiben.
c. Wenn Ihre Organisation Zertifikate einer verwalteten Zertifizierungsstelle vorschreibt, aktivieren Sie certificates.certManager.enabled, damit cert-manager die Zertifikate ausstellt und rotiert statt KEDA. Für die meisten Installationen reichen die automatisch erzeugten Zertifikate aus.
Das Chart per GitOps deployen
Wenn Sie Ihr Cluster mit Argo CD oder Flux verwalten, können Sie das KEDA Chart per GitOps deployen. Besondere Sorgfalt erfordern dabei vor allem die CRDs.
Die CRDs von KEDA sind groß, und ein normales Kubernetes-Apply kann fehlschlagen, weil die generierte Annotation zu groß wird. Konfigurieren Sie Ihr GitOps-Tool deshalb so, dass es die CRDs ersetzt, statt sie zu mergen. In Flux: Setzen Sie crds: CreateReplace im HelmRelease. In Argo CD: Verwenden Sie Replace=true oder Server-Side Apply für die CRDs, damit sie korrekt angewendet werden.
Sind die CRDs falsch konfiguriert, kann die GitOps-verwaltete KEDA-Installation fehlschlagen.
Alternativ können Sie das Chart mit helm template in reguläre Kubernetes-YAML-Dateien rendern und diese in Git committen, wenn Ihr Workflow gerenderte Manifeste einem Live-Helm-Release vorzieht.
Welchen Ansatz Sie auch wählen: Halten Sie das Label app.kubernetes.io/managed-by konsistent, damit Ihr GitOps-Tool und Helm nicht um die Ownership der Ressourcen konkurrieren.
Ihr erstes ScaledObject nach der Installation
Mit installiertem KEDA können Sie über ein ScaledObject verifizieren, dass KEDA tatsächlich einen Workload skalieren kann. Das folgende Beispiel nutzt einen Cron-Trigger und benötigt daher kein externes System. Es skaliert ein Deployment während eines geplanten Zeitfensters hoch und danach wieder herunter.
Erstellen Sie zunächst ein Deployment, das skaliert werden soll, und wenden Sie dann das ScaledObject an:
apiVersion: keda.sh/v1alpha1kind: ScaledObjectmetadata: name: nginx-cron namespace: defaultspec: scaleTargetRef: name: nginx pollingInterval: 30 cooldownPeriod: 300 minReplicaCount: 0 maxReplicaCount: 5 triggers: - type: cron metadata: timezone: Asia/Kolkata start: 0 9 * * * end: 0 17 * * * desiredReplicas: "5"pollingInterval legt fest, wie oft KEDA den Trigger prüft (in Sekunden). minReplicaCount: 0 aktiviert Scale-to-Zero. Außerhalb des 9-bis-17-Uhr-Fensters kann das Deployment auf null Pods herunterskalieren. Während des geplanten Zeitfensters skaliert es auf fünf Replicas hoch.
Wenden Sie das ScaledObject an und prüfen Sie, was KEDA erstellt hat:
kubectl get scaledobjectkubectl get hpaSie sollten einen HPA namens keda-hpa-nginx-cron sehen. KEDA erstellt und verwaltet diesen HPA, der die eigentliche Skalierung übernimmt. Das bestätigt, dass KEDA mit dem Workload verbunden ist und die zeitgesteuerte Skalierung funktioniert.

Die KEDA-Installation überwachen
Sobald KEDA läuft, sollten Sie prüfen, ob es fehlerfrei arbeitet und sich wie erwartet verhält.
KEDA stellt Prometheus-Metriken für den Operator und den Metrics Server bereit. Diese Metriken zeigen Scaler-Aktivität, Fehler und die von KEDA gemeldeten Werte.
Wenn Sie den Prometheus Operator einsetzen, kann das KEDA Chart einen ServiceMonitor für den Metrics Server und einen PodMonitor für den Operator anlegen. Sie aktivieren dies über die prometheus-Einstellungen in values.yaml, damit Prometheus die Metriken automatisch erfasst.
Auch die Operator-Logs sind hilfreich, wenn ein bestimmtes ScaledObject nicht wie erwartet funktioniert. Sie zeigen, wie der Scaler seinen Trigger ausliest und welche Fehler dabei auftreten.
Die Operator-Logs sehen Sie mit:
kubectl logs -n keda deploy/keda-operatorRight-Sizing der Workloads, die KEDA skaliert
KEDA kann die Anzahl der Pods sehr gut am Bedarf ausrichten. Aber es entscheidet nicht, wie viel CPU und Arbeitsspeicher jeder Pod anfordern sollte.
Mehr Replicas beheben keine falschen Resource Requests. Wenn jeder Pod deutlich mehr CPU oder Arbeitsspeicher anfordert, als er tatsächlich nutzt, vervielfacht KEDA diese Verschwendung mit jeder zusätzlichen Replica. Fordert jeder Pod zu wenig an, werden neue Replicas bei steigendem Traffic womöglich OOMKilled oder CPU-gedrosselt.
Hier helfen Tools zur Ressourcenoptimierung. PerfectScale beobachtet, wie Workloads CPU und Arbeitsspeicher tatsächlich nutzen, und liefert automatisierte Right-Sizing-Empfehlungen, die Sie manuell oder automatisch anwenden können.
In Kombination mit KEDA erhalten Sie beide Seiten des Autoscalings: KEDA passt die Anzahl der Pods an die Nachfrage an, während PerfectScale dafür sorgt, dass jeder Pod die richtige Menge an CPU und Arbeitsspeicher erhält. So lässt sich Over-Provisioning vermeiden, ohne die Zuverlässigkeit der Workloads zu gefährden. Probieren Sie es aus oder buchen Sie eine technische Session.
Andere Tools wie der Vertical Pod Autoscaler (VPA), der Resource Requests anhand der Nutzung anpassen kann, Goldilocks, das VPA-Empfehlungen visualisiert, und Karpenter konzentrieren sich auf die Auswahl und Verwaltung der Nodes, auf denen Ihre Workloads laufen.

Das Chart aktualisieren und deinstallieren
Beim Upgrade oder der Deinstallation von KEDA gibt es einige wichtige Punkte zu beachten.
Um KEDA zu aktualisieren, aktualisieren Sie zunächst das Helm-Repository und führen dann das Upgrade auf eine gepinnte Chart-Version durch:
helm repo updatehelm upgrade keda kedacore/keda --namespace keda --version <new-chart-version>Worauf Sie beim Upgrade achten müssen, sind die CRDs. Da das Chart sie verwaltet, aktualisiert ein helm upgrade sie zusammen mit allem anderen. KEDA-Minor-Versionen ändern jedoch gelegentlich CRD-Felder oder das Scaler-Verhalten. Lesen Sie daher vor dem Upgrade eines Produktionsclusters die Release Notes und prüfen Sie, ob die neue KEDA-Version Ihre Kubernetes-Version noch unterstützt.
Auch die Deinstallation von KEDA erfordert Sorgfalt, da sonst Ressourcen zurückbleiben können.
Löschen Sie zuerst die ScaledObject- und ScaledJob-Ressourcen:
kubectl delete scaledobject --all --all-namespaceskubectl delete scaledjob --all --all-namespacesDeinstallieren Sie dann das Helm-Release:
helm uninstall keda --namespace kedaWenn Sie die ScaledObject- und ScaledJob-Ressourcen zuerst löschen, kann KEDA die von ihm erstellten HPAs aufräumen. Außerdem können Workloads, die auf null skaliert wurden, wieder auf ihre normale Replica-Anzahl zurückkehren, bevor KEDA entfernt wird.
Bleibt eine Ressource wegen eines Finalizers beim Löschen hängen, können Sie den Finalizer so entfernen:
kubectl patch scaledobject <name> -p '{"metadata":{"finalizers":null}}' --type=mergeHäufige Probleme mit dem Chart beheben
Wenn KEDA nicht wie erwartet skaliert, sollten Sie zwei häufige Probleme prüfen:
a. Die External Metrics API ist nicht verfügbar oder die TLS-Verifizierung schlägt fehl: Zeigt kubectl get apiservice v1beta1.external.metrics.k8s.io nicht Available, kann der HPA keine externen Metriken abrufen – und Workloads können nicht auf deren Basis skalieren. Häufige Ursachen sind ein fehlerhafter Metrics Server, eine NetworkPolicy, die den Traffic blockiert, oder ein Proxy, der die Verbindung zwischen Kubernetes API Server und Metrics Server stört. Prüfen Sie zuerst den Metrics-Server-Pod. Wenn Sie einen Proxy verwenden, stellen Sie sicher, dass die Cluster-IP des Metrics Servers in der no_proxy-Liste des API Servers enthalten ist.
b. Ein ScaledObject wurde erstellt, aber die Replicas ändern sich nicht: Beginnen Sie mit kubectl describe scaledobject <name> und prüfen Sie Status und Events. Sehen Sie sich dann die Logs des KEDA Operators an. Ursachen können ein falsch konfigurierter Trigger, fehlende Authentifizierung für die Event-Quelle oder ein bereits vorhandener HPA sein, der denselben Workload adressiert. Der bestehende HPA kann mit dem HPA in Konflikt geraten, den KEDA erstellt und verwaltet.
Best Practices für den Betrieb des KEDA Helm Charts
Die folgenden Praktiken helfen, eine KEDA-Installation stabil und sicher zu halten:
a. Pinnen Sie die Chart-Version und ordnen Sie sie einer getesteten KEDA-App-Version zu: Installieren oder aktualisieren Sie nicht einfach auf die jeweils neueste Version. Pinnen Sie das Chart, testen Sie die KEDA-Version und rollen Sie sie kontrolliert aus – so wissen Sie immer, was läuft.
b. Betreiben Sie KEDA in einem eigenen Namespace mit eigener Resource Quota: Ein dedizierter Namespace isoliert KEDA und macht es einfacher, ResourceQuota und NetworkPolicy gezielt auf KEDA anzuwenden.
c. Setzen Sie explizite Requests und Limits für alle drei KEDA-Komponenten: Legen Sie angemessene Ressourcen für Operator, Metrics Server und Webhooks fest, damit KEDA selbst nicht gedrosselt oder verdrängt wird, wenn das Cluster unter Last steht.
d. Nutzen Sie TriggerAuthentication statt Zugangsdaten direkt im ScaledObject: Halten Sie Zugangsdaten aus Ihren ScaledObject-Manifesten heraus, indem Sie auf eine TriggerAuthentication oder ClusterTriggerAuthentication verweisen. So landen Zugangsdaten nicht in der Versionskontrolle und lassen sich zudem wiederverwenden.
e. Kombinieren Sie ein ScaledObject nicht mit einem manuell erstellten HPA auf demselben Workload: Zwei Controller, die denselben Workload skalieren wollen, können in Konflikt geraten. Überlassen Sie KEDA die Verwaltung des HPA für Workloads, die KEDA skaliert.
f. Testen Sie Upgrades in einem Nicht-Produktionscluster, bevor Sie sie ausrollen: KEDA-Minor-Versionen können CRD-Änderungen enthalten. Testen Sie das Upgrade daher zuerst in einer sicheren Umgebung. So erkennen Sie Kompatibilitätsprobleme, bevor sie Produktions-Workloads treffen.