Skip to content

KEDA values#

Values under hw-keda configure KEDA and its HTTP add-on, the autoscaler of Standard-mode model deployments: it scales them on CPU and memory, on the requests at the gateway and on the vLLM engine metrics, and scales them to zero when idle. The subchart is installed when hopsworks.variables.kube_keda_installed is true (the default), which also tells the Hopsworks backend to offer KEDA-backed scaling; without it, Standard-mode deployments fall back to KServe's own Horizontal Pod Autoscaler on CPU and memory. See How To Configure Scaling For A Deployment for what deployments can do with it.

Generated from the Hopsworks Helm chart 5.2.1 (Hopsworks 5.2.1).

Deployed according to the first of these values that is set: hopsworks.variables.kube_keda_installed, global._hopsworks.full_platform.

Upstream charts

  • Values under hw-keda.keda go to keda 2.21.0 from https://kedacore.github.io/charts.

Only the values Hopsworks sets under hw-keda.keda are listed on this page. Any other value of the chart can be set there too; the link opens its documentation for the version Hopsworks pins.

General#

Defaults as YAML
hw-keda:
  hopsworkslib: {}
  keda:
    certificates:
      autoGenerated: true
      secretName: kedaorg-certs
    crds:
      install: false
    image:
      keda:
        registry: docker.hops.works/ghcr.io
        repository: kedacore/keda
      metricsApiServer:
        registry: docker.hops.works/ghcr.io
        repository: kedacore/keda-metrics-apiserver
      pullPolicy: IfNotPresent
      webhooks:
        registry: docker.hops.works/ghcr.io
        repository: kedacore/keda-admission-webhooks
    networkPolicy:
      enabled: false
    podAnnotations:
      keda:
        prometheus.io/path: /metrics
        prometheus.io/port: '8080'
        prometheus.io/scrape: 'true'
    prometheus:
      operator:
        enabled: true
        port: 8080
    watchNamespace: ''
  keda-add-ons-http:
    crds:
      install: false
    images:
      interceptor: docker.hops.works/ghcr.io/kedacore/http-add-on-interceptor
      operator: docker.hops.works/ghcr.io/kedacore/http-add-on-operator
      scaler: docker.hops.works/ghcr.io/kedacore/http-add-on-scaler
    interceptor:
      pullPolicy: IfNotPresent
      readinessTimeout: 600s
      replicas:
        max: 10
        min: 1
      requestTimeout: 600s
      resources:
        limits:
          cpu: '1'
          memory: 256Mi
        requests:
          cpu: 250m
          memory: 64Mi
      responseHeaderTimeout: 600s
    operator:
      pullPolicy: IfNotPresent
    podSecurityContext:
      fsGroup: 1000
      runAsNonRoot: true
      seccompProfile:
        type: RuntimeDefault
      supplementalGroups:
      - 1000
    scaler:
      pullPolicy: IfNotPresent
      replicas: 1
    securityContext:
      allowPrivilegeEscalation: false
      capabilities:
        drop:
        - ALL
      privileged: false
      readOnlyRootFilesystem: true
      runAsNonRoot: true
      seccompProfile:
        type: RuntimeDefault
hw-keda #
Type object, default {}. override hw-keda values
hw-keda.hopsworkslib #
Type object, default {}. override hopsworkslib values
hw-keda.keda #

Type object, passed to the keda 2.21.0 chart, whose other values are documented there. override keda values. Everything not restated here is the upstream default: https://github.com/kedacore/charts/blob/main/keda/values.yaml

Default
certificates:
  autoGenerated: true
  secretName: kedaorg-certs
crds:
  install: false
image:
  keda:
    registry: docker.hops.works/ghcr.io
    repository: kedacore/keda
  metricsApiServer:
    registry: docker.hops.works/ghcr.io
    repository: kedacore/keda-metrics-apiserver
  pullPolicy: IfNotPresent
  webhooks:
    registry: docker.hops.works/ghcr.io
    repository: kedacore/keda-admission-webhooks
networkPolicy:
  enabled: false
podAnnotations:
  keda:
    prometheus.io/path: /metrics
    prometheus.io/port: '8080'
    prometheus.io/scrape: 'true'
prometheus:
  operator:
    enabled: true
    port: 8080
watchNamespace: ''
hw-keda.keda-add-ons-http #

Type object. override keda-add-ons-http values (the KEDA HTTP add-on, HWORKS-3113, always installed with KEDA). Everything not restated here is the upstream default: https://github.com/kedacore/charts/blob/main/http-add-on/values.yaml

Default
crds:
  install: false
images:
  interceptor: docker.hops.works/ghcr.io/kedacore/http-add-on-interceptor
  operator: docker.hops.works/ghcr.io/kedacore/http-add-on-operator
  scaler: docker.hops.works/ghcr.io/kedacore/http-add-on-scaler
interceptor:
  pullPolicy: IfNotPresent
  readinessTimeout: 600s
  replicas:
    max: 10
    min: 1
  requestTimeout: 600s
  resources:
    limits:
      cpu: '1'
      memory: 256Mi
    requests:
      cpu: 250m
      memory: 64Mi
  responseHeaderTimeout: 600s
operator:
  pullPolicy: IfNotPresent
podSecurityContext:
  fsGroup: 1000
  runAsNonRoot: true
  seccompProfile:
    type: RuntimeDefault
  supplementalGroups:
  - 1000
scaler:
  pullPolicy: IfNotPresent
  replicas: 1
securityContext:
  allowPrivilegeEscalation: false
  capabilities:
    drop:
    - ALL
  privileged: false
  readOnlyRootFilesystem: true
  runAsNonRoot: true
  seccompProfile:
    type: RuntimeDefault

cleanupOnUninstall#

Defaults as YAML
hw-keda:
  cleanupOnUninstall:
    deleteCrds: true
    enabled: true
    finalizeTimeoutSeconds: 120
    imagePullPolicy: IfNotPresent
    nodeSelector: {}
    resources:
      limits:
        cpu: 200m
        memory: 256Mi
      requests:
        cpu: 50m
        memory: 64Mi
    tolerations: []
    ttlSecondsAfterFinished: null
hw-keda.cleanupOnUninstall #

Type object. uninstall cleanup of what KEDA leaves behind that Helm never tracked. The keda.sh custom resources KServe and Hopsworks created in the project namespaces carry a finalizer only the operator can clear, and Helm deletes the operator before the CRDs, so without this hook every keda.sh CRD stays Terminating, the next install fails on it, and an uninstall that waits for deletion (helm's wait flag, Argo CD) never finishes. It runs pre-delete (deleting the custom resources while the operators can still finalize them) and post-delete (the operator's runtime TLS Secret, leftovers).

Default
deleteCrds: true
enabled: true
finalizeTimeoutSeconds: 120
imagePullPolicy: IfNotPresent
nodeSelector: {}
resources:
  limits:
    cpu: 200m
    memory: 256Mi
  requests:
    cpu: 50m
    memory: 64Mi
tolerations: []
ttlSecondsAfterFinished: null
hw-keda.cleanupOnUninstall.deleteCrds #
Type bool, default true. also delete the keda.sh, http.keda.sh and eventing.keda.sh CRDs in the post-delete pass. They ship in crds/, which Helm never deletes, so without this an uninstall leaves the CRD definitions on the cluster. Only the definitions: both passes delete every object of those kinds first, whatever this is set to, since objects left under a finalizer with no operator block the CRDs. Off to keep the definitions for a KEDA installed by other means next; the Hopsworks backend recreates its ScaledObjects when a deployment starts
hw-keda.cleanupOnUninstall.enabled #
Type bool, default true. enable the KEDA cleanup hook, which runs before the release's resources are deleted (deleting the keda.sh custom resources while their operators can still finalize them, so the CRDs are not left Terminating and an uninstall that waits for deletion, with helm's wait flag or under Argo CD, finishes) and again after (the operator's runtime TLS Secret, anything created in between)
hw-keda.cleanupOnUninstall.finalizeTimeoutSeconds #
Type int, default 120. seconds the pre-delete pass waits for the operators to finalize the deleted custom resources before clearing the finalizers itself
hw-keda.cleanupOnUninstall.imagePullPolicy #
Type string, default "IfNotPresent". pull policy of the toolbox image the cleanup Job runs; global._hopsworks.imagePullPolicy takes precedence when set
hw-keda.cleanupOnUninstall.nodeSelector #
Type object, default {}. nodeSelector of the cleanup Job; falls back to global._hopsworks.nodeSelector
hw-keda.cleanupOnUninstall.resources #

Type object. resources of the cleanup Job container. kubectl fetches each shipped CRD by name (the biggest, scaledjobs.keda.sh, is 668 KB) and lists the objects under it, never the whole CRD list

Default
limits:
  cpu: 200m
  memory: 256Mi
requests:
  cpu: 50m
  memory: 64Mi
hw-keda.cleanupOnUninstall.tolerations #
Type list, default []. tolerations of the cleanup Job; fall back to global._hopsworks.tolerations
hw-keda.cleanupOnUninstall.ttlSecondsAfterFinished #
Type string, default nil. TTL in seconds for the cleanup Job. Overrides the global default.

crdUpgradeJob#

Defaults as YAML
hw-keda:
  crdUpgradeJob:
    enabled: true
    imagePullPolicy: IfNotPresent
    nodeSelector: {}
    resources:
      limits:
        cpu: 200m
        memory: 256Mi
      requests:
        cpu: 50m
        memory: 64Mi
    tolerations: []
    ttlSecondsAfterFinished: null
hw-keda.crdUpgradeJob #

Type object. the pre-upgrade hook that keeps the KEDA and HTTP add-on CRDs current. They ship in crds/ rather than as templates (the ScaledJob CRD alone is 670 KB, which would put the Helm release secret over its 1 MiB limit), and Helm only creates crds/ on install and never touches it on upgrade, so this Job applies the same CRD files server-side on every upgrade, creating them on a release upgraded from a chart without this subchart and patching them on a KEDA bump.

Default
enabled: true
imagePullPolicy: IfNotPresent
nodeSelector: {}
resources:
  limits:
    cpu: 200m
    memory: 256Mi
  requests:
    cpu: 50m
    memory: 64Mi
tolerations: []
ttlSecondsAfterFinished: null
hw-keda.crdUpgradeJob.enabled #
Type bool, default true. apply the shipped CRDs on upgrade
hw-keda.crdUpgradeJob.imagePullPolicy #
Type string, default "IfNotPresent". pull policy of the toolbox image the Job runs; global._hopsworks.imagePullPolicy takes precedence when set
hw-keda.crdUpgradeJob.nodeSelector #
Type object, default {}. nodeSelector of the Job; falls back to global._hopsworks.nodeSelector
hw-keda.crdUpgradeJob.resources #

Type object. resources of the Job container

Default
limits:
  cpu: 200m
  memory: 256Mi
requests:
  cpu: 50m
  memory: 64Mi
hw-keda.crdUpgradeJob.tolerations #
Type list, default []. tolerations of the Job; fall back to global._hopsworks.tolerations
hw-keda.crdUpgradeJob.ttlSecondsAfterFinished #
Type string, default nil. TTL in seconds for the CRD upgrade Job. Overrides the global default.