> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Knotengruppen und Scheduling

`orchestrator`, `ingest` und `worker` unterstützen jeweils `nodeSelector`, `tolerations`, `affinity` und `podAnnotations`.

## Auf amd64 ausführen

FineParser-Images werden ausschließlich für `linux/amd64` erstellt. Wenn Ihr Cluster auch `arm64`-Knoten umfassen kann, legen Sie jede Komponente fest auf diese Architektur fest:

```yaml fineparser-values.yaml theme={null}
orchestrator:
  nodeSelector:
    kubernetes.io/arch: amd64
ingest:
  nodeSelector:
    kubernetes.io/arch: amd64
worker:
  nodeSelector:
    kubernetes.io/arch: amd64
```

## Eigene Knoten für Worker bereitstellen

Ein großer Pool kann jeden Knoten auslasten, auf dem er ausgeführt werden darf. Platzieren Sie Worker auf einer dedizierten Knotengruppe mit Taint, und betreiben Sie den Orchestrator und die Ingest-Komponente auf anderen Knoten. Für Knoten mit dem Label und Taint `fineparser.abbyy.com/pool=worker`:

```yaml fineparser-values.yaml theme={null}
worker:
  nodeSelector:
    kubernetes.io/arch: amd64
    fineparser.abbyy.com/pool: worker
  tolerations:
    - key: fineparser.abbyy.com/pool
      operator: Equal
      value: worker
      effect: NoSchedule
```

## Vorab-Pull des Worker-Images

Wenn viele Worker gleichzeitig auf einem neuen Knoten starten, können ihre Image-Pulls das Pull-Ratenlimit des kubelet erreichen und den gleichzeitigen Start ausbremsen. Ist `worker.prepull` aktiviert, warten die Worker, bis der Knoten das Image einmal gepullt hat.

```yaml fineparser-values.yaml theme={null}
worker:
  prepull:
    enabled: true
    taintKey: startup-taint.cluster-autoscaler.kubernetes.io/fineparser-image
```

Worker-Knoten müssen sich mit einem `NoSchedule`-Taint registrieren, dessen Schlüssel `taintKey` ist. Ein DaemonSet lädt das Image auf jeden neuen Knoten herunter und entfernt anschließend den Taint.

* **Karpenter:** Tragen Sie den Taint in die `startupTaints` des NodePools ein.
* **Cluster Autoscaler:** Erstellen Sie die Knoten der Knotengruppe mit dem Taint. Am Präfix des Standardschlüssels erkennt Cluster Autoscaler, dass der Taint nur vorübergehend ist.

`images.worker.pullPolicy` muss auf `IfNotPresent` gesetzt sein, und `worker.tolerations` darf den Taint nicht tolerieren. Wenn diese Funktion aktiviert ist, wird eine ClusterRole erstellt, die Nodes abrufen und patchen darf.

## Knoten-Drains und Unterbrechungen

Ein Worker, der gestoppt wird, schließt zunächst seine aktuelle Einheit ab, und zwar innerhalb einer Karenzzeit von 600 Sekunden. Wenn Ihr Knoten-Autoscaler die Drain-Dauer begrenzt, sollten Sie auf Worker-Knoten mindestens diese Zeitspanne zulassen. Wird ein Worker mitten in einer Einheit gestoppt, geht diese Einheit verloren; ein anderer Worker verarbeitet sie erneut, sobald die Lease abgelaufen ist.

Aus diesem Grund können Worker auf Spot- oder unterbrechbarer Kapazität laufen. Betreiben Sie den Orchestrator und die Ingest-Komponente hingegen auf regulärer Kapazität: Der Orchestrator verwaltet die Warteschlange, und während seines Neustarts ist die API nicht verfügbar.
