Skip to content

Commit 8f35796

Browse files
committed
feat: New ScalingSet CRD to deploy isolated interceptors+scalers
Signed-off-by: kahirokunn <okinakahiro@gmail.com>
1 parent c0d3bd5 commit 8f35796

File tree

3 files changed

+739
-4
lines changed

3 files changed

+739
-4
lines changed
Lines changed: 362 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,362 @@
1+
{{ if .Values.crds.install }}
2+
apiVersion: apiextensions.k8s.io/v1
3+
kind: CustomResourceDefinition
4+
metadata:
5+
annotations:
6+
controller-gen.kubebuilder.io/version: v0.15.0
7+
name: clusterhttpscalingsets.http.keda.sh
8+
spec:
9+
group: http.keda.sh
10+
names:
11+
kind: ClusterHTTPScalingSet
12+
listKind: ClusterHTTPScalingSetList
13+
plural: clusterhttpscalingsets
14+
shortNames:
15+
- css
16+
singular: clusterhttpscalingset
17+
scope: Cluster
18+
versions:
19+
- name: v1alpha1
20+
schema:
21+
openAPIV3Schema:
22+
description: ClusterHTTPScalingSet is the Schema for the cluster httpscalingset
23+
API
24+
properties:
25+
apiVersion:
26+
description: |-
27+
APIVersion defines the versioned schema of this representation of an object.
28+
Servers should convert recognized schemas to the latest internal value, and
29+
may reject unrecognized values.
30+
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
31+
type: string
32+
kind:
33+
description: |-
34+
Kind is a string value representing the REST resource this object represents.
35+
Servers may infer this from the endpoint the client submits requests to.
36+
Cannot be updated.
37+
In CamelCase.
38+
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
39+
type: string
40+
metadata:
41+
type: object
42+
spec:
43+
description: HTTPScalingSetSpec defines the desired state of HTTPScalingSet
44+
properties:
45+
interceptor:
46+
description: HTTPInterceptorSpec defines the desired state of Interceptor
47+
component
48+
properties:
49+
annotations:
50+
additionalProperties:
51+
type: string
52+
description: |-
53+
Annotations is an unstructured key value map stored with a resource that may be
54+
set by external tools to store and retrieve arbitrary metadata. They are not
55+
queryable and should be preserved when modifying objects.
56+
More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations
57+
type: object
58+
autoscaling:
59+
description: Autoscaling options for the interceptor
60+
properties:
61+
maxReplicas:
62+
default: 100
63+
description: Maximum replicas for the interceptor
64+
type: integer
65+
minReplicas:
66+
default: 3
67+
description: Minimum replicas for the interceptor
68+
type: integer
69+
target:
70+
default: 100
71+
description: Target concurrent requests
72+
type: integer
73+
type: object
74+
config:
75+
description: Traffic configuration
76+
properties:
77+
adminPort:
78+
description: Port to be used for admin operations
79+
format: int32
80+
type: integer
81+
connectTimeout:
82+
description: Timeout for establishing the connection
83+
type: string
84+
expectContinueTimeout:
85+
description: |-
86+
Max amount of time the interceptor will wait
87+
after sending request headers if the server returned an Expect: 100-continue
88+
header
89+
type: string
90+
forceHTTP2:
91+
description: Try to force HTTP2 for all requests
92+
type: boolean
93+
handshakeTimeout:
94+
description: |-
95+
Max amount of time the interceptor will
96+
wait to establish a TLS connection
97+
type: string
98+
headerTimeout:
99+
description: |-
100+
How long to wait between when the HTTP request
101+
is sent to the backing app and when response headers need to arrive
102+
type: string
103+
idleConnTimeout:
104+
description: |-
105+
Timeout after which a connection in the interceptor's
106+
internal connection pool will be closed
107+
type: string
108+
keepAlive:
109+
description: Interval between keepalive probes
110+
type: string
111+
maxIdleConnections:
112+
description: |-
113+
Max number of connections that can be idle in the
114+
interceptor's internal connection pool
115+
type: integer
116+
pollingInterval:
117+
description: |-
118+
The interceptor has an internal process that periodically fetches the state
119+
of endpoints that is running the servers it forwards to.
120+
This is the interval (in milliseconds) representing how often to do a fetch
121+
type: integer
122+
proxyPort:
123+
description: Port to be used for proxy operations
124+
format: int32
125+
type: integer
126+
waitTimeout:
127+
description: |-
128+
How long to wait for the backing workload
129+
to have 1 or more replicas before connecting and sending the HTTP request.
130+
type: string
131+
type: object
132+
image:
133+
description: Container image name.
134+
type: string
135+
imagePullSecrets:
136+
description: |-
137+
ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec.
138+
If specified, these secrets will be passed to individual puller implementations for them to use.
139+
More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod
140+
items:
141+
description: |-
142+
LocalObjectReference contains enough information to let you locate the
143+
referenced object inside the same namespace.
144+
properties:
145+
name:
146+
description: |-
147+
Name of the referent.
148+
More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
149+
TODO: Add other useful fields. apiVersion, kind, uid?
150+
type: string
151+
type: object
152+
x-kubernetes-map-type: atomic
153+
type: array
154+
labels:
155+
additionalProperties:
156+
type: string
157+
description: |-
158+
Map of string keys and values that can be used to organize and categorize
159+
(scope and select) objects. May match selectors of replication controllers
160+
and services.
161+
More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels
162+
type: object
163+
replicas:
164+
description: Number of replicas for the interceptor
165+
format: int32
166+
type: integer
167+
resources:
168+
description: |-
169+
Compute Resources required by this interceptor.
170+
Cannot be updated.
171+
More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
172+
properties:
173+
claims:
174+
description: |-
175+
Claims lists the names of resources, defined in spec.resourceClaims,
176+
that are used by this container.
177+
178+
179+
This is an alpha field and requires enabling the
180+
DynamicResourceAllocation feature gate.
181+
182+
183+
This field is immutable. It can only be set for containers.
184+
items:
185+
description: ResourceClaim references one entry in PodSpec.ResourceClaims.
186+
properties:
187+
name:
188+
description: |-
189+
Name must match the name of one entry in pod.spec.resourceClaims of
190+
the Pod where this field is used. It makes that resource available
191+
inside a container.
192+
type: string
193+
required:
194+
- name
195+
type: object
196+
type: array
197+
x-kubernetes-list-map-keys:
198+
- name
199+
x-kubernetes-list-type: map
200+
limits:
201+
additionalProperties:
202+
anyOf:
203+
- type: integer
204+
- type: string
205+
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
206+
x-kubernetes-int-or-string: true
207+
description: |-
208+
Limits describes the maximum amount of compute resources allowed.
209+
More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
210+
type: object
211+
requests:
212+
additionalProperties:
213+
anyOf:
214+
- type: integer
215+
- type: string
216+
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
217+
x-kubernetes-int-or-string: true
218+
description: |-
219+
Requests describes the minimum amount of compute resources required.
220+
If Requests is omitted for a container, it defaults to Limits if that is explicitly specified,
221+
otherwise to an implementation-defined value. Requests cannot exceed Limits.
222+
More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
223+
type: object
224+
type: object
225+
serviceAccountName:
226+
default: default
227+
description: Name of the service account to be used
228+
type: string
229+
type: object
230+
scaler:
231+
description: HTTPScalerSpec defines the desired state of Scaler component
232+
properties:
233+
annotations:
234+
additionalProperties:
235+
type: string
236+
description: |-
237+
Annotations is an unstructured key value map stored with a resource that may be
238+
set by external tools to store and retrieve arbitrary metadata. They are not
239+
queryable and should be preserved when modifying objects.
240+
More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations
241+
type: object
242+
config:
243+
default: {}
244+
description: Traffic configuration
245+
properties:
246+
port:
247+
default: 9090
248+
description: Port to be used for proxy operations
249+
format: int32
250+
type: integer
251+
type: object
252+
image:
253+
description: Container image name.
254+
type: string
255+
imagePullSecrets:
256+
description: |-
257+
ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec.
258+
If specified, these secrets will be passed to individual puller implementations for them to use.
259+
More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod
260+
items:
261+
description: |-
262+
LocalObjectReference contains enough information to let you locate the
263+
referenced object inside the same namespace.
264+
properties:
265+
name:
266+
description: |-
267+
Name of the referent.
268+
More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
269+
TODO: Add other useful fields. apiVersion, kind, uid?
270+
type: string
271+
type: object
272+
x-kubernetes-map-type: atomic
273+
type: array
274+
labels:
275+
additionalProperties:
276+
type: string
277+
description: |-
278+
Map of string keys and values that can be used to organize and categorize
279+
(scope and select) objects. May match selectors of replication controllers
280+
and services.
281+
More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels
282+
type: object
283+
replicas:
284+
description: Number of replicas for the interceptor
285+
format: int32
286+
type: integer
287+
resources:
288+
description: |-
289+
Compute Resources required by this scaler.
290+
Cannot be updated.
291+
More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
292+
properties:
293+
claims:
294+
description: |-
295+
Claims lists the names of resources, defined in spec.resourceClaims,
296+
that are used by this container.
297+
298+
299+
This is an alpha field and requires enabling the
300+
DynamicResourceAllocation feature gate.
301+
302+
303+
This field is immutable. It can only be set for containers.
304+
items:
305+
description: ResourceClaim references one entry in PodSpec.ResourceClaims.
306+
properties:
307+
name:
308+
description: |-
309+
Name must match the name of one entry in pod.spec.resourceClaims of
310+
the Pod where this field is used. It makes that resource available
311+
inside a container.
312+
type: string
313+
required:
314+
- name
315+
type: object
316+
type: array
317+
x-kubernetes-list-map-keys:
318+
- name
319+
x-kubernetes-list-type: map
320+
limits:
321+
additionalProperties:
322+
anyOf:
323+
- type: integer
324+
- type: string
325+
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
326+
x-kubernetes-int-or-string: true
327+
description: |-
328+
Limits describes the maximum amount of compute resources allowed.
329+
More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
330+
type: object
331+
requests:
332+
additionalProperties:
333+
anyOf:
334+
- type: integer
335+
- type: string
336+
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
337+
x-kubernetes-int-or-string: true
338+
description: |-
339+
Requests describes the minimum amount of compute resources required.
340+
If Requests is omitted for a container, it defaults to Limits if that is explicitly specified,
341+
otherwise to an implementation-defined value. Requests cannot exceed Limits.
342+
More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
343+
type: object
344+
type: object
345+
serviceAccountName:
346+
default: default
347+
description: Name of the service account to be used
348+
type: string
349+
type: object
350+
required:
351+
- interceptor
352+
- scaler
353+
type: object
354+
status:
355+
description: HTTPScalingSetStatus defines the observed state of HTTPScalingSet
356+
type: object
357+
type: object
358+
served: true
359+
storage: true
360+
subresources:
361+
status: {}
362+
{{ end }}

http-add-on/templates/crd.yaml renamed to http-add-on/templates/crds/httpscaledobject.yaml

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,10 +99,6 @@ spec:
9999
properties:
100100
apiVersion:
101101
type: string
102-
deployment:
103-
description: 'Deprecated: The name of the deployment to scale
104-
according to HTTP traffic'
105-
type: string
106102
kind:
107103
type: string
108104
name:
@@ -157,6 +153,22 @@ spec:
157153
type: string
158154
type: object
159155
type: object
156+
scalingSet:
157+
description: |-
158+
ScalingSet to be used for this HTTPScaledObject, if empty, default
159+
interceptor and scaler will be used
160+
properties:
161+
kind:
162+
description: Kind of the resource being referred to. Defaults
163+
to HTTPScalingSet.
164+
enum:
165+
- HTTPScalingSet
166+
- ClusterHTTPScalingSet
167+
type: string
168+
name:
169+
description: Name of the scaling set
170+
type: string
171+
type: object
160172
targetPendingRequests:
161173
description: (optional) DEPRECATED (use ScalingMetric instead) Target
162174
metric value

0 commit comments

Comments
 (0)