有没有办法避免在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
由于 普里斯科
答案 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将保持绑定的时间长度 添加污点后到节点。