Node Affinity — это механизм, который позволяет задавать гибкие правила для размещения подов, основываясь на метках узлов. В отличие от nodeSelector, он поддерживает мягкие (preferred) и жёсткие (required) правила
🛠 Как это работает:
В Kubernetes есть два ключевых типа правил:
1️⃣
requiredDuringSchedulingIgnoredDuringExecution — жёсткие требования, под не будет запущен, если узел не соответствует правилам.2️⃣
preferredDuringSchedulingIgnoredDuringExecution — мягкие предпочтения, Kubernetes попытается запустить под на узле, который соответствует описанию предпочтений, но если такого нет, выберет любой свободный.Пример YAML-манифеста:
apiVersion: v1
kind: Pod
metadata:
name: gpu-app
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: "gpu"
operator: "In"
values:
- "true"
containers:
- name: app
image: my-gpu-app
Этот под будет запускаться только на узлах, у которых есть метка gpu=true.
📄 Подробнее в документации
🐸Библиотека devops'a
