在master上运行的Kubernetes应用程序 - DaemonSet

时间:2017-07-05 12:09:46

标签: docker configuration kubernetes daemon kubectl

有没有办法避免在master上执行部署为DaemonSet的应用程序? 我已经看到这是预期的行为,但我想以某种方式避免执行。

常规pod不会在master上安排,但DaemonSet pod会安排。

如果是,是否可以在yml文件中设置此信息(参数..etc ??)?

 kubectl create -f mydaemon.yml

logspri-4zwl4              1/1       Running           0          <invalid>   X.X.X.X   k8s-master-e7c355e2-0
logspri-kld2w              1/1       Running           0          <invalid>   X.X.X.X     k8s-agent-e7c355e2-0
logspri-lksrh              1/1       Running           0          <invalid>   X.X.X.X     k8s-agent-e7c355e2-1

我想避免我的pod在k8s-master-e7c355e2-0

上运行

我试过了:

annotations:
          scheduler.alpha.kubernetes.io/affinity: >
            {
              "nodeAffinity": {
                "requiredDuringSchedulingRequiredDuringExecution": {
                  "nodeSelectorTerms": [
                    {
                      "matchExpressions": [
                        {
                          "key": "kubernetes.io/role",
                          "operator": "NotIn",
                          "values": ["master"]
                        }
                      ]
                    }
                  ]
                }
              }
            }

还尝试应用以下角色(如建议的那样),但它不起作用:

kubectl get nodes
NAME                    STATUS                     AGE       VERSION
k8s-agent-e7c355e2-0    Ready                      49d       v1.5.3
k8s-agent-e7c355e2-1    Ready                      49d       v1.5.3
k8s-master-e7c355e2-0   Ready,SchedulingDisabled   49d       v1.5.3

我要表演:

VirtualBox:~/elk/logspout$ kubectl taint node k8s-master-e7c355e2-0 k8s-master-e7c355e2-0/ismaster=:NoSchedule
node "k8s-master-e7c355e2-0" tainted

即使看起来主人被污染了,我也看到应用程序总是在主人身上。

Role:           
Labels:         beta.kubernetes.io/arch=amd64
            beta.kubernetes.io/instance-type=Standard_D2
            beta.kubernetes.io/os=linux
            failure-domain.beta.kubernetes.io/region=northeurope
            failure-domain.beta.kubernetes.io/zone=0
            kubernetes.io/hostname=k8s-master-e7c355e2-0
Annotations:        volumes.kubernetes.io/controller-managed-attach-detach=true
Taints:         <none>
CreationTimestamp:  Wed, 17 May 2017 14:38:06 +0200
Phase:          
Conditions:

有什么问题? 你能给我正确的命令吗?

同样的问题报告here没有明显的解决方案:

kubectl taint nodes nameofmaster dedicated=master:NoSchedule

由于 普里斯科

2 个答案:

答案 0 :(得分:1)

https://github.com/kubernetes/kubernetes/issues/29108,你可以为你的主节点kubelet添加一个污点标志,所以守护进程中的pod甚至没有安排在那里

   --register-with-taints=node.alpha.kubernetes.io/ismaster=:NoSchedule

您需要在节点中重新启动kubelet

答案 1 :(得分:1)

Even if it seems that the master is tainted I see that the application is always on master.,我不确定是否在污点之前或之后创建了守护进程。

如果您先污染然后创建了DaemonSet,那么该pod应该被受污染的节点排斥而无需进一步配置。否则,来自DaemonSet的pod将不会自动终止。要立即驱逐现有的pod,需要NoExecute污点。

来自here

  

通常,如果将具有NoExecute效果的污点添加到节点,那么   任何不能容忍污染的豆荚都会被立即驱逐,   任何容忍污染的豆荚都不会被驱逐出去。   但是,使用NoExecute效果的容忍可以指定可选项   tolerationSeconds字段,指示pod将保持绑定的时间长度   添加污点后到节点。