2017-02-09 6 views
3

Я пытаюсь развернуть один узел по узлу. Он отлично работает с видом daemonSet и когда кластер создается с помощью kubeup. Но мы перенесли создание кластера с помощью kops и с kops главный узел является частью кластера.кластер, созданный с помощью Kops - развертывание одного узла по узлу с помощью DaemonSet, исключающего главный узел

Я заметил, что главный узел определяется с определенной меткой: kubernetes.io/role=master

и с заразы: scheduler.alpha.kubernetes.io/taints: [{"key":"dedicated","value":"master","effect":"NoSchedule"}]

Но это не мешает иметь стручок развертывается на нем DaemonSet

Так я пытался добавить scheduler.alpha.kubernetes.io/affinity:

- apiVersion: extensions/v1beta1 
    kind: DaemonSet 
    metadata: 
    name: elasticsearch-data 
    namespace: ess 
    annotations: 
     scheduler.alpha.kubernetes.io/affinity: > 
     { 
      "nodeAffinity": { 
      "requiredDuringSchedulingRequiredDuringExecution": { 
       "nodeSelectorTerms": [ 
       { 
        "matchExpressions": [ 
        { 
         "key": "kubernetes.io/role", 
         "operator": "NotIn", 
         "values": ["master"] 
        } 
        ] 
       } 
       ] 
      } 
      } 
     } 
    spec: 
    selector: 
     matchLabels: 
     component: elasticsearch 
     type: data 
     provider: fabric8 
    template: 
     metadata: 
     labels: 
      component: elasticsearch 
      type: data 
      provider: fabric8 
     spec: 
     serviceAccount: elasticsearch 
     serviceAccountName: elasticsearch 
     containers: 
      - env: 
       - name: "SERVICE_DNS" 
       value: "elasticsearch-cluster" 
       - name: "NODE_MASTER" 
       value: "false" 
      image: "essearch/ess-elasticsearch:1.7.6" 
      name: elasticsearch 
      imagePullPolicy: Always 
      ports: 
       - containerPort: 9300 
       name: transport 
      volumeMounts: 
       - mountPath: "/usr/share/elasticsearch/data" 
       name: task-pv-storage 
     volumes: 
      - name: task-pv-storage 
      persistentVolumeClaim: 
       claimName: task-pv-claim 
     nodeSelector: 
      minion: true 

Но я t не работает. Кто-нибудь знает, почему? Обходной путь, который у меня есть сейчас, - использовать nodeSelector и добавить метку к узлам, которые являются только minion, но я бы избегал добавлять ярлык во время создания кластера, потому что это дополнительный шаг, и если бы я мог его избежать, это было бы для лучший :)

EDIT:

я изменил, что (учитывая ответ) и я думаю, что это правильно, но это не помогает, я до сих пор стручок развернут на нем:

- apiVersion: extensions/v1beta1 
    kind: DaemonSet 
    metadata: 
    name: elasticsearch-data 
    namespace: ess 
    spec: 
    selector: 
     matchLabels: 
     component: elasticsearch 
     type: data 
     provider: fabric8 
    template: 
     metadata: 
     labels: 
      component: elasticsearch 
      type: data 
      provider: fabric8 
     annotations: 
      scheduler.alpha.kubernetes.io/affinity: > 
      { 
       "nodeAffinity": { 
       "requiredDuringSchedulingRequiredDuringExecution": { 
        "nodeSelectorTerms": [ 
        { 
         "matchExpressions": [ 
         { 
          "key": "kubernetes.io/role", 
          "operator": "NotIn", 
          "values": ["master"] 
         } 
         ] 
        } 
        ] 
       } 
       } 
      } 
     spec: 
     serviceAccount: elasticsearch 
     serviceAccountName: elasticsearch 
     containers: 
      - env: 
       - name: "SERVICE_DNS" 
       value: "elasticsearch-cluster" 
       - name: "NODE_MASTER" 
       value: "false" 
      image: "essearch/ess-elasticsearch:1.7.6" 
      name: elasticsearch 
      imagePullPolicy: Always 
      ports: 
       - containerPort: 9300 
       name: transport 
      volumeMounts: 
       - mountPath: "/usr/share/elasticsearch/data" 
       name: task-pv-storage 
     volumes: 
      - name: task-pv-storage 
      persistentVolumeClaim: 
       claimName: task-pv-claim 

ответ

0

Просто переместите аннотацию в podtemplate: раздел (под metadata:).

В качестве альтернативы taint главный узел (и вы можете удалить аннотацию):

kubectl taint nodes nameofmaster dedicated=master:NoSchedule 

Я предлагаю вам прочитать на taints and tolerations.

+0

Я думаю, что kops делает это потому, что с видом развертывания он не развертывается на нем, но по какой-то причине он не работает для daemonSet –

+0

, перемещение аннотации в определение элемента не помогло (посмотрите раздел EDIT моего вопроса) –

+0

Можете ли вы сделать 'kubectl get version'? Я спрашиваю, потому что возникла проблема с DaemonSet, который почитает taints, и эта функция может не поддерживаться в вашей конкретной версии. См. Https://github.com/kubernetes/kubernetes/pull/31907 –