暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

用extended-resource解决磁盘的调度问题

吐核CoreDump 2019-07-30
281


默认情况下k8s的资源中并没有磁盘大小的资源情况,但是提供了个extended resource的功能,可以用于扩展自己的资源

根据 https://kubernetes.io/docs/tasks/administer-cluster/extended-resource-node/ 中的内容,只需要给node的接口发个PATCH命令

把资源填上就好,所以可以简单的写个脚本

diskSize=$(df -k xxxx) #或者是其他命令拿到lvm或者devicemapper相关盘的大小
curl --header "Content-Type: application/json-patch+json" \

--request PATCH \

--data '[{"op": "add", "path": "/status/capacity/example.com~1disk", "value": "$diskSize"}]' \

http://localhost:8001/api/v1/nodes/<your-node-name>/status

把这个脚本部署在node节点上,可以丢到kubelet的systemctl配置中,随kubelet的启动Prestart执行下,毕竟正常情况下磁盘大小不会动态变化

这样kubectl get node的时候就可以看到多了个资源,另外一个方案是写个deviceplugin 自动上报,不过感觉没太大必要,毕竟这是个脚本就能搞定的事情


这样当我们去使用磁盘的时候可以在request中直接添加磁盘相关信息,k8s的调度器会自动计算这部分的资源,加入到调度的逻辑中。

这里还有个小的优化点:我们通常都是使用flexvolume来使用node上的本地盘,这里需要用户在2个地方指定size信息,所以我们可以用个admission plugin去自动把flexvolume plugin中的内容提取出来,填写到request中,也可以用admission webhook的方式实现(这个有空看看有没有什么好的用脚本实现的方法)

文章转载自吐核CoreDump,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论