日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Kubernetes的Device Plugin设计解读

發布時間:2024/8/23 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Kubernetes的Device Plugin设计解读 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

摘要: Kubernetes的生態地位已經確立,可擴展性將是其發力的主戰場。異構計算作為非常重要的新戰場,Kubernetes非常重視。而異構計算需要強大的計算力和高性能網絡,需要提供一種統一的方式與GPU、FPGA、NIC、InfiniBand等高性能硬件集成。

點此查看原文:http://click.aliyun.com/m/43607/

Kubernetes的Device Plugin設計解讀

最近在調研Kubernetes的GPU調度和運行機制,發現傳統的alpha.kubernetes.io/nvidia-gpu即將在1.11版本中下線,和GPU相關的調度和部署的代碼將徹底從主干代碼中移除。

取而代之的是通過Extended Resource+Device Plugin兩個Kubernetes的內置模塊,外加由設備提供商實現的相應Device Plugin, 完成從設備的集群級別調度至工作節點,到設備與容器的實際綁定。

首先思考的第一個問題是為什么進入alpha.kubernetes.io/nvidia-gpu主干一年之久的GPU功能徹底移除?

1.OutOfTree是Kubernetes一個很好的理念,之前的Cloud Provider的重構也是類似的工作。對于Kubernetes來說,不做瑞士軍刀,專注于自身核心和通用能力,而將像GPU,InfiniBand,FPGA和公共云能力的工作完全交給社區和領域專家。這樣一方面可以降低軟件自身使用的復雜度,減小穩定性風險,另外OutOfTree分開迭代也能夠更靈活實現的功能升級。
2.而開放的軟件架構設計和標準也調動了社區參與的積極性,而活躍的社區其實是Kubernetes打贏容器調度框架之戰的核心法寶。

先來簡要介紹一下kubernetes這兩個模塊:

Extended Resource: 一種自定義資源擴展的方式,將資源的名稱和總數量上報給API server,而Scheduler則根據使用該資源pod的創建和刪除,做資源可用量的加減法,進而在調度時刻判斷是否有滿足資源條件的節點。目前這里的Extended Resource的增加和減少單元必須是整數,比如你可以分配1個GPU,但是不能分配0.5個GPU。該功能由于只是替代了Opaque integer resources,做了些更名的工作,所以在1.8已經是穩定的狀態了。但是當integer這個關鍵詞被移除,也引發我們的想象,未來會不會有0.5存在的可能性?
Device Plugin:通過提供通用設備插件機制和標準的設備API接口。這樣設備廠商只需要實現相應的API接口,無需修改Kubelet主干代碼,就可以實現支持GPU、FPGA、高性能 NIC、InfiniBand 等各種設備的擴展。該能力在Kubernetes 1.8和1.9版本處于Alpha版本,在1.10會進入Beta版本。
應該說這個功能目前還比較新,需要通過feature gate打開, 即配置 –feature-gates=DevicePlugins=true

Device Plugin的設計:

API設計:
實際上Device plugins實際上是簡單的grpc server,需要實現以下兩個方法 ListAndWatch和Allocate,并監聽在/var/lib/kubelet/device-plugins/目錄下的Unix Socket,比如/var/lib/kubelet/device-plugins/nvidia.sock

service DevicePlugin {// returns a stream of []Devicerpc ListAndWatch(Empty) returns (stream ListAndWatchResponse) {}rpc Allocate(AllocateRequest) returns (AllocateResponse) {} }

其中:

ListAndWatch: Kubelet會調用該API做設備發現和狀態更新(比如設備變得不健康)
Allocate: 當Kubelet創建要使用該設備的容器時, Kubelet會調用該API執行設備相應的操作并且通知Kubelet初始化容器所需的device,volume和環境變量的配置。

插件生命周期管理:
1.插件啟動時,以grpc的形式通過/var/lib/kubelet/device-plugins/kubelet.sock向Kubelet注冊,同時提供插件的監聽Unix Socket,API版本號和設備名稱(比如nvidia.com/gpu)。Kubelet將會把這些設備暴露到Node狀態中,以Extended Resource的要求發送到API server中,后續Scheduler會根據這些信息進行調度。
2.插件啟動后,Kubelet會建立一個到插件的listAndWatch長連接,當插件檢測到某個設備不健康的時候,就會主動通知Kubelet。此時如果這個設備處于空閑狀態,Kubelet就會將其挪出可分配列表;如果該設備已經被某個pod使用,Kubelet就會將該Pod殺掉
3.插件啟動后可以利用Kubelet的socket持續檢查Kubelet的狀態,如果Kubelet重啟,插件也會相應的重啟,并且重新向Kubelet注冊自己

部署方式

一般可以支持daemonset和非容器化的部署,目前官方推薦使用deamonset部署。

實現樣例

Nvidia 的官方GPU插件
NVIDIA 提供了一個基于 Device Plugins 接口的 GPU 設備插件NVIDIA/k8s-device-plugin, 從用戶角度變得更加簡單了。比起傳統的alpha.kubernetes.io/nvidia-gpu, 不再需要使用volumes指定CUDA需要使用的庫。

apiVersion: apps/v1 kind: Deploymentmetadata:name: tf-notebooklabels:app: tf-notebookspec:template: # define the pods specificationsmetadata:labels:app: tf-notebookspec:containers:- name: tf-notebookimage: tensorflow/tensorflow:1.4.1-gpu-py3resources:limits:nvidia.com/gpu: 1

Google GCP GPU插件

GCP也提供了一個GPU設備插件實現,但是只支持運行在Google Container Engine的平臺上,可以通過container-engine-accelerators了解

Solarflare NIC 插件

網卡造商Solarflare也實現了自己的設備插件sfc-device-plugin, 可以通過demo體驗用戶感受。

總結

Kubernetes的生態地位已經確立,可擴展性將是其發力的主戰場。異構計算作為非常重要的新戰場,Kubernetes非常重視。而異構計算需要強大的計算力和高性能網絡,需要提供一種統一的方式與GPU、FPGA、NIC、InfiniBand等高性能硬件集成。而Device Plugin是Kubernetes給出的答案,還是非常簡單優雅的,雖然還在演進之中,但是未來可期。阿里云容器服務隨后也會推出基于device plugin的Kubernetes GPU 1.9.3集群,敬請期待。

識別以下二維碼,干貨:

總結

以上是生活随笔為你收集整理的Kubernetes的Device Plugin设计解读的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。