为节点宣传扩展资源
此页面展示了如何为节点指定扩展资源。扩展资源允许集群管理员宣传节点级别的资源,否则 Kubernetes 将无法识别这些资源。
开始之前
您需要拥有一个 Kubernetes 集群,并且 kubectl 命令行工具必须配置为与您的集群通信。建议在至少有两个节点的集群上运行本教程,这些节点不充当控制平面主机。如果您还没有集群,可以使用 minikube 创建一个,或者可以使用以下 Kubernetes Playground 中的一个
要检查版本,请输入kubectl version
。获取您节点的名称
kubectl get nodes
选择一个节点用于本练习。
在您其中一个节点上宣传新扩展资源
要在节点上宣传新扩展资源,请向 Kubernetes API 服务器发送 HTTP PATCH 请求。例如,假设您其中一个节点连接了四个加密狗。以下是一个 PATCH 请求示例,该请求为您的节点宣传四个加密狗资源。
PATCH /api/v1/nodes/<your-node-name>/status HTTP/1.1
Accept: application/json
Content-Type: application/json-patch+json
Host: k8s-master:8080
[
{
"op": "add",
"path": "/status/capacity/example.com~1dongle",
"value": "4"
}
]
请注意,Kubernetes 无需了解加密狗是什么或加密狗的用途。前面的 PATCH 请求告诉 Kubernetes 您的节点有四个您称为加密狗的东西。
启动代理,以便您可以轻松地向 Kubernetes API 服务器发送请求
kubectl proxy
在另一个命令窗口中,发送 HTTP PATCH 请求。将 <your-node-name>
替换为您的节点名称
curl --header "Content-Type: application/json-patch+json" \
--request PATCH \
--data '[{"op": "add", "path": "/status/capacity/example.com~1dongle", "value": "4"}]' \
http://localhost:8001/api/v1/nodes/<your-node-name>/status
输出显示节点的容量为 4 个加密狗
"capacity": {
"cpu": "2",
"memory": "2049008Ki",
"example.com/dongle": "4",
描述您的节点
kubectl describe node <your-node-name>
输出再次显示加密狗资源
Capacity:
cpu: 2
memory: 2049008Ki
example.com/dongle: 4
现在,应用程序开发人员可以创建请求一定数量加密狗的 Pod。请参阅 为容器分配扩展资源。
讨论
扩展资源类似于内存和 CPU 资源。例如,就像节点拥有一定量的内存和 CPU 供在节点上运行的所有组件共享一样,它也可以拥有一定数量的加密狗供在节点上运行的所有组件共享。就像应用程序开发人员可以创建请求一定量的内存和 CPU 的 Pod 一样,他们也可以创建请求一定数量加密狗的 Pod。
扩展资源对 Kubernetes 是不透明的;Kubernetes 对它们一无所知。Kubernetes 只知道节点拥有一定数量的扩展资源。扩展资源必须以整数形式宣传。例如,节点可以宣传四个加密狗,但不能宣传 4.5 个加密狗。
存储示例
假设节点有 800 GiB 的特殊磁盘存储。您可以为特殊存储创建一个名称,例如 example.com/special-storage。然后,您可以以一定的大小宣传它,例如 100 GiB。在这种情况下,您的节点将宣传它拥有八个类型为 example.com/special-storage 的资源。
Capacity:
...
example.com/special-storage: 8
如果要允许对特殊存储进行任意请求,您可以以 1 字节的大小宣传特殊存储。在这种情况下,您将宣传 800Gi 类型为 example.com/special-storage 的资源。
Capacity:
...
example.com/special-storage: 800Gi
然后,容器可以请求任意数量的特殊存储字节,最多 800Gi。
清理
以下是一个 PATCH 请求,它从节点中删除加密狗宣传。
PATCH /api/v1/nodes/<your-node-name>/status HTTP/1.1
Accept: application/json
Content-Type: application/json-patch+json
Host: k8s-master:8080
[
{
"op": "remove",
"path": "/status/capacity/example.com~1dongle",
}
]
启动代理,以便您可以轻松地向 Kubernetes API 服务器发送请求
kubectl proxy
在另一个命令窗口中,发送 HTTP PATCH 请求。将 <your-node-name>
替换为您的节点名称
curl --header "Content-Type: application/json-patch+json" \
--request PATCH \
--data '[{"op": "remove", "path": "/status/capacity/example.com~1dongle"}]' \
http://localhost:8001/api/v1/nodes/<your-node-name>/status
验证是否已删除加密狗宣传
kubectl describe node <your-node-name> | grep dongle
(您不应该看到任何输出)