Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions http-add-on/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ their default values.
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `operator.affinity` | object | `{}` | Affinity for pod scheduling ([docs](https://kubernetes.io/docs/tasks/configure-pod-container/assign-pods-nodes-using-node-affinity/)) |
| `operator.image.tag` | string | `""` | The tag to use for the operator component image. If not set, the value from `images.tag` will be used. |
| `operator.imagePullSecrets` | list | `[]` | The image pull secrets for the operator component |
| `operator.kubeRbacProxy.resources.limits` | object | `{"cpu":"300m","memory":"200Mi"}` | The CPU/memory resource limit for the operator component's kube rbac proxy |
| `operator.kubeRbacProxy.resources.requests` | object | `{"cpu":"10m","memory":"20Mi"}` | The CPU/memory resource request for the operator component's kube rbac proxy |
Expand All @@ -133,6 +134,7 @@ their default values.
|-----------|------|---------|-------------|
| `scaler.affinity` | object | `{}` | Affinity for pod scheduling ([docs](https://kubernetes.io/docs/tasks/configure-pod-container/assign-pods-nodes-using-node-affinity/)) |
| `scaler.grpcPort` | int | `9090` | The port for the scaler's gRPC server. This is the server that KEDA will send scaling requests to. |
| `scaler.image.tag` | string | `""` | The tag to use for the scaler component image. If not set, the value from `images.tag` will be used. |
| `scaler.imagePullSecrets` | list | `[]` | The image pull secrets for the scaler component |
| `scaler.nodeSelector` | object | `{}` | Node selector for pod scheduling ([docs](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/)) |
| `scaler.pendingRequestsInterceptor` | int | `200` | The number of "target requests" that the external scaler will report to KEDA for the interceptor's scaling metrics. See the [KEDA external scaler documentation](https://keda.sh/docs/2.4/concepts/external-scalers/) for details on target requests. |
Expand All @@ -158,6 +160,7 @@ their default values.
| `interceptor.expectContinueTimeout` | string | `"1s"` | Special handling for responses with "Expect: 100-continue" response headers. see https://pkg.go.dev/net/http#Transport under the 'ExpectContinueTimeout' field for more details |
| `interceptor.forceHTTP2` | bool | `false` | Whether or not the interceptor should force requests to use HTTP/2 |
| `interceptor.idleConnTimeout` | string | `"90s"` | The timeout after which any idle connection is closed and removed from the interceptor's in-memory connection pool. |
| `interceptor.image.tag` | string | `""` | The tag to use for the interceptor component image. If not set, the value from `images.tag` will be used. |
| `interceptor.imagePullSecrets` | list | `[]` | The image pull secrets for the interceptor component |
| `interceptor.keepAlive` | string | `"1s"` | The interceptor's connection keep alive timeout |
| `interceptor.maxIdleConns` | int | `100` | The maximum number of idle connections allowed in the interceptor's in-memory connection pool. Set to 0 to indicate no limit |
Expand Down
4 changes: 2 additions & 2 deletions http-add-on/templates/interceptor/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ spec:
{{- end }}
{{- end }}
spec:
imagePullSecrets:
imagePullSecrets:
{{- toYaml .Values.interceptor.imagePullSecrets | nindent 8 }}
serviceAccountName: {{ .Chart.Name }}-interceptor
{{- if .Values.podSecurityContext.interceptor }}
Expand All @@ -44,7 +44,7 @@ spec:
{{- if .Values.logging.interceptor.stackTracesEnabled }}
- "--zap-stacktrace-level=error"
{{- end }}
image: "{{ .Values.images.interceptor }}:{{ .Values.images.tag | default .Chart.AppVersion }}"
image: "{{ .Values.images.interceptor }}:{{ coalesce .Values.interceptor.image.tag .Values.images.tag .Chart.AppVersion }}"
imagePullPolicy: '{{ .Values.interceptor.pullPolicy | default "Always" }}'
name: "{{ .Chart.Name }}-interceptor"
env:
Expand Down
4 changes: 2 additions & 2 deletions http-add-on/templates/operator/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ spec:
{{- end }}
{{- end }}
spec:
imagePullSecrets:
imagePullSecrets:
{{- toYaml .Values.operator.imagePullSecrets | nindent 8 }}
serviceAccountName: {{ .Chart.Name }}
{{- if .Values.podSecurityContext.operator }}
Expand Down Expand Up @@ -64,7 +64,7 @@ spec:
{{- if .Values.logging.operator.stackTracesEnabled }}
- "--zap-stacktrace-level=error"
{{- end }}
image: "{{ .Values.images.operator }}:{{ .Values.images.tag | default .Chart.AppVersion }}"
image: "{{ .Values.images.operator }}:{{ coalesce .Values.operator.image.tag .Values.images.tag .Chart.AppVersion }}"
imagePullPolicy: '{{ .Values.operator.pullPolicy | default "Always" }}'
name: "{{ .Chart.Name }}-operator"
env:
Expand Down
4 changes: 2 additions & 2 deletions http-add-on/templates/scaler/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ spec:
{{- end }}
{{- end }}
spec:
imagePullSecrets:
imagePullSecrets:
{{- toYaml .Values.scaler.imagePullSecrets | nindent 8 }}
serviceAccountName: {{ .Chart.Name }}-external-scaler
{{- if .Values.podSecurityContext.scaler }}
Expand All @@ -45,7 +45,7 @@ spec:
{{- if .Values.logging.scaler.stackTracesEnabled }}
- "--zap-stacktrace-level=error"
{{- end }}
image: "{{ .Values.images.scaler }}:{{ .Values.images.tag | default .Chart.AppVersion }}"
image: "{{ .Values.images.scaler }}:{{ coalesce .Values.scaler.image.tag .Values.images.tag .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.scaler.pullPolicy | default "Always" }}
name: "{{ .Chart.Name }}-external-scaler"
ports:
Expand Down
9 changes: 9 additions & 0 deletions http-add-on/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,9 @@ operator:
replicas: 1
# -- The image pull secrets for the operator component
imagePullSecrets: []
image:
# -- The tag to use for the operator component image. If not set, the value from `images.tag` will be used.
tag: ""
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I understand the reasoning for putting it here but also there is this block

# configuration for the images to use for each component
images:
# tag is the image tag to use for all images.
# for example, if the operator image is "myoperator" and
# tag is "mytag", the operator image used will be
# "myoperator:mytag". `latest` is used to indicate the latest
# stable release in the official images, `canary` is
# the build for the latest commit to the `main` branch,
# and you can target any other commit with `sha-<GIT_SHA[0:7]>`
# -- Image tag for the http add on. This tag is applied to the images listed in `images.operator`, `images.interceptor`, and `images.scaler`. Optional, given app version of Helm chart is used by default
tag: ""
# -- Image name for the operator image component
operator: ghcr.io/kedacore/http-add-on-operator
# -- Image name for the interceptor image component
interceptor: ghcr.io/kedacore/http-add-on-interceptor
# -- Image name for the scaler image component
scaler: ghcr.io/kedacore/http-add-on-scaler
# the kube-rbac-proxy image to use
kubeRbacProxy:
# -- Image name for the Kube RBAC Proxy image component
name: gcr.io/kubebuilder/kube-rbac-proxy
# -- Image tag for the Kube RBAC Proxy image component
tag: v0.13.0

I'm wondering if having multiple locations would not be too confusing,

images.tag
operator.image.tag

alternatively we could add

images.operatorTag

wdyt @kedacore/keda-contributors ?

Copy link
Copy Markdown
Member

@rickbrouwer rickbrouwer Jul 25, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking at this configuration structure, I think the current approach is actually the right design choice.

I think the pattern here follows a logical hierarchy.
The images.tag serves as a global default for all components, while operator.image.tag, scaler.image.tag, and interceptor.image.tag provide component-specific overrides when needed. This gives users flexibility for both.
The commentary given in the code makes it clear to me that it can also be overruled.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

but then there are dedicated fields nested under images level, some per component (image), some shared (tag)

I'm still not sure if having newly proposed structure:

images.tag
images.operator
images.interceptor
images.scaler
operator.image.tag
interceptor.image.tag
scaler.image.tag

is better than, let's say:

images.tag
images.operator
images.interceptor
images.scaler
images.operatorTag
images.interceptorTag
images.scalerTag

the interceptorTag is a bit awkward, I fully acknowledge that, but imho the benefit of having image-related definitions follow the pattern of already established nesting under images might be just easier to use and maintain.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Probably we should move in the direction to have global section for global things and placing the component related stuff inside the component section. so maybe we can just add global + componen + default the current way

# -- The namespace to watch for new `HTTPScaledObject`s. Leave this blank (i.e. `""`) to tell the operator to watch all namespaces.
watchNamespace: ""
# -- The image pull policy for the operator component
Expand Down Expand Up @@ -96,6 +99,9 @@ scaler:
replicas: 3
# -- The image pull secrets for the scaler component
imagePullSecrets: []
image:
# -- The tag to use for the scaler component image. If not set, the value from `images.tag` will be used.
tag: ""
# -- The name of the Kubernetes `Service` for the scaler component
service: external-scaler
# -- The image pull policy for the scaler component
Expand Down Expand Up @@ -123,6 +129,9 @@ scaler:
podAnnotations: {}

interceptor:
image:
# -- The tag to use for the interceptor component image. If not set, the value from `images.tag` will be used.
tag: ""
# -- The image pull secrets for the interceptor component
imagePullSecrets: []
# -- The image pull policy for the interceptor component
Expand Down