Как создать набор состояний с помощью nodeAffinity
Я пытаюсь создать набор состояний в kubernetes 1.9 с помощью nodeAffinity. Я нашел несколько примеров с простым выбором узла, но это не совсем то, чего я хотел бы достичь. Я хочу убедиться, что экземпляры statefulset всегда запускаются на одном узле, например так:
- StatefulPod-0 на узле-0
- StatefulPod-1 на узле-1
- StatefulPod-2 на узле-2
Я попытался пометить соответствующие узлы с помощью statefulpod-name и использовать нисходящий api в nodeselector или nodeaffinity, но я не могу создать рабочий yaml для этого.
Пример:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- nodeSelectorTerms:
matchExpressions:
- key: statefulpodname
operator: In
values:
- valueFrom:
fieldRef:
fieldPath: metadata.name
Ошибка:
ValidationError (StatefulSet.spec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution): недопустимый тип для io.k8s.api.core.v1.NodeSelector: есть "карта", ожидаемый "массив";
Пример:
nodeSelector:
statefulpodname:
- valueFrom:
fieldRef:
fieldPath: metadata.name
Ошибка:
неверный тип для io.k8s.api.core.v1.PodSpec.nodeSelector: получен "массив", ожидаемая "строка"
Есть идеи?
2 ответа
Как говорится об ошибках got "map", expected "array";
попробуйте с:
- nodeSelectorTerms:
- matchExpressions:
...
Для дальнейшего использования YAML должен быть следующим:
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: <key>
operator: <operator>
values:
- <values>
Обратите внимание на размещение знаков тире (-).