Kubernetes 使用Kops创建的集群-使用守护程序逐节点部署一个pod避免主节点

Kubernetes 使用Kops创建的集群-使用守护程序逐节点部署一个pod避免主节点,kubernetes,Kubernetes,我试着一个节点一个节点地部署一个吊舱。当使用kubeup创建集群时,它可以很好地处理这类守护程序。但是我们使用kops迁移了集群创建,并且使用kops,主节点是集群的一部分 我注意到主节点定义了一个特定的标签:kubernetes.io/role=master 并带有污点:scheduler.alpha.kubernetes.io/taints:[{“key”:“专用”、“值”:“master”、“effect”:“NoSchedule”}] 但它并没有停止部署带有守护程序的pod 所以我尝试添

我试着一个节点一个节点地部署一个吊舱。当使用kubeup创建集群时,它可以很好地处理这类守护程序。但是我们使用kops迁移了集群创建,并且使用kops,主节点是集群的一部分

我注意到主节点定义了一个特定的标签:
kubernetes.io/role=master

并带有污点:scheduler.alpha.kubernetes.io/taints:
[{“key”:“专用”、“值”:“master”、“effect”:“NoSchedule”}]

但它并没有停止部署带有守护程序的pod

所以我尝试添加
调度器.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
但它不起作用。有人知道为什么吗? 我目前的解决方法是使用
nodeSelector
并向仅为minion的节点添加标签,但我会避免在集群创建过程中添加标签,因为这是一个额外的步骤,如果我可以避免,这将是最好的:)

编辑:

我改变了主意(给出了答案),我认为这是对的,但没有帮助,我仍然在上面部署了一个吊舱:

- 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

只需将注释移动到pod
模板:
部分(在
元数据:
下)

或者,主节点(您可以删除注释):


我建议您继续阅读。

我认为kops正在这样做,这就是为什么部署类不在其上部署,但由于某些原因,它对守护进程不起作用将注释移动到pod定义没有帮助(查看我问题的编辑部分)您能做什么
kubectl获取版本
?我这样问是因为守护程序有一个关于污点的问题,您的特定版本可能不支持该功能。看见jenkins@jenkins:/home/azureuser$kubectl version客户端版本:version.Info{Major:“1”,Minor:“4”,GitVersion:“v1.4.0”,GitCommit:“a16c0a7f71a6f93c7e0f22d961f4675cd97a46b”,gittrestate:“clean”,BuildDate:“2016-09-26T18:16:57Z”,GoVersion:“go1.6.3”,编译器:“gc”,平台:“linux/amd64”}无法从服务器读取服务器版本:服务器不允许访问请求的资源您可以尝试对主机的主机名(
kubernetes.io/hostname
)进行反关联吗?
kubectl taint nodes nameofmaster dedicated=master:NoSchedule