tkestack/gpu-manager在k8s1.23版本之后的使用方法

本站所有内容来自互联网收集,仅供学习和交流,请勿用于商业用途。如有侵权、不妥之处,请第一时间联系我们删除!Q群:迪思分享

目录异常排查编译

异常

在1.25版本的k8s集群中部署gpu-manage时,虽然显示gpu节点上gpu-manage的pod实例都是running状态,但是给pod申领tencent.com/vcuda-memory资源时,却始终找不到有资源的节点。

查看节点的详情时,返回的allocatable字段中也没有相关资源:Allocatable: cpu: 48 ephemeral-storage: 48294789041 hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 65291520Ki pods: 110 System Info: Machine ID: 50ca20960ea94552bd5ef84a20ce7e47

说明gpu-manager并没有正确运行。

排查

查看任意gpu-manager的pod日志,可以看到如下异常信息:

rebuild ldcache

launch gpu manager

E0426 06:17:06.729262    2384 server.go:131] Unable to set Type=notify in systemd service file?

E0426 06:17:11.731947    2384 server.go:152] cant create container runtime manager: context deadline exceeded

说明gpu-manager和容器运行时接口通信失败了。

查看异常信息指向的代码:… containerRuntimeManager, err := containerRuntime.NewContainerRuntimeManager( m.config.CgroupDriver, m.config.ContainerRuntimeEndpoint, m.config.RequestTimeout) if err != nil { klog.Errorf(“cant create container runtime manager: %v”, err) return err } klog.V(2).Infof(“Container runtime manager is running”) …

可以看到是访问m.config.ContainerRuntimeEndpoint超时,这个变量的默认值定义在cmd/manager/options/options.go

const ( DefaultDriver = “nvidia” DefaultQueryPort = 5678 DefaultSamplePeriod = 1 DefaultVirtualManagerPath = “/etc/gpu-manager/vm” DefaultAllocationCheckPeriod = 30 DefaultCheckpointPath = “/etc/gpu-manager/checkpoint” DefaultContainerRuntimeEndpoint = “/var/run/dockershim.sock” DefaultCgroupDriver = “cgroupfs” )

可以看到这里用的运行时接口是/var/run/dockershim.sock,但是在k8s1.23版本之后,接口路径已经改为/var/run/cri-dockerd.sock,所以修改默认之后重新编译即可。

编译

使用make img既可以用源码的Makefile自动编译打包成新的镜像,但是源码的/home/zp/work/gpu-manager/build/Dockerfile中的git222不一定能装上,可以改成git,另外有一些依赖需要国际上的支持。

编译后的镜像在1.25版本的k8s中可以正常使用。


© 版权声明
THE END
★喜欢这篇文章吗?喜欢的话,麻烦动动手指支持一下!★
点赞13 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容