好久没有更新了,今天在接到一个部署任务时,要求在集群中某几个机器上部署,查了一下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。