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

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

正常的豆荚不会在主菜单上安排,但是DaemonSet豆荚则可以。

如果是的话,是否可以在yml文件中设置这个信息(parameter .. etc ??)?

kubectl create -f mydaemon.yml logspri-4zwl4 1/1 Running 0 <invalid> XXXX k8s-master-e7c355e2-0 logspri-kld2w 1/1 Running 0 <invalid> XXXX k8s-agent-e7c355e2-0 logspri-lksrh 1/1 Running 0 <invalid> XXXX 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"] } ] } ] } } } 

也尝试应用以下angular色(如build议),但不起作用:

 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: 

哪里不对? 你能给我正确的命令吗?

同样的问题在这里没有明显的解决scheme报道:

 kubectl taint nodes nameofmaster dedicated=master:NoSchedule 

感谢Prisco

https://github.com/kubernetes/kubernetes/issues/29108 ,您可以添加一个污点标志到您的主节点kubelet,所以即使在DaemonSet中的豆荚也不在那里

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

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

Even if it seems that the master is tainted I see that the application is always on master. ,我不确定是否在恶意之前或之后创build了DaemonSet。

如果你先染了然后创build了DaemonSet,那么应该在没有进一步configuration的情况下,将污染的节点排斥在pod上。 否则,DaemonSet中的pod将不会自动终止。 要立即驱逐现有的豆荚,需要执行“不执行NoExecute污点。

从这里 :

通常情况下,如果一个具有NoExecute效果的污点被添加到一个节点,那么任何不能容忍污染的豆荚都将被立即驱逐,任何容忍污染的豆荚都不会被驱逐。 但是,使用NoExecute效果的容忍可以指定一个可选的tolerationSeconds字段,该字段指示在添加污点之后,Pod将保持绑定到节点的时间。