Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: multi-tenant scaler and interceptor in the HTTP add-on #169

Merged
merged 33 commits into from
Nov 9, 2021
Merged
Show file tree
Hide file tree
Changes from 22 commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
702729e
multi-tenant scaler and interceptor in the HTTP add-on
arschles Jul 1, 2021
b9382cc
configuring the operator with the admin port and exposing the contain…
arschles Jul 1, 2021
328c0d2
adding the various services
arschles Jul 2, 2021
3140346
adding more required runtime configs
arschles Jul 13, 2021
17b0f2f
quoting the port number
arschles Jul 13, 2021
3c5b57b
adding named container ports to the interceptor
arschles Jul 13, 2021
ee0aab1
using proper selectors and named ports
arschles Jul 14, 2021
f30d716
fixing service and port env vars
arschles Jul 14, 2021
0ea1c51
updating the CRD
arschles Jul 22, 2021
e97bdaa
proper interceptor scaler service
arschles Jul 22, 2021
e26d02f
adding configs to operator
arschles Jul 23, 2021
24e8465
adding container ports to scaler
arschles Jul 26, 2021
e74860e
targeting the right scaler deployment port
arschles Jul 27, 2021
85d9827
adding scaledobject for interceptor
arschles Jul 27, 2021
869812c
finishing comment in interceptor ScaledObject
arschles Jul 29, 2021
dcf0794
adding polling interval to interceptor scaled object
arschles Aug 12, 2021
9026a80
removing unnecessary configuration parameters
arschles Aug 16, 2021
11cbcff
adding configuration for deployment polling
arschles Aug 23, 2021
cf79560
adding config params for the interceptor's proxy
arschles Sep 7, 2021
7c8a577
respecting crds.install config
arschles Sep 8, 2021
512b7ef
adding routing table config map
arschles Sep 28, 2021
f767dd9
adding a default pending requests for the scaler
arschles Sep 28, 2021
da9be3d
matching deployment cache polling interval to the default
arschles Sep 29, 2021
0ac99c7
removing commented env vars
arschles Oct 4, 2021
dbd7413
removing placeholder data
arschles Oct 4, 2021
9a86221
Small restructuring of values.yaml per @tomkerkhove
arschles Oct 4, 2021
738ba9c
quoting a config integer
arschles Oct 6, 2021
b392fcf
adding routing table config map (empty) data
arschles Oct 6, 2021
e72ee92
adding config values to the HTTP Addon README
arschles Nov 2, 2021
aada9cf
bumping the release numbers
arschles Nov 2, 2021
f0981fb
packaging new release
arschles Nov 2, 2021
b440cc4
Merge branch 'master' of https://github.com/kedacore/charts into http…
arschles Nov 2, 2021
4354bee
fixing lint error
arschles Nov 2, 2021
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
39 changes: 9 additions & 30 deletions http-add-on/templates/crd.yaml
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
{{- if .Values.crds.install }}

{{ if .Values.crds.install }}
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.5.0
controller-gen.kubebuilder.io/version: v0.6.1
creationTimestamp: null
name: httpscaledobjects.http.keda.sh
spec:
Expand Down Expand Up @@ -59,6 +58,11 @@ spec:
spec:
description: HTTPScaledObjectSpec defines the desired state of HTTPScaledObject
properties:
host:
description: The host to route. All requests with this host in the
"Host" header will be routed to the Service and Port specified in
the scaleTargetRef
type: string
replicas:
description: (optional) Replica information
properties:
Expand Down Expand Up @@ -93,11 +97,8 @@ spec:
- port
- service
type: object
targetMetric:
description: (optional) Target metric value
format: int32
type: integer
required:
- host
- scaleTargetRef
type: object
status:
Expand All @@ -115,32 +116,11 @@ spec:
reason:
description: The reason for the condition's last transition.
enum:
- ErrorCreatingExternalScaler
- ErrorCreatingExternalScalerService
- CreatedExternalScaler
- ErrorCreatingInterceptorScaledObject
- ErrorCreatingAppScaledObject
- AppScaledObjectCreated
- InterceptorScaledObjectCreated
- ErrorCreatingInterceptor
- ErrorCreatingInterceptorAdminService
- ErrorCreatingInterceptorProxyService
- InterceptorCreated
- TerminatingResources
- InterceptorDeploymentTerminated
- InterceptorDeploymentTerminationError
- InterceptorAdminServiceTerminationError
- InterceptorAdminServiceTerminated
- InterceptorProxyServiceTerminationError
- InterceptorProxyServiceTerminated
- ExternalScalerDeploymentTerminationError
- ExternalScalerDeploymentTerminated
- ExternalScalerServiceTerminationError
- ExternalScalerServiceTerminated
- InterceptorScaledObjectTerminated
- AppScaledObjectTerminated
- AppScaledObjectTerminationError
- InterceptorScaledObjectTerminationError
- PendingCreation
- HTTPScaledObjectIsReady
type: string
Expand Down Expand Up @@ -178,5 +158,4 @@ status:
plural: ""
conditions: []
storedVersions: []

{{- end -}}
{{ end }}
89 changes: 89 additions & 0 deletions http-add-on/templates/deployment-interceptor.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
control-plane: interceptor
httpscaledobjects.http.keda.sh/version: {{ .Values.images.tag | default .Chart.AppVersion }}
keda.sh/addon: {{ .Chart.Name }}
app: {{ .Chart.Name }}
name: {{ .Chart.Name }}-interceptor
app.kubernetes.io/name: {{ .Chart.Name }}-interceptor
app.kubernetes.io/version: {{ .Values.images.tag | default .Chart.AppVersion }}
app.kubernetes.io/component: interceptor
app.kubernetes.io/part-of: {{ .Chart.Name }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{ tpl .Values.additionalLabels . | indent 4}}
name: {{ .Chart.Name }}-interceptor
namespace: {{ .Release.Namespace }}
spec:
replicas: 1
selector:
matchLabels:
control-plane: interceptor
httpscaledobjects.http.keda.sh/version: {{ .Values.images.tag | default .Chart.AppVersion }}
keda.sh/addon: {{ .Chart.Name }}
template:
metadata:
labels:
control-plane: interceptor
httpscaledobjects.http.keda.sh/version: {{ .Values.images.tag | default .Chart.AppVersion }}
keda.sh/addon: {{ .Chart.Name }}
app: {{ .Chart.Name }}
name: {{ .Chart.Name }}-interceptor
app.kubernetes.io/name: {{ .Chart.Name }}-interceptor
app.kubernetes.io/version: {{ .Values.images.tag | default .Chart.AppVersion }}
app.kubernetes.io/component: interceptor
app.kubernetes.io/part-of: {{ .Chart.Name }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
app.kubernetes.io/instance: {{ .Release.Name }}
tomkerkhove marked this conversation as resolved.
Show resolved Hide resolved
{{ tpl .Values.additionalLabels . | indent 4}}
spec:
containers:
- args:
image: "{{ .Values.images.interceptor }}:{{ .Values.images.tag | default .Chart.AppVersion }}"
imagePullPolicy: '{{ .Values.interceptor.pullPolicy | default "Always" }}'
name: "{{ .Chart.Name }}-interceptor"
env:
# - name: KEDA_HTTP_OPERATOR_SERVICE_NAME
# value: "{{ .Chart.Name }}-{{ .Values.operator.adminService }}"
# - name: KEDA_HTTP_OPERATOR_SERVICE_PORT
# value: "{{ .Values.operator.adminPort }}"
# - name: KEDA_HTTP_OPERATOR_ROUTING_TABLE_PATH
# value: "{{ .Values.operator.routingTableURLPath }}"
tomkerkhove marked this conversation as resolved.
Show resolved Hide resolved
- name: KEDA_HTTP_ROUTING_TABLE_UPDATE_DURATION_MS
value: "{{ .Values.interceptor.routingTableUpdateDurationMS }}"
- name: KEDA_HTTP_CURRENT_NAMESPACE
value: "{{ .Release.Namespace }}"
- name: KEDA_HTTP_PROXY_PORT
value: "{{ .Values.interceptor.proxyPort }}"
- name: KEDA_HTTP_ADMIN_PORT
value: "{{ .Values.interceptor.adminPort }}"
- name: KEDA_HTTP_CONNECT_TIMEOUT
value: "{{ .Values.interceptor.tcpConnectTimeout }}"
- name: KEDA_HTTP_KEEP_ALIVE
value: "{{ .Values.interceptor.keepAlive }}"
- name: KEDA_RESPONSE_HEADER_TIMEOUT
value: "{{ .Values.interceptor.responseHeaderTimeout }}"
- name: KEDA_CONDITION_WAIT_TIMEOUT
value: "{{ .Values.interceptor.replicasWaitTimeout }}"
- name: KEDA_HTTP_DEPLOYMENT_CACHE_POLLING_INTERVAL_MS
value: "{{ .Values.interceptor.deploymentCachePollingIntervalMS }}"
- name: KEDA_HTTP_FORCE_HTTP2
value: "{{ .Values.interceptor.forceHTTP2 }}"
- name: KEDA_HTTP_MAX_IDLE_CONNS
value: "{{ .Values.interceptor.maxIdleConns }}"
- name: KEDA_HTTP_IDLE_CONN_TIMEOUT
value: "{{ .Values.interceptor.idleConnTimeout }}"
- name: KEDA_HTTP_TLS_HANDSHAKE_TIMEOUT
value: "{{ .Values.interceptor.tlsHandshakeTimeout }}"
- name: KEDA_HTTP_EXPECT_CONTINUE_TIMEOUT
value: "{{ .Values.interceptor.expectContinueTimeout }}"
ports:
- containerPort: {{ .Values.interceptor.adminPort }}
name: inter-admin
- containerPort: {{ .Values.interceptor.proxyPort }}
name: inter-proxy
resources:
{{- toYaml .Values.resources | nindent 12 }}
terminationGracePeriodSeconds: 10
Original file line number Diff line number Diff line change
Expand Up @@ -50,18 +50,25 @@ spec:
- args:
- --metrics-addr=127.0.0.1:8080
- --enable-leader-election
- --admin-port={{ .Values.operator.adminPort }}
image: "{{ .Values.images.operator }}:{{ .Values.images.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.operator.pullPolicy | default "Always" }}
name: {{ .Chart.Name }}-operator
imagePullPolicy: '{{ .Values.operator.pullPolicy | default "Always" }}'
name: "{{ .Chart.Name }}-operator"
env:
- name: KEDAHTTP_OPERATOR_EXTERNAL_SCALER_IMAGE
value: "{{ .Values.images.scaler }}:{{ .Values.images.tag | default .Chart.AppVersion }}"
- name: KEDAHTTP_OPERATOR_INTERCEPTOR_IMAGE
value: "{{ .Values.images.interceptor }}:{{ .Values.images.tag | default .Chart.AppVersion }}"
- name: INTERCEPTOR_PULL_POLICY
value: {{ .Values.operator.pullPolicy | default "Always" }}
- name: SCALER_PULL_POLICY
value: {{ .Values.operator.pullPolicy | default "Always"}}
- name: KEDAHTTP_INTERCEPTOR_SERVICE
value: "{{.Chart.Name}}-{{ .Values.interceptor.adminService }}"
- name: KEDAHTTP_OPERATOR_EXTERNAL_SCALER_SERVICE
value: "{{ .Chart.Name }}-{{ .Values.scaler.service }}"
- name: KEDAHTTP_OPERATOR_EXTERNAL_SCALER_PORT
value: "{{ default 9090 .Values.scaler.grpcPort }}"
- name: KEDAHTTP_INTERCEPTOR_ADMIN_PORT
value: "{{ .Values.interceptor.adminPort }}"
- name: KEDAHTTP_INTERCEPTOR_PROXY_PORT
value: "{{ .Values.interceptor.proxyPort }}"

ports:
- containerPort: {{ .Values.operator.adminPort }}
name: admin-http
resources:
{{- toYaml .Values.resources | nindent 12 }}
terminationGracePeriodSeconds: 10
67 changes: 67 additions & 0 deletions http-add-on/templates/deployment-scaler.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
control-plane: external-scaler
httpscaledobjects.http.keda.sh/version: {{ .Values.images.tag | default .Chart.AppVersion }}
keda.sh/addon: {{ .Chart.Name }}
app: {{ .Chart.Name }}
name: {{ .Chart.Name }}-external-scaler
app.kubernetes.io/name: {{ .Chart.Name }}-external-scaler
app.kubernetes.io/version: {{ .Values.images.tag | default .Chart.AppVersion }}
app.kubernetes.io/component: external-scaler
app.kubernetes.io/part-of: {{ .Chart.Name }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{ tpl .Values.additionalLabels . | indent 4}}
name: {{ .Chart.Name }}-external-scaler
namespace: {{ .Release.Namespace }}
spec:
replicas: 1
selector:
matchLabels:
control-plane: external-scaler
httpscaledobjects.http.keda.sh/version: {{ .Values.images.tag | default .Chart.AppVersion }}
keda.sh/addon: {{ .Chart.Name }}
template:
metadata:
labels:
control-plane: external-scaler
httpscaledobjects.http.keda.sh/version: {{ .Values.images.tag | default .Chart.AppVersion }}
keda.sh/addon: {{ .Chart.Name }}
app: {{ .Chart.Name }}
name: "{{ .Chart.Name }}-external-scaler"
app.kubernetes.io/name: "{{ .Chart.Name }}-external-scaler"
app.kubernetes.io/version: "{{ .Values.images.tag | default .Chart.AppVersion }}"
app.kubernetes.io/component: external-scaler
app.kubernetes.io/part-of: {{ .Chart.Name }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{ tpl .Values.additionalLabels . | indent 4}}
spec:
containers:
- args:
image: "{{ .Values.images.scaler }}:{{ .Values.images.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.scaler.pullPolicy | default "Always" }}
name: "{{ .Chart.Name }}-external-scaler"
ports:
- containerPort: {{ .Values.scaler.healthPort }}
name: scaler-health
- containerPort: {{ .Values.scaler.grpcPort }}
name: scaler-grpc
env:
- name: KEDA_HTTP_SCALER_PORT
value: "{{ .Values.scaler.grpcPort }}"
- name: KEDA_HTTP_HEALTH_PORT
value: "{{ .Values.scaler.healthPort }}"
- name: KEDA_HTTP_SCALER_TARGET_ADMIN_NAMESPACE
value: "{{ .Release.Namespace }}"
- name: KEDA_HTTP_SCALER_TARGET_ADMIN_SERVICE
value: "{{ .Chart.Name }}-{{ .Values.interceptor.adminService }}"
- name: KEDA_HTTP_SCALER_TARGET_ADMIN_PORT
value: "{{ default 9091 .Values.interceptor.adminPort }}"
- name: KEDA_HTTP_SCALER_TARGET_PENDING_REQUESTS_INTERCEPTOR
value: {{ default 200 .Values.scaler.pendingRequestsInterceptor }}
resources:
{{- toYaml .Values.resources | nindent 12 }}
terminationGracePeriodSeconds: 10
10 changes: 10 additions & 0 deletions http-add-on/templates/routing-table-config-map.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: keda-http-routing-table
labels:
"control-plane": "operator"
"keda.sh/addon": "http-add-on"
"app": "http-add-on"
"name": "http-add-on-routing-table"
data:
tomkerkhove marked this conversation as resolved.
Show resolved Hide resolved
17 changes: 17 additions & 0 deletions http-add-on/templates/scaledobject-interceptor.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# this is the ScaledObject that tells KEDA to scale the interceptor fleet
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: "{{ .Chart.Name }}-interceptor"
spec:
minReplicaCount: {{ .Values.interceptor.minReplicas }}
maxReplicaCount: {{ .Values.interceptor.maxReplicas }}
pollingInterval: {{ .Values.interceptor.pollingInterval }}
scaleTargetRef:
name: "{{ .Chart.Name }}-interceptor"
kind: Deployment
triggers:
- type: external
metadata:
scalerAddress: "{{ .Chart.Name }}-{{ .Values.scaler.service }}:{{ default 9091 .Values.scaler.grpcPort }}"
host: interceptor
25 changes: 25 additions & 0 deletions http-add-on/templates/svc-interceptor-admin.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
apiVersion: v1
kind: Service
metadata:
labels:
control-plane: interceptor-admin
httpscaledobjects.http.keda.sh/version: {{ .Values.images.tag | default .Chart.AppVersion }}
keda.sh/addon: {{ .Chart.Name }}
app: {{ .Chart.Name }}
name: "{{ .Chart.Name }}-{{ .Values.interceptor.adminService }}"
app.kubernetes.io/name: {{ .Chart.Name }}-interceptor-admin
app.kubernetes.io/version: {{ .Values.images.tag | default .Chart.AppVersion }}
app.kubernetes.io/component: interceptor-admin
app.kubernetes.io/part-of: {{ .Chart.Name }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{ tpl .Values.additionalLabels . | indent 4}}
name: "{{ .Chart.Name }}-{{ .Values.interceptor.adminService }}"
namespace: {{ .Release.Namespace }}
spec:
ports:
- name: https
port: {{ default 9091 .Values.interceptor.adminPort }}
targetPort: inter-admin
selector:
control-plane: interceptor
25 changes: 25 additions & 0 deletions http-add-on/templates/svc-interceptor-proxy.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
apiVersion: v1
kind: Service
metadata:
labels:
control-plane: interceptor-proxy
httpscaledobjects.http.keda.sh/version: {{ .Values.images.tag | default .Chart.AppVersion }}
keda.sh/addon: {{ .Chart.Name }}
app: {{ .Chart.Name }}
name: "{{ .Chart.Name }}-{{ .Values.interceptor.proxyService }}"
app.kubernetes.io/name: {{ .Chart.Name }}-interceptor-proxy
app.kubernetes.io/version: {{ .Values.images.tag | default .Chart.AppVersion }}
app.kubernetes.io/component: interceptor-proxy
app.kubernetes.io/part-of: {{ .Chart.Name }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{ tpl .Values.additionalLabels . | indent 4}}
name: "{{ .Chart.Name }}-{{ .Values.interceptor.proxyService }}"
namespace: {{ .Release.Namespace }}
spec:
ports:
- name: https
port: {{ default 9091 .Values.interceptor.proxyPort }}
targetPort: inter-proxy
selector:
control-plane: interceptor
25 changes: 25 additions & 0 deletions http-add-on/templates/svc-operator-admin.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
apiVersion: v1
kind: Service
metadata:
labels:
control-plane: operator-admin
httpscaledobjects.http.keda.sh/version: {{ .Values.images.tag | default .Chart.AppVersion }}
keda.sh/addon: {{ .Chart.Name }}
app: {{ .Chart.Name }}
name: "{{ .Chart.Name }}-{{ .Values.operator.adminService }}"
app.kubernetes.io/name: "{{ .Chart.Name }}-operator-admin"
app.kubernetes.io/version: "{{ .Values.images.tag | default .Chart.AppVersion }}"
app.kubernetes.io/component: operator-admin
app.kubernetes.io/part-of: {{ .Chart.Name }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{ tpl .Values.additionalLabels . | indent 4}}
name: "{{ .Chart.Name }}-{{ .Values.operator.adminService }}"
namespace: "{{ .Release.Namespace }}"
spec:
ports:
- name: admin-http
port: {{ default 9091 .Values.operator.adminPort }}
targetPort: admin-http
selector:
control-plane: controller-manager
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,3 @@ spec:
targetPort: https
selector:
control-plane: controller-manager
httpscaledobjects.http.keda.sh/version: {{ .Values.images.tag | default .Chart.AppVersion }}
keda.sh/addon: {{ .Chart.Name }}
Loading