nodeAffinity 在 DaemonSets 中如何工作?

nodeAffinity 在 DaemonSets 中如何工作?

我正在尝试创建具有特定亲和性的 DaemonSet,我希望它仅在 type=prod 的节点上创建 Pod。我使用以下测试代码:

api版本:extensions/v1beta1
种类:DaemonSet
元数据:
  名称:test0
  命名空间: kube-system
規格:
  模板:
    元数据:
      标签:
        应用程序:test0
    規格:
      亲和力:
        节点亲和性:
          调度期间必需,执行期间忽略:
            节点选择器条款:
            - 匹配表达式:
              - 键:类型
                操作符:In
                值:
                - 产品
      容器:
      -名称:test0
        图片:gcr.io/google_containers/pause:2.0

但是,kubectl 退出并出现以下错误:

error: error validating "test.yaml": error validating data: found invalid field affinity for v1.PodSpec; if you choose to ignore these errors, turn validation off with --validate=false

我不知道我在这里做错了什么。我也尝试将亲和性块放在模板块下,但出现了同样的错误。

不过,我应该指出,集群仍然是 Kubernetes 1.4.8。Affinity 自 1.2 版以来一直是 Kubernetes 的一部分,所以我认为这不是问题?

答案1

我自己找到了解决方案,显然我需要使用注释:

...
規格:
  模板:
    元数据:
      标签:
        应用程序:test0
      注释:
          scheduler.alpha.kubernetes.io/affinity:>
            {
              “节点亲和性”:{
                “requiredDuringSchedulingIgnoredDuringExecution”:{
                  “节点选择器条款”:[
                    {
                      “匹配表达式”:[
                        {
                          “键”:“类型”,
                          “运算符”:“在”,
                          “值”:[“产品”]
                        }
                      ]
                    }
                  ]
                }
              }
            }
...

答案2

你所拥有的对我来说看起来很完美,如果我猜测它为什么不起作用,那可能是由于以下两个原因之一:

  1. 当时,nodeAffinity 不适用于守护进程集(不同的控制器),只有明确的节点选择器才有效。
  2. 或者它是一些 alpha 功能,需要在 api 服务器上启用功能标志。

我正在使用这个(只是摆弄一些东西作为实验),它看起来与你所拥有的非常相似,并且它对我来说按预期工作。

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: ingress-node
  namespace: ingress
  labels:
    ingress-node: healthz
spec:
  selector:
    matchLabels:
      ingress-node: healthz
  template:
    metadata:
      labels:
        ingress-node: healthz
    spec:
      containers:
      - name: ingress-node-identifier
        image: gcr.io/google-containers/healthz-server:1.0 
      affinity:
        nodeAffinity: 
          requiredDuringSchedulingIgnoredDuringExecution: 
            nodeSelectorTerms: 
            - matchExpressions: 
              - key: tier
                operator: In
                values:
                - ingress-east-us-1a
                - ingress-east-us-1b

相关内容