концептуально аналогичен nodeSelector
- он позволяет вам ограничивать, на какие узлы ваш модуль может планироваться, основываясь на метках на узле.
В настоящее время существует два типа сходства узлов, называемые requiredDuringSchedulingIgnoredDuringExecution
и preferredDuringSchedulingIgnoredDuringExecution
. Вы можете думать о них как о «жестких» и «мягких», соответственно, в том смысле, что первый определяет правила, которым должно быть выполнено для того, чтобы модуль планировался на узле (точно так же как nodeSelector
, но используя более выразительный синтаксис), в то время как последний указывает предпочтения , которые планировщик попытается применить, но не будет гарантировать. Часть имен «IgnoredDuringExecution» означает, что, подобно тому, как работает nodeSelector
, если метки на узле изменяются во время выполнения так, что правила соответствия на модуле больше не выполняются, модуль все равно будет продолжать работать на узле , В будущем мы планируем предложить requiredDuringSchedulingRequiredDuringExecution
, который будет точно таким же, как requiredDuringSchedulingIgnoredDuringExecution
, за исключением того, что он будет высвобождать модули из узлов, которые перестают удовлетворять требованиям сходства узлов модулей.
Таким образом, пример requiredDuringSchedulingIgnoredDuringExecution
будет «запускать модуль только на узлах с процессорами Intel», а в качестве примера preferredDuringSchedulingIgnoredDuringExecution
будет «попытаться запустить этот набор модулей в зоне отказа XYZ, но если это невозможно, то разрешить некоторым запускаться в другом месте».
Узел сходства задается как поле nodeAffinity
поля affinity
в PodSpe c.
...
Новый синтаксис сходства узлов поддерживает следующие операторы: In
, NotIn
, Exists
, DoesNotExist
, Gt
, Lt
. Вы можете использовать NotIn
и DoesNotExist
для достижения антиаффинного поведения узлов или использовать портить ноды для отталкивания модулей от указанных c узлов.
Если указать оба nodeSelector
и nodeAffinity
, оба должны быть выполнены для того, чтобы модуль был запланирован на узле-кандидате.
Если указать несколько nodeSelectorTerms
, связанных с типами nodeAffinity
, то модуль может быть запланировано на узел , только если все nodeSelectorTerms
могут быть удовлетворены.
Если вы задаете несколько matchExpressions
, связанных с nodeSelectorTerms
, то модуль может быть запланирован на узел если один из удовлетворяет matchExpressions
.