好久没有更新了,今天在接到一个部署任务时,要求在集群中某几个机器上部署,查了一下github,有这方面的相关文档,翻译过来记录一下,有兴趣的同学也可以直接去github看官方文档
单节点部署
单节点部署使用nodeName字段进行配置。在启动的json/yaml文件中,pod的spec结构下增加字段:"nodeName":"{nodename}"
。
我们可以在master上通过指令: kubectl get nodes
看到集群中的slaver节点的nodeName和他们的标签,状态:
在创建pod或rc时,加入nodeName即可以指定将pod部署在指定的节点上,上图为例,json文件如:
{
"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"
]
}
],
"nodeName": "10.126.72.31"
}
}
}
}
那么这个名为bench的replication controller 就会将所有的pod都部署在10.126.72.31上。
指定若干机器进行部署
将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,因为选择器的意思是选择“可以被分配到的节点”,而不是指定“不可被分配到的节点”。
1.2中的新特性:node affinity
1.2即将出现功能更强大的选择器,但是目前已知,可以实现如: label:"points":"test"and"test2" 的多项选择(也就是选择label中"points"的value为"test" 或 "test2", 并且不止是"and",而是与或非的联合判断式),node affinity最终将会取代 node Selector。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。