= Affinity Trait

// Start of autogenerated code - DO NOT EDIT! (description)
Allows to constrain 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)
