宣告節點的擴充資源
本頁說明如何為節點指定擴充資源。擴充資源允許叢集管理員宣告 Kubernetes 無法識別的節點層級資源。
開始之前
您需要有一個 Kubernetes 叢集,而且必須設定 kubectl 命令列工具以與您的叢集通訊。建議在至少有兩個節點且未充當控制平面主機的叢集上執行本教學課程。如果您還沒有叢集,可以使用 minikube 建立一個,或者您可以使用下列 Kubernetes 練習場之一
若要檢查版本,請輸入kubectl version
。取得節點名稱
kubectl get nodes
選擇您的其中一個節點用於此練習。
在您的其中一個節點上宣告新的擴充資源
若要在節點上宣告新的擴展資源,請發送 HTTP PATCH 請求至 Kubernetes API 伺服器。例如,假設您的其中一個節點連接了四個硬體鎖。以下範例 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 供節點上運行的所有組件共享一樣,它可以具有一定數量的硬體鎖供節點上運行的所有組件共享。並且正如應用程式開發人員可以建立 Pod,請求一定量的記憶體和 CPU 一樣,他們可以建立 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
(您應該看不到任何輸出)