Como o nodeAffinity funciona em DaemonSets?

2

Estou tentando criar um DaemonSet com uma afinidade específica, só quero que ele crie pods em nós com type = prod. Eu uso o seguinte código de teste:

apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: test0
  namespace: kube-system
spec:
  template:
    metadata:
      labels:
        app: test0
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: type
                operator: In
                values:
                - prod
      containers:
      - name: test0
        image: gcr.io/google_containers/pause:2.0

No entanto, o kubectl sai com o seguinte erro:

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

Não sei o que estou fazendo errado aqui. Eu tentei colocar o bloco de afinidade sob o bloco de modelo também, mesmo erro.

Devo notar que o cluster ainda é o Kubernetes 1.4.8. Afinidade faz parte do Kubernetes desde 1.2, então eu não acho que seria o problema?

    
por Tim Stoop 12.04.2017 / 18:37

1 resposta

2

Encontrei a solução sozinho, aparentemente, preciso usar uma anotação:

...
spec:
  template:
    metadata:
      labels:
        app: test0
      annotations:
          scheduler.alpha.kubernetes.io/affinity: >
            {
              "nodeAffinity": {
                "requiredDuringSchedulingIgnoredDuringExecution": {
                  "nodeSelectorTerms": [
                    {
                      "matchExpressions": [
                        {
                          "key": "type",
                          "operator": "In",
                          "values": [ "prod" ]
                        }
                      ]
                    }
                  ]
                }
              }
            }
...
    
por 13.04.2017 / 15:13

Tags