K8S之调度器-精细控制Pod分布

网友投稿 292 2022-11-04

K8S之调度器-精细控制Pod分布

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.1Accept: application/jsonContent-Type: application/json-patch+jsonHost: 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"}]' \ 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"}]' \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文件系统恢复文件》,敬请期待~

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java命令行运行错误之找不到或无法加载主类问题的解决方法
下一篇:OpenVINO2022版本Python API演示
相关文章

 发表评论

暂时没有评论,来抢沙发吧~