网站首页 > 博客文章 正文
k8s pod的调度可以通过污点-容忍或者cpu、内存资源需要来控制,但是这两种方法均有缺点,无法很好地精确控制pod调度到某节点的数量。
需要规定某些节点对应这类型pod最多只能启动N个。实现方法有两种:
一、利用Request和Limit
这种方法,计算单个pod消耗资源大小与node所拥有的资源,在deplyomet上面设置对应的资源配置即可。由于这种方法是通过计算当前node的剩余资源满足条件才会触发调度,假设我需要预留剩余资源给其他类型pod,这样还需要把其他类型的pod的消耗也考虑进来,并且因为调度顺序的关系,没办法精确不同类型pod的数量。
requests:
cpu: "100m"
memory: "21474836480"
limits:
cpu: "100m"
memory: "21474836480"
假设总共CPU资源是10 要让A、B两种资源各最多只能启动5个Pod,那么A pod 的requests cpu是5 ,B pod的request cpu也是5,但是实际情况会出现A pod启动了6个,B pod启动了4个。显然是没办法满足要求的。
二、利用节点扩展资源的方法
第2种方法在node上发布一种新的扩展资源(假设这种资源名字dongle),并且规定这种资源的数目4。在deplyomet上面设置特定消耗这种数量。具体操作如下:
发送一个HTTP PATCH请求到Kubernetes API server。
PATCH /api/v1/nodes/k8snode/status HTTP/1.1
Accept: application/json
Content-Type: application/json-patch+json
Host: k8s-master:8080
[
{
"op": "add",
"path": "/status/capacity/example.com~1dongle",
"value": "4"
}
]
shell命令如下:
kubectl proxy ## 启动一个代理(proxy),才能以curl方式 发送请求 到Kubernetes API server
curl --header "Content-Type: application/json-patch+json" \
--request PATCH \
--data '[{"op": "add", "path": "/status/capacity/example.com~1dongle", "value": "4"}]' \
http://localhost:8001/api/v1/nodes/k8snode/status
查看节点信息可以看到Capacity有dongle资源4个
Capacity:
cpu: 4
ephemeral-storage: 20511312Ki
example.com/dongle: 4
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 8791660Ki
pods: 110
扩展资源必须以整形数量进行发布。例如,一个节点可以发布4个dongle资源,但是不能发布4.5个。
如果你想要允许针对特殊存储任意(数量)的请求,你可以按照1字节大小的块来发布特殊存储。譬如在数量上填800Gi, 那么
example.com/special-storage类型的资源数量就是1000x1000x1000x800个。
Capacity:
...
example.com/special-storage: 800Gi
也可以发送HTTP PATCH请求 清理删除资源。
curl --header "Content-Type: application/json-patch+json" \
--request PATCH \
--data '[{"op": "remove", "path": "/status/capacity/example.com~1dongle"}]' \
http://localhost:8001/api/v1/nodes/k8snode/status
验证使用方法
在deployment配置上加上requests example.com/dongle: 1,appy之后再查看node剩余dongle的数量由4减少为3。
resources:
limits:
#memory: 1Gi
#cpu: 500m
example.com/dongle: 1
requests:
example.com/dongle: 1
memory: 256Mi
cpu: 200m #10万微秒的CPU可以给用100微秒
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 1050m (26%) 500m (12%)
memory 496Mi (5%) 1364Mi (16%)
ephemeral-storage 0 (0%) 0 (0%)
hugepages-1Gi 0 (0%) 0 (0%)
hugepages-2Mi 0 (0%) 0 (0%)
example.com/dongle 3 3
假设需要在这个节点上,精确控制POD A数量为5, POD B数量为5 ,只需要节点上增加2个新的资源, 两种类型的POD消耗各自对应的资源。
利用节点扩展资源的方法,我们可以控制特定类型pod在节点的数量。
以上就是关于今天的全部内容,下期将给大家带来《如何使用Linux Live CD从 Ext3文件系统恢复文件》,敬请期待~
- 上一篇: Linux服务器日常巡检脚本分享
- 下一篇: HTTP/HTTPS协议基础
猜你喜欢
- 2025-05-21 上传图片到cloudflare r2
- 2025-05-21 wordpress通过代码实现百度主动推送和实时推送
- 2025-05-21 百度实时推送代码解决方案
- 2025-05-21 Elasticsearch的路由routing的应用技巧
- 2025-05-21 技巧:PHP版本怎样隐藏在Linux服务器
- 2025-05-21 Python 进阶-day24: API 开发
- 2025-05-21 kubectl常用删除命令
- 2025-05-21 HTTP 的常见头字段有哪些?说说它们的作用
- 2025-05-21 网络编程神器:让你的网络编程不再踩坑
- 2025-05-21 HTTP/HTTPS协议基础
你 发表评论:
欢迎- 05-21上传图片到cloudflare r2
- 05-21wordpress通过代码实现百度主动推送和实时推送
- 05-21百度实时推送代码解决方案
- 05-21Elasticsearch的路由routing的应用技巧
- 05-21技巧:PHP版本怎样隐藏在Linux服务器
- 05-21Python 进阶-day24: API 开发
- 05-21kubectl常用删除命令
- 05-21HTTP 的常见头字段有哪些?说说它们的作用
- 377℃手把手教程「JavaWeb」优雅的SpringMvc+Mybatis整合之路
- 372℃用AI Agent治理微服务的复杂性问题|QCon
- 364℃初次使用IntelliJ IDEA新建Maven项目
- 356℃Maven技术方案最全手册(mavena)
- 353℃安利Touch Bar 专属应用,让闲置的Touch Bar活跃起来!
- 351℃InfoQ 2024 年趋势报告:架构篇(infoq+2024+年趋势报告:架构篇分析)
- 351℃IntelliJ IDEA 2018版本和2022版本创建 Maven 项目对比
- 346℃IT全明星|IntelliJ IDEA学习笔记(四、idea中怎么创建maven项目)
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)