博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
kubernetes节点选择器
阅读量:6434 次
发布时间:2019-06-23

本文共 3022 字,大约阅读时间需要 10 分钟。

好久没有更新了,今天在接到一个部署任务时,要求在集群中某几个机器上部署,查了一下github,有这方面的相关文档,翻译过来记录一下,有兴趣的同学也可以直接去github看

单节点部署

单节点部署使用nodeName字段进行配置。在启动的json/yaml文件中,pod的spec结构下增加字段:"nodeName":"{nodename}"

我们可以在master上通过指令: kubectl get nodes看到集群中的slaver节点的nodeName和他们的标签,状态:

clipboard.png

在创建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"进行选择。

  1. 管理node的标签

    使用kubectl label nodes {nodename} {key=value} 进行标签的添加。如:

kubectl  label nodes 10.126.72.31 points=test

会给10.126.72.31这个节点添加一个标签:points=test

我们给31.32两台机器同时加上这个标签。

  1. 使用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://rqhga.baihongyu.com/

你可能感兴趣的文章
build.xml引用其它文件的任务
查看>>
POJ2121 Inglish-Number Translator
查看>>
第 25 章 OpenManage
查看>>
Linux命令行上执行操作,不退回命令行的解决方法
查看>>
【AngularJS】—— 8 自定义指令
查看>>
零元学Expression Blend 4 - Chapter 36 来玩捉迷藏吧!!!看看ScrollBar的Disabled与Hidden之差异...
查看>>
AlarmManager机制和系统唤醒锁的总结
查看>>
零元学Expression Blend 4 - Chapter 38 看如何使用Clip修出想要的完美曲线(下)
查看>>
158.5. manifests
查看>>
glyphicon halflings regular ttf 报错
查看>>
公众号临时预览链接转永久链接怎么操作
查看>>
DAU新解
查看>>
Java实现简易的文件的迁移器
查看>>
golang ffmpeg 做网络直播
查看>>
Windows 7平台安装Oracle Client 10g版本时需要做的一点变更
查看>>
Oracle Online Redefinition在线重定义(下)
查看>>
扩展GridView控件——为内容项添加拖放及分组功能
查看>>
PHP命名空间学习笔记
查看>>
4.19. 在线用户表
查看>>
解读SQL 内存数据库的细节
查看>>