设为首页 收藏本站
查看: 1102|回复: 0

[经验分享] kubernetes1.5新特性:自定义资源类型

[复制链接]

尚未签到

发表于 2018-1-5 20:36:08 | 显示全部楼层 |阅读模式
一、自定义资源类型
  在Kubernetes1.5中,在CPU、内存、GPU三种类型资源的基础上新增了一种资源类型:Opaque Integer Resources,从英文直接翻译成不透明整数资源,但是我觉着应该翻译成自定义资源类型。
DSC0000.jpg

  


如上图所示:OpaqueIntResources属性是一个数组,代表自定义资源类型,这样其实可以允许管理员给某个节点自定义很多个资源属性,而不仅仅依赖于系统提供的CPU、内存和GPU资源,这些自定义资源属性都存放在OpaqueIntResources这个数组中。

  自定义好了资源属性后,在配置POD规格文件时就可以把自定义资源属性添加进去,提交给Kubernetes调度器后,调度器会在系统中具备自定义资源的节点上进行查找,挑选满足POD规格文件资源要求的节点来运行POD。
  在Kubernetes1.5中,这是一个α特性,也就是说只能应用到开发测试环境中体验使用,还不能应用于生产环境中使用。
  自定义资源类型(Opaque Integer Resources)前缀是"pod.alpha.kubernetes.io/opaque-int-resource-"。API server组件限制了自定义资源类型中自定义资源属性的数值,限制成只能设置成整数,比如可以设置成3、3000m和3Ki,下面是无效的设置值:0.5、1500m(在Kubernetes中500m表示0.5,1500m表示1.5,所以1500m不是整数,是无效的值)。

二、使用自定义资源
  要想使用自定义资源,首先管理员需要手动在节点上配置自定义资源,然后用户在POD规格文件中配置对自定义资源的使用。因为如果管理员不手动配置自定义资源,那么Kubernetes只会使用CPU、内存、GPU这三种类型资源。
  为了在节点上配置自定义资源,需要向API server组件发送PATCH类型的HTTP请求,在HTTP请求体中配置自定义资源的可用数值,这个数值只能配置成整数。
  在节点上配置了一个自定义资源后,其实就是在这个节点对应的结构体NodeStatus上面Capacity属性中增加了一条记录,如果配置多个自定义资源,那么Capacity属性中就增加了多条记录。
DSC0001.jpg

  


在kubernetes调度器对POD进行调度的时候,会根据每个节点对应的NodeStatus结构体中Allocatable属性来判断,如果POD请求了自定义资源,请求数值小于这个节点上可用自定义资源数值的时候,那么这个节点就会作为备选节点。调度器对自定义资源的处理功能,其实同对CPU、内存、GPU资源的处理功能是相同的。

  下面是一个在节点上配置自定义资源的例子:
  在节点k8s-node-1上配置了一个自定义资源“foo”,并且将数值设置成5。
  

PATCH /api/v1/nodes/k8s-node-1/statusHTTP/1.1  
Accept: application/json
  
Content-Type: application/json-patch+json
  
Host: k8s-master:8080
  
[
  {
  "op": "add",
  "path":"/status/capacity/pod.alpha.kubernetes.io~1opaque-int-resource-foo",
  "value": "5"
  }
  
]
这里面需要注意: 在path变量的赋值中,“~1”是字符“/”的转义字符。  下面是一个使用自定义资源“foo”的例子。在这个例子中POD,Kubernetes调度组件会查找同时满足2核CPU、1个自定义资源“ foo” 的节点,在这些节点上启动POD。
apiVersion: v1  
kind: Pod
  
metadata:
  name: my-pod
  
spec:
  containers:
  -name: my-container
  image: myimage
  resources:
  requests:
  cpu: 2
  pod.alpha.kubernetes.io/opaque-int-resource-foo: 1

三、适用场景
  通过自定义资源类型这种方式,相当于引入了IPC里面的信号量机制,可以限制指定POD在节点上运行的个数,而且还可以动态调整个数。
DSC0002.jpg

  

  如上图所示,在节点(一)上最多只能运行五个依赖于自定义资源“foo”的POD,在节点(二)上最多只能运行三个依赖于自定义资源“foo”的POD。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-432022-1-1.html 上篇帖子: Serverless无服务应用架构纵横谈 下篇帖子: [经验交流] k8s mount 文件到容器目录
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表