为节点发布扩展资源

本页面介绍如何为节点指定扩展资源。扩展资源允许集群管理员公布节点级别的资源,否则 Kubernetes 将无法识别这些资源。

准备工作

您需要有一个 Kubernetes 集群,并且必须配置 kubectl 命令行工具才能与您的集群通信。建议您在至少有两个节点且这些节点不充当控制平面主机的集群上运行本教程。如果您还没有集群,则可以使用 minikube 创建一个集群,或者可以使用以下 Kubernetes 游乐场之一

要检查版本,请输入 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

(您应该看不到任何输出)

后续步骤

面向应用程序开发人员

面向集群管理员

上次修改时间:2023 年 1 月 30 日太平洋标准时间上午 9:58:在 extended-resource-node.md 中美化布局 (f59e9668a4)