0

我正在尝试使用 nodeAffinity 在 kubernetes 1.9 中创建一个 statefulset。我发现了一些带有简单节点选择器的示例,但这并不是我真正想要完成的。我想确保 statefulset 实例始终在同一个节点上启动,如下所示:

  • node-0 上的 statefulpod-0
  • node-1 上的 statefulpod-1
  • node-2 上的 statefulpod-2

我尝试使用 statefulpod-name 标记相应的节点,并在 nodeselector 或 nodeaffinity 中使用向下 api,但我无法生成一个工作 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 的类型无效:得到“map”,预期为“array”;

这个例子:

nodeSelector:
  statefulpodname:
  - valueFrom:
        fieldRef:
          fieldPath: metadata.name

错误:

io.k8s.api.core.v1.PodSpec.nodeSelector 的类型无效:得到“array”,预期为“string”

有任何想法吗?

4

2 回答 2

0

为了将来参考,YAML 需要如下所示;

spec: 
 affinity:
   nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
          - matchExpressions:
            - key: <key>
              operator: <operator>
              values:
              - <values>

注意破折号 (-) 字符的位置。

于 2021-08-19T08:53:01.817 回答
0

作为错误状态got "map", expected "array";,请尝试:

- nodeSelectorTerms:
  - matchExpressions:
...
于 2018-01-12T11:11:13.797 回答