nvidia kubernetes是从官方一个commit 拉出来改的,所有的改动可以通过下面的链接看到
https://github.com/NVIDIA/kubernetes/compare/dd5e1a2978fd0b97d9b78e1564398aeea7e7fe92...NVIDIA:master
主要的几个改动
添加了扩展资源的定义,对container上的ExtendedResourceRequest,对podSpec上的extendedResources,selector上的extendedResourceAffinity,node上的ExtendedResources
https://github.com/NVIDIA/kubernetes/commit/355aff2ffc31d6403c78b68d94fa263b0de35188重写了个Device Plugin API,去除了原来的register流程,加了adminPod initContainer接口,实现了对node上添加资源的接口定义
1
2
3
4
5
6
7struct Device {
ID: "GPU-fef8089b-4820-abfc-e83e-94318197576e",
State: "Healthy",
Attributes: {
"memory": "8000",
}
}看意思是插件注册到某一个目录下就自动发现了,然后减少了注册的流程,有点像flexvolume插件的感觉,总体的改动感觉不错,原来的流程需要看下,我记得原来的流程分配卡的逻辑是kubelet里面实现的,感觉不太好,这里虽然好像也没改,但是加入了插件可以修改podSpec和containerSpec的逻辑
https://github.com/NVIDIA/kubernetes/commit/23d735f02d39fd1c1464e67a355b64642cecfec6?diff=split加了个docker hook的功能,看代码的意思是在/usr/share/containers/docker/hooks.d/目录下可以写个json,json里面可以填
1
2
3
4
5type dockerHook struct {
Runtime string `json:"runtime"`
Annotations map[string]string `json:"annotations"`
Images []string `json:"images"`
}则在docker容器运行的时候可以判断容器上有没有annotation或者image是符合hook中所写的,如果是则启动容器的时候用json中所写的runtime来启动,另外加了个默认会看的annotation annotation.io.kubernetes.container.runtime
调度器上实现了对于extendResource的调度功能
https://github.com/NVIDIA/kubernetes/commit/7e06c18139e44d45bd2c0c2f702dc31716f34fe2
https://github.com/NVIDIA/kubernetes/commit/3cebd40083d69e0f65a5040fe4537e74f5a4e529
感觉不是特别优雅,最好还是把这个资源算在普通资源调度里面比较好,现在实现是每个函数都多加了入参困了没细看 https://github.com/NVIDIA/kubernetes/commit/df14bc461de5f639d6fd0d1eb6b7450b5a2a816b 感觉是重构了下