作者
劉旭,騰訊雲高階工程師,專注容器雲原生領域,有多年大規模 Kubernetes 叢集管理經驗,現負責騰訊雲 GPU 容器的研發工作。
背景
目前 TKE 已提供基於 qGPU 的算力/視訊記憶體強隔離的共享 GPU 排程隔離方案,但是部分使用者反饋缺乏 GPU 資源的可觀測性,例如無法獲取單個 GPU 裝置的剩餘資源,不利於 GPU 資源的運維和管理。在這種背景下,我們希望提供一種方案,可以讓使用者在 Kubernetes 叢集中直觀的統計和查詢 GPU 資源的使用情況。
目標
在目前 TKE 共享 GPU 排程方案的基礎上,從以下幾個方面增強 GPU 裝置的可觀測性:
- 支援獲取單個 GPU 裝置的資源分配資訊。
- 支援獲取單個 GPU 裝置的健康狀態。
- 支援獲取某個節點上各 GPU 裝置資訊。
- 支援獲取 GPU 裝置和 Pod / Container 關聯資訊。
我們的方案
我們通過 GPU CRD 掃描物理 GPU 的資訊,並在 qGPU 生命週期中更新使用到的物理 GPU 資源,從而解決在共享 GPU 場景下缺少可見性的問題。
- 自定義 GPU CRD:每個 GPU 裝置對應一個 GPU 物件,通過 GPU 物件可以獲取 GPU 裝置的硬體資訊,健康狀態以及資源分配情況。
- Elastic GPU Device Plugin:根據 GPU 裝置的硬體資訊建立 GPU 物件,定期更新 GPU 裝置的健康狀態。
- Elastic GPU Scheduler:根據 GPU 資源使用情況排程 Pod,同時將排程結果更新到 GPU 物件。
TKE GPU CRD 設計
apiVersion: elasticgpu.io/v1alpha1
kind: GPU
metadata:
labels:
elasticgpu.io/node: 10.0.0.2
name: 192.168.2.5-00
spec:
index: 0
memory: 34089730048
model: Tesla V100-SXM2-32GB
nodeName: 10.0.0.2
path: /dev/nvidia0
uuid: GPU-cf0f5fe7-0e15-4915-be3c-a6d976d65ad4
status:
state: Healthy
allocatable:
tke.cloud.tencent.com/qgpu-core: "50"
tke.cloud.tencent.com/qgpu-memory: "23"
allocated:
0dc3c905-2955-4346-b74e-7e65e29368d2:
containers:
- container: test
resource:
tke.cloud.tencent.com/qgpu-core: "50"
tke.cloud.tencent.com/qgpu-memory: "8"
namespace: default
pod: test
capacity:
tke.cloud.tencent.com/qgpu-core: "100"
tke.cloud.tencent.com/qgpu-memory: "31"
每個 GPU 物理卡對應一個 GPU CRD,通過 GPU CRD 可以清楚瞭解每張卡的型號,視訊記憶體等硬體資訊,同時通過 status
可以獲取每個 GPU 裝置的健康狀態和資源分配情況。
TKE GPU 排程過程
Kubernetes 提供了 Scheduler Extender 用於對排程器進行擴充套件,用於滿足複雜場景下的排程需求。擴充套件後的排程器會在呼叫內建預選策略和優選策略之後通過 HTTP 協議呼叫擴充套件程式再次進行預選和優選,最後選擇一個合適的 Node 進行 Pod 的排程。
在 TKE Elastic GPU Scheduler(原 TKE qGPU Scheduler),我們結合了 GPU CRD 設計,在排程時首先會根據 status.state
過濾掉異常 GPU 裝置,然後根據 status.allocatable
選擇剩餘資源滿足需求的 GPU 裝置,在最終完成排程時更新 status.allocatable
和 status.allocated
。
TKE GPU 分配過程
Kubernetes 提供了 Device Plugin 機制用於支援 GPU FPGA 等硬體裝置,裝置廠商只需要根據介面實現 Device Plugin 而不需要修改 Kubernetes 原始碼,Device Plugin 一般以 DaemonSet 的形式執行在節點上。
我們在 TKE Elastic GPU Device Plugin(原 TKE qGPU Device Plugin)啟動時會根據節點上 GPU 裝置的硬體資訊建立 GPU 物件,同時會定期檢查 GPU 裝置的健康狀態並同步到 GPU 物件的 status.state
。
總結
為了解決目前 TKE 叢集內 GPU 資源可觀測性缺失的問題,我們引入了 GPU CRD,使用者可以直觀的統計和查詢叢集內 GPU 資源的使用情況,目前這套方案已和 qGPU 完成整合,在 TKE 控制檯安裝 qGPU 外掛時選擇使用 CRD 即可開啟。
目前 TKE qGPU 已全量上線,詳情請戳:https://cloud.tencent.com/doc...
關於我們
更多關於雲原生的案例和知識,可關注同名【騰訊雲原生】公眾號~
福利:
①公眾號後臺回覆【手冊】,可獲得《騰訊雲原生路線圖手冊》&《騰訊雲原生最佳實踐》~
②公眾號後臺回覆【系列】,可獲得《15個系列100+篇超實用雲原生原創乾貨合集》,包含Kubernetes 降本增效、K8s 效能優化實踐、最佳實踐等系列。
③公眾號後臺回覆【白皮書】,可獲得《騰訊雲容器安全白皮書》&《降本之源-雲原生成本管理白皮書v1.0》
④公眾號後臺回覆【光速入門】,可獲得騰訊雲專家5萬字精華教程,光速入門Prometheus和Grafana。
【騰訊雲原生】雲說新品、雲研新術、雲遊新活、雲賞資訊,掃碼關注同名公眾號,及時獲取更多幹貨!!