将slaver节点机器按照它们的labels进行归类。使用"nodeSelector"进行选择。
管理node的标签
使用kubectl label nodes {nodename} {key=value}
进行标签的添加。如:
kubectl label nodes 10.126.72.31 points=test
会给10.126.72.31这个节点添加一个标签:points=test
我们给31.32两台机器同时加上这个标签。
使用nodeSelector选择器
类似于上文的nodeName
,在创建资源的json/yaml文件中使用nodeSelector
字段,如:
{
"apiVersion": "v1",
"kind": "ReplicationController",
"metadata": {
"labels": {
"name": "benchcpu"
},
"name": "benchcpu-controller"
},
"spec": {
"replicas": 3,
"selector": {
"name": "benchcpu"
},
"template": {
"metadata": {
"labels": {
"name": "benchcpu"
}
},
"spec": {
"containers": [
{
"image": "registry.hub.huangyang.com.cn/sysbench:0.5shell",
"name": "sysbench",
"command":[
"./todo.sh",
"--num-threads=1 --forced-shutdown=1 --max-time=60 --test=cpu --cpu-max-prime=10000000 run ",
"0"
]
}
],
"nodeSelector":{
"points":"test"
}
}
}
}
}
即可将pod指定到31或32上部署运行。
不论是nodeName,nodeSelector,还是下文提到的 node affinity,针对他们的过滤条件,即使目前没有满足过滤条件的node,master也会指派至少一个node去部署pod,因为选择器的意思是选择“可以被分配到的节点”,而不是指定“不可被分配到的节点”。