文章摘要
这篇文章描述了在Kubernetes 1.25版本部署GPU Manager时遇到的问题。尽管GPU节点上的GPU Manager pod实例显示为“running”状态,但在为Pod分配资源时却无法找到可用资源。查看节点详情后发现资源分配情况正常,但Pod没有资源。进一步查看日志发现,问题出在服务文件配置上,导致容器运行时管理器无法正常创建,出现超时错误。文章指出,这是由于默认配置与Kubernetes 1.23版本后的接口路径不匹配。修改默认配置并重新编译后,问题得以解决,编译后的镜像可以在1.25版本的Kubernetes中正常使用。此外,文章提到可以通过源码编译镜像,但部分依赖需要国际支持。
目录异常排查编译
在1.25版本的k8s集群中部署gpu-manage时,虽然显示gpu节点上gpu-manage的pod实例都是running状态,但是给pod申领资源时,却始终找不到有资源的节点。
查看节点的详情时,返回的字段中也没有相关资源:
Allocatable:
cpu: 48
ephemeral-storage: 48294789041
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 65291520Ki
pods: 110
System Info:
Machine ID: 50ca20960ea94552bd5ef84a20ce7e47
cpu: 48
ephemeral-storage: 48294789041
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 65291520Ki
pods: 110
System Info:
Machine ID: 50ca20960ea94552bd5ef84a20ce7e47
说明并没有正确运行。
查看任意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] can’t 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(“can’t create container runtime manager: %v”, err)
return err
}
klog.V(2).Infof(“Container runtime manager is running”)
…
containerRuntimeManager, err :=containerRuntime.NewContainerRuntimeManager(
m.config.CgroupDriver, m.config.ContainerRuntimeEndpoint, m.config.RequestTimeout)
if err !=nil {
klog.Errorf(“can’t create container runtime manager: %v”, err)
return err
}
klog.V(2).Infof(“Container runtime manager is running”)
…
可以看到是访问超时,这个变量的默认值定义在
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”
)
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”
)
可以看到这里用的运行时接口是,但是在k8s1.23版本之后,接口路径已经改为,所以修改默认之后重新编译即可。
使用既可以用源码的Makefile自动编译打包成新的镜像,但是源码的中的不一定能装上,可以改成,另外有一些依赖需要国际上的支持。
编译后的镜像在1.25版本的k8s中可以正常使用。
到此这篇关于tkestack/gpu-manager在k8s1.23版本之后的使用的文章就介绍到这了,更多相关tkestack/gpu-manager在k8使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:Kubernetes(k8s?1.23))安装与卸载详细教程
© 版权声明
文章版权归作者所有,未经允许请勿转载。


