2017-02-09 92 views
3

我嘗試按節點部署一個POD。它可以和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並向只有小爪子的節點添加標籤,但是我會避免在羣集創建期間添加標籤,因爲這是一個額外的步驟,如果我可以避免它,它將用於最好的:)

編輯:

我更改爲(給出的答案),我認爲這是正確的,但它並沒有幫助,我仍然有一個吊艙上部署:

- 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是這樣做的,爲什麼使用部署類它不部署它,但由於某種原因它不適用於守護進程集 –

+0

將註釋移動到pod定義沒有幫助(請看我的問題的編輯部分) –

+0

你可以做'kubectl獲取版本'嗎?我在問,因爲DaemonSet表明存在一個問題,並且該特性可能不支持您的特定版本。請參閱https://github.com/kubernetes/kubernetes/pull/31907 –