This is an automated email from the ASF dual-hosted git repository.

orpiske pushed a commit to branch camel-main
in repository https://gitbox.apache.org/repos/asf/camel-k.git

commit 0442427e413d121a8eafeac78a6494aa68aa1f42
Author: Antonin Stefanutti <anto...@stefanutti.fr>
AuthorDate: Wed Jun 9 19:34:19 2021 +0200

    chore(doc): Add autoscaling with Knative documentation
---
 docs/modules/ROOT/pages/scaling/integration.adoc | 63 ++++++++++++++++++++++--
 1 file changed, 58 insertions(+), 5 deletions(-)

diff --git a/docs/modules/ROOT/pages/scaling/integration.adoc 
b/docs/modules/ROOT/pages/scaling/integration.adoc
index c69e4b8..b0ca3a0 100644
--- a/docs/modules/ROOT/pages/scaling/integration.adoc
+++ b/docs/modules/ROOT/pages/scaling/integration.adoc
@@ -5,32 +5,83 @@
 
 An Integration can be scaled using the `kubectl scale` command, e.g.:
 
-[source,sh]
+[source,console]
 ----
 $ kubectl scale it <integration_name> --replicas <number_of_replicas>
 ----
 
 This can also be achieved by editing the Integration resource directly, e.g.:
 
-[source,sh]
+[source,console]
 ----
 $ kubectl patch it <integration_name> -p 
'{"spec":{"replicas":<number_of_replicas>}}'
 ----
 
-The Integration also reports its number of replicas in the `.Status.Replicas` 
field, e.g.:
+The Integration also reports its number of replicas in the `.status.replicas` 
field, e.g.:
 
-[source,sh]
+[source,console]
 ----
 $ kubectl get it <integration_name> -o jsonpath='{.spec.replicas}'
 ----
 
+== Autoscaling with Knative
+
+An Integration that deploys as a Knative Service can automatically scale based 
on _incoming_ traffic, including scaling to zero.
+
+The _incoming_ traffic measures either as:
+
+* The number of simultaneous requests, that are processed by each replica at 
any given time;
+* Or the number of requests that are processed per second, per replica.
+
+That implies the Integration must expose a container port, that receives 
incoming requests, and complies with the 
https://github.com/knative/specs/blob/main/specs/serving/runtime-contract.md#protocols-and-ports[Knative
 runtime contract].
+This is the case when the Integration either:
+
+* Exposes an HTTP endpoint, using the Camel HTTP component or the REST DSL, 
e.g.:
++
+[source,javascript]
+----
+rest('/')
+  .produces("text/plain")
+  .get()
+    .route()
+    .transform().constant("Response");
+----
+* Or consumes Knative events, from a Broker or a Channel, using the Knative 
component, e.g.:
++
+[source,java]
+----
+from("knative:channel/events")
+  .convertBodyTo(String.class)
+  .to("log:info")
+----
+
+The Knative 
https://knative.dev/docs/serving/autoscaling/autoscaling-concepts/#supported-autoscaler-types[_Autoscaler_]
 can be configured using the xref:traits:knative-service.adoc[Knative Service] 
trait, e.g., to set the scaling upper bound (the maximum number of replicas):
+
+[source,console]
+----
+$ kamel run -t knative-service.max-scale=10
+----
+
+More information can be found in the Knative 
https://knative.dev/docs/serving/autoscaling/[Autoscaling] documentation.
+
+[NOTE]
+====
+When <<Manual Scaling,manually scaling>> an Integration, that deploys as a 
Knative Service, both 
https://knative.dev/docs/serving/autoscaling/scale-bounds/[scale bounds], i.e., 
`minScale` and `maxScale`, are set to the specified number of replicas.
+Scale bounds can be reset by removing the `.spec.replicas` field from the 
Integration, e.g., with:
+
+[source,console]
+----
+$ kubectl patch it <integration_name> --type=json -p='[{"op": "remove", 
"path": "/spec/replicas"}]'
+----
+====
+
 == Autoscaling with HPA
 
 An Integration can automatically scale based on its CPU utilization and custom 
metrics using 
https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/[horizontal
 pod autoscaling (HPA)].
 
 For example, executing the following command creates an _autoscaler_ for the 
Integration, with target CPU utilization set to 80%, and the number of replicas 
between 2 and 5:
 
-[source,sh]
+[source,console]
 ----
 $ kubectl autoscale it <integration_name> --min=2 --max=5 --cpu-percent=80
 ----
@@ -65,3 +116,5 @@ spec:
 ----
 
 More information can be found in 
https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/[Horizontal
 Pod Autoscaler] from the Kubernetes documentation.
+
+NOTE: HPA can also be used with Knative, by installing the 
https://knative.dev/docs/install/install-extensions/#install-optional-serving-extensions[HPA
 autoscaling Serving extension].

Reply via email to