容忍并不意味着Pod必须被调度到具有这种污点的节点上,而是表示Pod可以容忍这种污点。如果您希望将Pod“吸引”到特定的节点上,则需要将标签附加到专用Master节点,并在Pod中设置nodeSelector以查找该标签。
将标签附加到每个特殊使用节点:
kubectl label nodes name_of_your_node dedicated=master
Kubernetes 1.6及以上版本的语法
将nodeSelector加入您的pod中:
apiVersion: apps/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:
spec:
nodeSelector:
dedicated: master
tolerations:
- key: dedicated
operator: Equal
value: master
effect: NoSchedule
[…]
如果你不喜欢
nodeSelector
,你可以在
spec:
下面添加
affinity:
:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
matchExpressions:
- key: dedicated
operator: Equal
values: ["master"]
1.6之前的语法
将nodeSelector添加到您的Pod中:
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:
nodeSelector:
dedicated: master
[…]
如果您不喜欢使用nodeSelector
,您也可以添加类似这样的注释:
如果您不喜欢使用nodeSelector
,您也可以添加类似这样的注释:
scheduler.alpha.kubernetes.io/affinity: >
{
"nodeAffinity": {
"requiredDuringSchedulingIgnoredDuringExecution": {
"nodeSelectorTerms": [
{
"matchExpressions": [
{
"key": "dedicated",
"operator": "Equal",
"values": ["master"]
}
]
}
]
}
}
}
请注意,NoSchedule不会驱逐已经被调度的Pod。
上述信息来自https://kubernetes.io/docs/user-guide/node-selection/,并且那里还有更多细节。
dedicated->master
标签与 k8s 自动放置的node-role.kubernetes.io/master->
标志(无值标签)进行交换? - Adirio