当前位置:网站首页>如何设置 Pod 到指定节点运行
如何设置 Pod 到指定节点运行
2022-06-29 19:40:00 【陈少文的网站】
1. 创建负载时,通过 nodeSelector 指定 Node
- 给节点添加标签
| |
- 指定 nodeSelector 创建工作负载
| |
- 查看工作负载
| |
符合预期,Pod 运行在指定的节点 node2 上。
- 清理环境
| |
实际上,还有另外一个节点选择参数 nodeName,直接指定节点名。但是这种设置过于生硬,而且越过了 Kubernetes 本身的调度机制,实际生产用得很少。
2. 通过准入控制将命名空间绑定到节点
创建负载时指定 nodeSelector,可以设置 Pod 运行的节点。但是如果想要绑定命名空间下全部 Pod 在指定节点下运行,就显得力不从心。而使用 kube-apiserver 的准入控制就可以达到这一目的,这是一个在 Kubernetes 1.5 时就进入 alpha 阶段的特性。
2.1 修改 kube-apiserver 参数
编辑 kube-apiserver 文件:
| |
在 admission-plugins 中新增 PodNodeSelector:
| |
这里的 NodeRestriction 是默认开启的。如果是高可用的集群,那么需要修改每一个 kube-apiserver。修改完成之后,稍等一会儿 kube-apiserver 会完成重启过程。
2.2 给 Namespace 添加注解
编辑命名空间,增加注解:
| |
| |
scheduler.alpha.kubernetes.io/node-selector 可以是节点名,也可以是 label 键值对。
2.3 为节点增加指定的 label
给 node3 节点打上 project=A 的标签:
| |
这里将命名空间 default 上的负载,绑定到了节点 node3 上。
2.4 创建负载
- 创建负载进行测试
| |
- 查看负载分布
| |
可以看到,虽然集群上有 4 个可用的节点,但是 default 空间下的负载都运行在 node3 节点之下。
2.5 清理环境
- 清理 label
| |
- 清理负载
| |
- 清理注解
kubectl edit ns default需要注意的是,如果命名空间已经开启了 scheduler.alpha.kubernetes.io/node-selector,而节点没有相关的标签,此时,Pod 将会一直处于 Pending 状态,无法得到调度,直至有符合标签的 Node 出现。
3. 利用拓扑域对节点进行分组
如下图,通过 kube-apiserver 的访问控制插件,我们可以建立模型,每个项目一个命名空间,每个命名空间包含指定的节点。这样就可以满足,业务隔离、成本计费的要求。但是随着集群越来越大,项目需要在集群下划分若干的可用区,用于保障业务的可用性。

而拓扑域主要就是解决 Pod 在集群的分布问题,可以用于实现 Pod 对节点的定向选择的需求。Kubernetes 集群调度器的拓扑域特性在 1.16 进入 Alpha 阶段,在 1.18 进入 Beta 阶段。下面我们进行一些实验:
- 将节点划分到不同的拓扑域
这里将节点 node2 划分到 zone a,将 node3、node4 划分到 zone b。
| |
| |
- 创建负载
| |
这里 topologyKey 用于指定划分拓扑域的 Key,maxSkew 表示在 zone=a、zone=b 中 Pod 数量相差不能超过 1, whenUnsatisfiable: DoNotSchedule 表示不满足条件时,不进行调度。
- 查看 Pod 分布
| |
其中在 node2 节点 10 个 Pod、node3 节点 7 个节点、node4 节点 3 个节点。可以看到,Pod 均匀地分布在 zone=a、zone=b 上。
- 清理环境
| |
4. 总结
随着集群越来越大,业务之间的隔离、业务对节点的独占等问题就会浮现出来。通常,每个业务都会有一个单独的命名空间,因此,我们可以将命名空间与节点进行绑定。
本文主要给出了两种方法,一种是创建负载时,直接设置 nodeSelector,取巧的方法是用命名空间值作为 value;另外一种方式是,借助于 kube-apiserver 提供的访问控制插件,通过注解的方式,在创建命名空间下的负载时,通过标签筛选指定节点,完成命名空间与节点之间的绑定。
再进一步考虑,如果节点数量非常庞大,需要划分可用区分散负载,那么我们可以借助于拓扑域来实现。通过拓扑域,我们可以让负载,根据配置的策略均匀的分布在指定的可用区、机柜上。
5. 参考
边栏推荐
- Arm 全面计算解决方案重新定义视觉体验强力赋能移动游戏
- 有了这4个安全测试工具,对软件安全测试say so easy!
- 2022年理财利率都降了,那该如何选择理财产品?
- 童年经典蓝精灵之百变蓝爸爸数字藏品中奖名单公布
- The concept and properties of mba-day26 number
- Game maker Foundation presents: Valley of belonging
- Rejected by a large company? Tencent experts summarized 11 reasons for being rejected!
- 揭秘!付费会员制下的那些小心机!
- DAO 中存在的不足和优化方案
- JVM(3) 类加载
猜你喜欢

Escape and March, the "two-sided Jianghu" of temporary food

JVM(4) 字节码技术+运行期优化

What about frequent network disconnection of win11 system? Solution to win11 network instability

After CDN is added to the website, the Font Icon reports an error access control allow origin

Win11 system component cannot be opened? Win11 system widget cannot be opened solution

3-3 host discovery - layer 4 discovery

The list of winners in the classic Smurfs of childhood: bluedad's digital collection was announced

La collection numérique Meng xiangshun, artiste national du tigre peint, est disponible en quantité limitée et est offerte avec Maotai de l'année du tigre

Where is the win11 installation permission set? Win11 installation permission setting method

Rejected by a large company? Tencent experts summarized 11 reasons for being rejected!
随机推荐
【U盘检测】为了转移压箱底的资料,买了个2T U盘检测仅仅只有47G~
4-1端口扫描技术
ASP.Net Core创建Razor页面上传多个文件(缓冲方式)(续)
4-2 port banner information acquisition
freeswitch拨打分机号
数据安全解决方案的大时代
Have you mastered all the testing methods of technology to ensure quality and software testing?
技术保证质量,软件测试的这些测试方法你都掌握了吗?
Freeswitch dial extension
Escape and March, the "two-sided Jianghu" of temporary food
Understanding of software test logic coverage
Mba-day19 if P then q contradictory relation P and not Q
shell bash脚本注意:单行末尾转义符 \ 后千万不能有其他无关字符(多行命令)
Physical verification LVS process and Technology (Part I)
【软件测试】01 -- 软件生命周期、软件开发模型
JVM (2) garbage collection
Game Maker 基金会呈献:归属之谷
MSYQL, redis, mongodb visual monitoring tool grafana
The list of winners in the classic Smurfs of childhood: bluedad's digital collection was announced
docker compose 部署Flask项目并构建redis服务