2)device-plugin 启动后,通过 kubelet.sock 调用 Register 接口,向 Kubelet 进行注册,注册信息包括 device plugin 的 unix socket,API Version,ResourceName 3)注册成功后,Kubelet 通过 device-plugin 的unix socket向 device plugin 调用 ListAndWatch, 获取当前节点上的资源 4)Kubelet 向api-server更新节点状态来记...
第一步是 Device Plugin 的注册,需要 Kubernetes 知道要跟哪个 Device Plugin 进行交互。这是因为一个节点上可能有多个设备,需要 Device Plugin 以客户端的身份向 Kubelet 汇报三件事情:我是谁?就是 Device Plugin 所管理的设备名称,是 GPU 还是 RDMA;我在哪?就是插件自身监听的 unis socket 所在的文件位置,让 ...
第二步是服务启动,Device Plugin 会启动一个 GRPC 的 server。在此之后 Device Plugin 一直以这个服务器的身份提供服务让 kubelet 来访问,而监听地址和提供 API 的版本就已经在第一步完成了; 第三步,当该 GRPC server 启动之后,kubelet 会建立一个到 Device Plugin 的 ListAndWatch 的长连接, 用来发现设备 ID...
本文主要分析 k8s 中的 device-plugin 机制工作原理,并通过实现一个简单的 device-plugin 来加深理解。 1. 背景 默认情况下,k8s 中的 Pod 只能申请 CPU 和 Memory 这两种资源,就像下面这样: resources: requests: memory: "1024Mi" cpu: "100m" limits: memory: "2048Mi" cpu: "200m" 随着AI 热度越来...
3. Device Plugin 工作机制 介绍一下 Device Plugin 的工作机制,整个 Device Plugin 的工作流程可以分成两个部分: 一个是启动时刻的资源上报; 另一个是用户使用时刻的调度和运行。 Device Plugin 的开发非常简单。主要包括最关注与最核心的两个事件方法: ...
Kubernetes Device Plugin 是 Kubernetes 中的一种标准化资源扩展机制,旨在将特殊硬件(如 GPU、FPGA)作为可调度资源集成到 Kubernetes 的资源管理框架中。 对于NVIDIA GPU,Device Plugin 充当了连接 Kubernetes 调度器与底层 GPU 硬件的桥梁,负责发现、注册和管理 GPU 资源,使工作负载能够无缝利用 GPU 提供的计算能力。
Device Plugin 的开发非常简单。主要包括最关注与最核心的两个事件方法: 其中ListAndWatch 对应资源的上报,同时还提供健康检查的机制。当设备不健康的时候,可以上报给 Kubernetes 不健康设备的 ID,让 Device Plugin Framework 将这个设备从可调度设备中移除; ...
device-plugin 使用的代码解析 我们从创建pod的整个流程中一步步解析代码执行: 创建带特殊资源设备的pod; 调度器从cache中选择满足要求的node; node收到ADD POD, 对pod执行admit方法进行可运行的判断。 kubelet初始化时增加了一个admitHandler: ...
k8s-device-plugin启动流程中,devicePlugin.Serve负责启动gRPC Server Start对外提供服务,然后把自己注册到kubelet。 代码语言:javascript 复制 // Serve starts the gRPC server and register the device plugin to Kubeletfunc(m*NvidiaDevicePlugin)Serve()error{err:=m.Start()iferr!=nil{log.Printf("Could not ...