| = Affinity Trait |
| |
| // Start of autogenerated code - DO NOT EDIT! (description) |
| Allows constraining which nodes the integration pod(s) are eligible to be scheduled on, based on labels on the node, |
| or with inter-pod affinity and anti-affinity, based on labels on pods that are already running on the nodes. |
| |
| It's disabled by default. |
| |
| |
| This trait is available in the following profiles: **Kubernetes, Knative, OpenShift**. |
| |
| // End of autogenerated code - DO NOT EDIT! (description) |
| // Start of autogenerated code - DO NOT EDIT! (configuration) |
| == Configuration |
| |
| Trait properties can be specified when running any integration with the CLI: |
| ``` |
| kamel run --trait affinity.[key]=[value] --trait affinity.[key2]=[value2] integration.groovy |
| ``` |
| The following configuration options are available: |
| |
| [cols="2,1,5a"] |
| |=== |
| |Property | Type | Description |
| |
| | affinity.enabled |
| | bool |
| | Can be used to enable or disable a trait. All traits share this common property. |
| |
| | affinity.pod-affinity |
| | bool |
| | Always co-locates multiple replicas of the integration in the same node (default *false*). |
| |
| | affinity.pod-anti-affinity |
| | bool |
| | Never co-locates multiple replicas of the integration in the same node (default *false*). |
| |
| | affinity.node-affinity-labels |
| | []string |
| | Defines a set of nodes the integration pod(s) are eligible to be scheduled on, based on labels on the node. |
| |
| | affinity.pod-affinity-labels |
| | []string |
| | Defines a set of pods (namely those matching the label selector, relative to the given namespace) that the |
| integration pod(s) should be co-located with. |
| |
| | affinity.pod-anti-affinity-labels |
| | []string |
| | Defines a set of pods (namely those matching the label selector, relative to the given namespace) that the |
| integration pod(s) should not be co-located with. |
| |
| |=== |
| |
| // End of autogenerated code - DO NOT EDIT! (configuration) |
| |
| == Examples |
| |
| * To schedule the integration pod(s) on a specific node using the https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#interlude-built-in-node-labels[built-in node label] `kubernetes.io/hostname`: |
| [source,shell] |
| $ kamel run -t affinity.node-affinity-labels="kubernetes.io/hostname in(node-66-50.hosted.k8s.tld)" ... |
| |
| * To schedule a single integration pod per node (using the `Exists` operator): |
| [source,shell] |
| $ kamel run -t affinity.pod-anti-affinity-labels="camel.apache.org/integration" ... |
| |
| * To co-locate the integration pod(s) with other integration pod(s): |
| [source,shell] |
| $ kamel run -t affinity.pod-affinity-labels="camel.apache.org/integration in(it1, it2)" ... |
| |
| The labels options follow the requirements from https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors[Label selectors]. They can be multi-valuated, then the requirements list is ANDed, e.g., to schedule a single integration pod per node AND not co-located with the Camel K operator pod(s): |
| [source,shell] |
| $ kamel run -t affinity.pod-anti-affinity-labels="camel.apache.org/integration" -t affinity.pod-anti-affinity-labels="camel.apache.org/component=operator" ... |
| |
| More information can be found in the official Kubernetes documentation about https://kubernetes.io/docs/concepts/configuration/assign-pod-node/[Assigning Pods to Nodes]. |