Skip to content

Commit 91b0bb9

Browse files
committed
MULTIARCH-5423 adding doc on ENOEXEC monitoring
1 parent e8c4f6d commit 91b0bb9

File tree

1 file changed

+16
-8
lines changed

1 file changed

+16
-8
lines changed

modules/multi-arch-creating-podplacment-config.adoc

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,17 @@
66
[id="multi-architecture-creating-podplacement-config_{context}"]
77
= Creating the ClusterPodPlacementConfig object
88

9-
After installing the Multiarch Tuning Operator, you must create the `ClusterPodPlacementConfig` object. When you create this object, the Multiarch Tuning Operator deploys an operand that enables architecture-aware workload scheduling.
9+
After installing the Multiarch Tuning Operator, you must create a `ClusterPodPlacementConfig` object. This object instructs the operator to deploy its operand, which enables architecture-aware workload scheduling across your cluster.
10+
11+
The `ClusterPodPlacementConfig` object supports two optional plugins:
12+
13+
* The **node affinity scoring** plugin patches pods to set soft preferences, using weighted affinities, for the architectures specified by the user. Pods are more likely to be scheduled on nodes running architectures with higher weights.
14+
* The **exec format error monitor** plugin detects `ENOEXEC` errors, which occur when a pod attempts to execute a binary incompatible with the node's architecture. When enabled, this plugin generates events in the affected pod's event stream. It triggers a `ExecFormatErrorsDetected` Prometheus alert if one or more `ENOEXEC` errors are detected within the last six hours. These errors can result from incorrect architecture node selectors, invalid image metadata that affects architecture-aware workload scheduling, an incorrect binary in an image, or an incompatible binary injected at runtime.
1015
1116
[NOTE]
1217
====
1318
You can create only one instance of the `ClusterPodPlacementConfig` object.
14-
====
19+
====
1520

1621
.Example `ClusterPodPlacementConfig` object configuration
1722
[source,yaml]
@@ -24,7 +29,7 @@ spec:
2429
logVerbosityLevel: Normal <2>
2530
namespaceSelector: <3>
2631
matchExpressions:
27-
- key: multiarch.openshift.io/exclude-pod-placement
32+
- key: multiarch.openshift.io/exclude-pod-placement
2833
operator: DoesNotExist
2934
plugins: <4>
3035
nodeAffinityScoring: <5>
@@ -34,16 +39,19 @@ spec:
3439
weight: 100 <9>
3540
- architecture: arm64
3641
weight: 50
42+
execFormatErrorMonitor:
43+
enabled: true <10>
3744
----
38-
<1> You must set this field value to `cluster`.
39-
<2> Optional: You can set the field value to `Normal`, `Debug`, `Trace`, or `TraceAll`. The value is set to `Normal` by default.
45+
<1> You must set this field value to `cluster`.
46+
<2> Optional: You can set the field value to `Normal`, `Debug`, `Trace`, or `TraceAll`. The value is set to `Normal` by default.
4047
<3> Optional: You can configure the `namespaceSelector` to select the namespaces in which the Multiarch Tuning Operator's pod placement operand must process the `nodeAffinity` of the pods. All namespaces are considered by default.
4148
<4> Optional: Includes a list of plugins for architecture-aware workload scheduling.
42-
<5> Optional: You can use this plugin to set architecture preferences for pod placement. When enabled, the scheduler first filters out nodes that do not meet the pods requirements. Then, it prioritizes the remaining nodes based on the architecture scores defined in the `nodeAffinityScoring.platforms` field.
49+
<5> Optional: You can use this plugin to set architecture preferences for pod placement. When enabled, the scheduler first filters out nodes that do not meet the pod's requirements. Then, it prioritizes the remaining nodes based on the architecture scores defined in the `nodeAffinityScoring.platforms` field.
4350
<6> Optional: Set this field to `true` to enable the `nodeAffinityScoring` plugin. The default value is `false`.
4451
<7> Optional: Defines a list of architectures and their corresponding scores.
4552
<8> Specify the node architecture to score. The scheduler prioritizes nodes for pod placement based on the architecture scores that you set and the scheduling requirements defined in the pod specification. Accepted values are `arm64`, `amd64`, `ppc64le`, or `s390x`.
4653
<9> Assign a score to the architecture. The value for this field must be configured in the range of `1` (lowest priority) to `100` (highest priority). The scheduler uses this score to prioritize nodes for pod placement, favoring nodes with architectures that have higher scores.
54+
<10> Optional: Set this field to `true` to enable the `execFormatErrorMonitor` plugin. When enabled, the plugin detects `ENOEXEC` errors, caused when a pod executes a binary incompatible with the node's architecture. The plugin generates events in the affected pods, and triggers the `ExecFormatErrorsDetected` Prometheus alert if one or more errors are found in the last six hours.
4755

4856
In this example, the `operator` field value is set to `DoesNotExist`. Therefore, if the `key` field value (`multiarch.openshift.io/exclude-pod-placement`) is set as a label in a namespace, the operand does not process the `nodeAffinity` of the pods in that namespace. Instead, the operand processes the `nodeAffinity` of the pods in namespaces that do not contain the label.
4957

@@ -53,10 +61,10 @@ If you want the operand to process the `nodeAffinity` of the pods only in specif
5361
namespaceSelector:
5462
matchExpressions:
5563
- key: multiarch.openshift.io/include-pod-placement
56-
operator: Exists
64+
operator: Exists
5765
----
5866

59-
In this example, the `operator` field value is set to `Exists`. Therefore, the operand processes the `nodeAffinity` of the pods only in namespaces that contain the `multiarch.openshift.io/include-pod-placement` label.
67+
In this example, the `operator` field value is set to `Exists`. Therefore, the operand processes the `nodeAffinity` of the pods only in namespaces that contain the `multiarch.openshift.io/include-pod-placement` label.
6068

6169
[IMPORTANT]
6270
====

0 commit comments

Comments
 (0)