在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将保持绑定到节点的时间。