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

doc(install): operationalize options #2244

Merged
merged 2 commits into from
May 3, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/modules/ROOT/nav.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
*** xref:installation/registry/github.adoc[Github Packages]
*** xref:installation/registry/gcr.adoc[Gcr.io]
*** xref:installation/registry/icr.adoc[IBM Container Registry]
** xref:installation/scheduling.adoc[Pod scheduling]
* xref:running/running.adoc[Running]
** xref:running/dev-mode.adoc[Dev Mode]
** xref:running/run-from-github.adoc[Run from GitHub]
Expand Down
42 changes: 42 additions & 0 deletions docs/modules/ROOT/pages/installation/scheduling.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
[[scheduling-infra-pod]]
= Scheduling infrastructure Pods and Resource managment

During the installation procedure you will be able to provide information on how to best "operationalize" your infrastructure. Through the configuration of `--node-selector`, `--toleration` and `--operator-resources` you will be able to drive the operator `Pod`s scheduling and to be able to assign resources.

The usage of these advanced properties assumes you're familiar with the https://kubernetes.io/docs/concepts/scheduling-eviction/[Kubernetes Scheduling] concepts and configurations.

NOTE: the aforementioned flags setting will work both with `OLM` installation and regular installation.

[[scheduling-infra-pod-scheduling]]
== Scheduling

=== Node Selectors
The most basic operation we provide is to let you assign Camel K operator `Pod`s to a specific cluster `Node` via `--node-selector` option. The functionality is based on https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/[`NodeSelector` Kubernetes feature]. As an example, you can schedule Camel K infra `Pod`s to a specific `Node` of your cluster:

```
kamel install --node-selector kubernetes.io/hostname=ip-172-20-114-199.ec2.internal ...
```

The option will accept any `key=value` pair as specified and supported by Kubernetes. You can specify more than one `node-selector`.

=== Tolerations
The `--toleration` option will let you tolerate a Camel K infra `Pod` to support any matching `Taint` according the https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/[`Taint` and `Toleration` Kubernetes feature]. As an example, let's suppose we have a node tainted as "dedicated=camel-k:NoSchedule". In order to allow the infra `Pod`s to be scheduled on that `Node` we can provide the following option during installation procedure:

```
kamel install --toleration dedicated=camel-k:NoSchedule ...
```

The option accept a value in the following format `Key[=Value]:Effect[:Seconds]` where the values in squared bracket are considered optional and `Effect` must admit any of the `Taint`s accepted values: `NoSchedule`, `PreferNoSchedule`, `NoExecute`. You can specify more than one `toleration`.

[[scheduling-infra-pod-resources]]
== Resources

While installing the Camel K operator, you can also specify the resources requests and limits to assign to the operator `Pod` with `--operator-resources` option. The option will expect the configuration as required by https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/[Kubernetes Resource managment].

```
kamel install --operator-resources requests.cpu=256m --operator-resources limits.cpu=500m --operator-resources limits.memory=512Mi ...
```

The value expected by the option are in the form `requestType.requestResource=value` where `requestType` must be either `requests` or `limits`, `requestResource` must be either `cpu` or `memory` and `value` expressed in the numeric value as expected by the resource. You can specify more than one `operator-resources`.

NOTE: if you specify a limit, but does not specify a request, Kubernetes automatically assigns a request that matches the limit.
17 changes: 17 additions & 0 deletions docs/modules/traits/pages/toleration.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -43,3 +43,20 @@ The following configuration options are available:
|===

// End of autogenerated code - DO NOT EDIT! (configuration)

== Examples

* To tolerate the integration pod(s) to be scheduled on the master node:
+
[source,console]
$ kamel run -t toleration.taints="node-role.kubernetes.io/master:NoSchedule" ...

* To tolerate the integration pod(s) executing on a node with network not available for 300 seconds:
+
[source,console]
$ kamel run -t toleration.taints="node.kubernetes.io/network-unavailable:NoExecute:300" ...

* To tolerate the integration pod(s) to be scheduled on a node with a disk of SSD type:
+
[source,console]
$ kamel run -t toleration.taints="disktype=ssd:PreferNoSchedule" ...