网站首页 > 文章精选 正文
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文件系统恢复文件》,敬请期待~
猜你喜欢
- 2025-07-09 别被云原生忽悠了:接地气的 K8s 生产落地长这样
- 2025-07-09 简单了解下Kubernetes网络通信(kubernetes网络模型)
- 2025-07-09 pod结构说明-运行容器的容器(容器中pod是什么意思)
- 2025-07-09 佚名运维 k8s 训练营 - 第1天(k8s运维是什么)
- 2025-07-09 k8s实践(三):pod常用操作(k8s pod service deployment)
- 2025-07-09 Kubernetes 核心概念全景图:Pod、Node、Cluster、Control Plane 等
- 2025-07-09 【超融合云计算中心】核心K8S容器实践应用指南
- 2025-07-09 Kubernetes从零到精通(01-简介)(kubernetes入门教程)
- 2025-07-09 service详解(service理解)
- 2025-07-09 kubernetes基本概念(kubernetes架构详解)
- 最近发表
-
- 五分钟轻松熟悉一个k8s Operator应用制作
- iLogtail 使用入门 - K8S 环境日志采集到 SLS
- k8s之配置CNI网络(k8s 网络配置)
- Linux系统K8S集群架构及常用操作命令之K9S安装及使用
- Centos 安装部署Kubernetes(K8s)(k8s环境搭建 centos)
- 集群外部署Prometheus+Grafana监控K8S解析
- k8s安装UI管理工具Kuboard安装(k8s安装步骤)
- k8s中使用Helm安装生产级别redis集群
- K8s集群(K8s集群添加新节点更新步骤)
- Kubernetes (k8s) 基本命令速查(k8s kubernetes教程)
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)