opaque integer resource pod.alpha.kubernetes.io/opaque-int-resource- 自定义资源类型
来源:互联网 发布:vb可执行文件的扩展名 编辑:程序博客网 时间:2024/06/04 00:55
自定义资源类型
在Kubernetes1.5中,在CPU、内存、GPU三种类型资源的基础上新增了一种资源类型:Opaque Integer Resources,从英文直接翻译成不透明整数资源,但是我觉着应该翻译成自定义资源类型。
如上图所示: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属性中就增加了多条记录。
在kubernetes调度器对POD进行调度的时候,会根据每个节点对应的NodeStatus结构体中Allocatable属性来判断,如果POD请求了自定义资源,请求数值小于这个节点上可用自定义资源数值的时候,那么这个节点就会作为备选节点。调度器对自定义资源的处理功能,其实同对CPU、内存、GPU资源的处理功能是相同的。
下面是一个在节点上配置自定义资源的例子:
在节点k8s-node-1上配置了一个自定义资源“foo”,并且将数值设置成5。
PATCH /api/v1/nodes/k8s-node-1/statusHTTP/1.1Accept: application/jsonContent-Type: application/json-patch+jsonHost: k8s-master:8080[ { “op”: “add”, “path”:”/status/capacity/pod.alpha.kubernetes.io~1opaque-int-resource-foo”, “value”: “5” }]
这里面需要注意: 在path变量的赋值中,“~1”是字符“/”的转义字符。
Start a proxy, so that you can easily send requests to the Kubernetes API server: kubectl proxy
To advertise a new opaque integer resource on a Node, send an HTTP PATCH request to the Kubernetes API server
curl --header "Content-Type: application/json-patch+json" \--request PATCH \--data '[{"op": "add", "path": "/status/capacity/pod.alpha.kubernetes.io~1opaque-int-resource-dongle", "value": "4"}]' \http://localhost:8001/api/v1/nodes/<your-node-name>/status
下面是一个使用自定义资源“foo”的例子。在这个例子中POD,Kubernetes调度组件会查找同时满足2核CPU、1个自定义资源“ foo” 的节点,在这些节点上启动POD。
apiVersion: v1kind: Podmetadata: name: my-podspec: containers: -name: my-container image: myimage resources: requests: cpu: 2 pod.alpha.kubernetes.io/opaque-int-resource-foo: 1
清除自定义的资源
Start a proxy, so that you can easily send requests to the Kubernetes API server: kubectl proxy
In another command window, send the HTTP PATCH request. Replace with the name of your Node:
curl --header "Content-Type: application/json-patch+json" \--request PATCH \--data '[{"op": "remove", "path": "/status/capacity/pod.alpha.kubernetes.io~1opaque-int-resource-dongle"}]' \http://localhost:8001/api/v1/nodes/<your-node-name>/status
Verify that the dongle advertisement has been removed: kubectl describe node <your-node-name> | grep dongle
适用场景
通过自定义资源类型这种方式,相当于引入了IPC里面的信号量机制,可以限制指定POD在节点上运行的个数,而且还可以动态调整个数。
如上图所示,在节点(一)上最多只能运行五个依赖于自定义资源“foo”的POD,在节点(二)上最多只能运行三个依赖于自定义资源“foo”的POD。
参考:
https://kubernetes.io/docs/tasks/administer-cluster/opaque-integer-resource-node/
https://www.kubernetes.org.cn/1200.html
- opaque integer resource pod.alpha.kubernetes.io/opaque-int-resource- 自定义资源类型
- Opaque
- iOS开发之opaque、alpha
- alpha、hidden、opaque的区别
- iOS开发-Alpha,Hidden与Opaque区别
- alpha.hidden.opaque.opacity的区别
- UIView——alpha,opaque,hidden
- UIView的透明属性hidden、alpha、opaque
- Resource Types(资源类型)
- 16. PHP Resource 资源类型
- view 中的 opaque , alpha , 和 alpha 的区别
- Opaque pointer
- Opaque pointer
- ios开发之View属性hidden, opaque, alpha的区别
- ios开发之View属性hidden, opaque, alpha的区别
- ios开发之View属性hidden, opaque, alpha的区别
- IOS的UIView的透明hidden,alpha,opaque的区别
- iOS 中 UIView属性hidden, opaque, alpha的区别
- Java String 的性质
- 241. Different Ways to Add Parentheses
- requirejs
- 机器学习实战:KNN算法
- c++冒泡排序
- opaque integer resource pod.alpha.kubernetes.io/opaque-int-resource- 自定义资源类型
- Spring集成Hibernate5_02-HibernateTemplate
- 将本地文件上传到Linux目录下(上传到vm虚拟机中)
- WOJ1141-Encoded Love-letter
- Red Hat NGINX 自启动
- web 前端基础知识精简
- POJ 2195 Going Home(最小费用最大流)
- Mysql 排序原理
- 杭电ACM1000