為節點通告擴充套件資源

本頁面展示瞭如何為節點指定擴充套件資源。擴充套件資源允許叢集管理員通告節點級別的資源,這些資源在 Kubernetes 中原本是未知的。

準備工作

你需要有一個 Kubernetes 叢集,並且 kubectl 命令列工具已配置為與你的叢集通訊。建議你在至少有兩個節點不作為控制平面主機的叢集上執行本教程。如果你還沒有叢集,可以使用 minikube 建立一個,或者使用這些 Kubernetes 操場之一。

要檢查版本,請輸入 kubectl version

獲取節點名稱

kubectl get nodes

選擇一個節點用於本次練習。

要在節點上通告新的擴充套件資源,請向 Kubernetes API 伺服器傳送 HTTP PATCH 請求。例如,假設你的一個節點連線了四個 dongle。以下是一個 PATCH 請求示例,它為你的節點通告了四個 dongle 資源。

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 不需要知道 dongle 是什麼或 dongle 的用途。前面的 PATCH 請求告訴 Kubernetes 你的節點有四個你稱之為 dongle 的東西。

啟動一個代理,以便你可以輕鬆地向 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"}]' \
  https://:8001/api/v1/nodes/<your-node-name>/status

輸出顯示節點具有 4 個 dongle 的容量。

"capacity": {
  "cpu": "2",
  "memory": "2049008Ki",
  "example.com/dongle": "4",

描述你的節點

kubectl describe node <your-node-name>

再次,輸出顯示了 dongle 資源。

Capacity:
  cpu: 2
  memory: 2049008Ki
  example.com/dongle: 4

現在,應用程式開發人員可以建立請求一定數量 dongle 的 Pod。請參閱 為容器分配擴充套件資源

討論

擴充套件資源類似於記憶體和 CPU 資源。例如,就像節點有一定量的記憶體和 CPU 供節點上執行的所有元件共享一樣,它也可以有一定數量的 dongle 供節點上執行的所有元件共享。就像應用程式開發人員可以建立請求一定量記憶體和 CPU 的 Pod 一樣,他們也可以建立請求一定數量 dongle 的 Pod。

擴充套件資源對 Kubernetes 來說是不透明的;Kubernetes 對它們一無所知。Kubernetes 只知道一個節點有一定數量的這些資源。擴充套件資源必須以整數形式進行通告。例如,一個節點可以通告四個 dongle,但不能通告 4.5 個 dongle。

儲存示例

假設一個節點有 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 請求,它從節點中移除了 dongle 通告。

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"}]' \
  https://:8001/api/v1/nodes/<your-node-name>/status

驗證 dongle 通告是否已移除

kubectl describe node <your-node-name> | grep dongle

(你不應該看到任何輸出)

下一步

針對應用程式開發者

致叢集管理員

上次修改時間為太平洋標準時間 2025 年 7 月 26 日晚上 10:49:[KEP-5004] DRA 擴充套件資源文件 (e694d6edfc)