Kubernetes 了解 CPU和内存是什么,并可以通过各种方式发现这些资源.因此一个节点可能有4个CPU和32GB内存.Pod可以请求这些资源,调度程序将确保在具有足够可用资源的节点上调度Pod.
但是可以有其他类型的资源.假设你的一些节点有特殊的USB加密狗连接用于BitCoin挖掘,8插入每个节点.此资源称为不透明资源,因为Kubernetes 不了解 BitCoin挖掘加密狗是什么(即浪费金钱).
使用Opaque Integer Resources功能,您可以声明存在BitCoin挖掘加密狗这样的东西,并且特定节点有8个.它被称为整数资源,因为它不可能将3.5个加密狗连接到节点,并且Pod也可能不会请求1.5加密狗来完成它的工作.
另一个例子可能是你的一些节点配备了1TB SSD.您可以以MB为单位指定其大小,并将此信息附加到节点.我们来称呼资源ssdmb.现在,您的数据库应用程序可以获得400个ssdmb资源.Altough Kubernetes不知道ssdmb现在它了解您的Pod需要在具有ssdmb可用资源的节点上进行调度,并且至少有400个仍然可用.
要将名为node-2的节点标记为具有1000个ssdmb(该URL假定您kubectl proxy在计算机上运行):
curl -X PATCH \
--header "Accept: application/json" \
--header "Content-Type: application/json-patch+json" \
--data-raw '[{"op":"add", "path":"/status/capacity/pod.alpha.kubernetes.io~1opaque-int
-resource-ssdmb", "value":"1000"}]' \
http://127.0.0.1:8001/api/v1/nodes/node-2/status
Run Code Online (Sandbox Code Playgroud)
同样可以实现
kubectl patch node node-2 \
--patch='[{"op":"add", "path":"/status/capacity/pod.alpha.kubernetes.io~1opaque-int
-resource-ssdmb", "value":"1000"}]'
Run Code Online (Sandbox Code Playgroud)
然后,要使您的Pod请求此资源,您可以:
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: myimage
resources:
requests:
cpu: 1
pod.alpha.kubernetes.io/opaque-int-resource-ssdmb: 400
Run Code Online (Sandbox Code Playgroud)
创建这个Pod之后你kubectl describe node node-2会看到类似这样的东西:
Capacity:
cpu: 2
pod.alpha.kubernetes.io/opaque-int-resource-ssdmb: 1k
pods: 110
Allocatable:
cpu: 1
pod.alpha.kubernetes.io/opaque-int-resource-ssdmb: 600
pods: 109
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
421 次 |
| 最近记录: |