我已经设置了一个Kubernetes 1.5集群,其中三个主节点被污染为dedicated = master:NoSchedule . 现在我只想在主节点上部署Nginx入口控制器,所以我增加了容忍度:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-ingress-controller
namespace: kube-system
labels:
kubernetes.io/cluster-service: "true"
spec:
replicas: 3
template:
metadata:
labels:
k8s-app: nginx-ingress-lb
name: nginx-ingress-lb
annotations:
scheduler.alpha.kubernetes.io/tolerations: |
[
{
"key": "dedicated",
"operator": "Equal",
"value": "master",
"effect": "NoSchedule"
}
]
spec:
[…]
不幸的是,这没有达到预期效果:Kubernetes安排 Worker 的所有Pod . 将副本数量扩展到更大数量时,Pod也会部署在工作者上 .
如何才能实现主节点的调度?
谢谢你的帮助 .
2 回答
您可能想深入了解Assigning Pods to Nodes文档 . 基本上你应该为你的节点添加一些标签,如下所示:
然后在
Pod
规范中引用它,如下所示:但是当特定节点被污染时,我不确定这是否适用于非关键插件 . 更多细节可以找到here
容忍并不意味着必须在具有此类污点的节点上安排pod . 这意味着吊舱容忍这种污点 . 如果您希望pod对于特定节点"attracted",则需要将 label 附加到您的专用=主要受污染节点,并在pod中设置nodeSelector以查找此类标签 .
将标签附加到每个特殊用途节点:
Kubernetes 1.6及以上语法
将nodeSelector添加到您的pod:
如果您不喜欢
nodeSelector
,可以在spec:
下添加affinity:
:Pre 1.6语法
将nodeSelector添加到您的pod:
如果你不喜欢
nodeSelector
,你也可以添加这样的注释:请记住,NoSchedule不会驱逐已安排的pod .
以上信息来自https://kubernetes.io/docs/user-guide/node-selection/,那里有更多细节 .