> ## 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.

# Groupes de nœuds et planification

`orchestrator`, `ingest` et `worker` acceptent chacun les paramètres `nodeSelector`, `tolerations`, `affinity` et `podAnnotations`.

## Exécution sur amd64

Les images FineParser sont compilées uniquement pour `linux/amd64`. Si votre cluster peut également exécuter des nœuds `arm64`, forcez l'architecture de chaque composant :

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

## Attribuer des nœuds dédiés aux unités de traitement

Un pool de grande taille peut saturer tous les nœuds sur lesquels il est autorisé à s'exécuter. Placez les unités de traitement sur un groupe de nœuds dédié et doté d'un taint, et exécutez l'orchestrateur et le service d'ingestion sur d'autres nœuds. Pour des nœuds portant le label et le 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
```

## Pré-téléchargement de l'image de l'unité de traitement

Lorsque de nombreuses unités de traitement démarrent en même temps sur un nouveau nœud, leurs téléchargements d'image peuvent atteindre la limite de débit de téléchargement du kubelet et ralentir ce pic de démarrage. Lorsque `worker.prepull` est activé, les unités de traitement attendent que le nœud ait téléchargé l'image une première fois.

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

Les nœuds de travail doivent s'enregistrer avec un taint `NoSchedule` dont la clé est `taintKey`. Un DaemonSet récupère l'image sur chaque nouveau nœud, puis supprime le taint.

* **Karpenter :** ajoutez le taint aux `startupTaints` du NodePool.
* **Cluster Autoscaler :** créez les nœuds du groupe de nœuds avec ce taint. Le préfixe de la clé par défaut signale à Cluster Autoscaler que le taint est temporaire.

`images.worker.pullPolicy` doit être défini sur `IfNotPresent`, et `worker.tolerations` ne doit pas tolérer le taint. L'activation de cette fonctionnalité crée un ClusterRole autorisé à lire et à modifier (patch) les Nodes.

## Drainage des nœuds et interruptions

Une unité de traitement en cours d’arrêt termine d’abord l’unité qu’elle traite, dans un délai de grâce de 600 secondes. Si l’outil de mise à l’échelle automatique de vos nœuds limite la durée de drainage, prévoyez au moins ce délai sur les nœuds de travail. Si une unité de traitement est arrêtée en cours d’unité, cette unité est perdue ; une autre unité de traitement la relance une fois le bail expiré.

C’est pourquoi les unités de traitement peuvent s’exécuter sur des capacités Spot ou préemptibles. Exécutez en revanche l’orchestrateur et le service d’ingestion sur des capacités standard : l’orchestrateur gère la file d’attente, et l’API est indisponible pendant son redémarrage.
