Python在Docker中运行,但不在运行Ubuntu 20的Raspberry Pi集群中托管的Kubernetes



情况如下。

试图在Raspberry Pi集群中托管的Kubernetes中运行Python Flask API,节点正在运行Ubuntu 20。API被容器化到Raspberry Pi控制节点上的Docker容器中,以解决架构差异(ARM(。

当API和Mongo在树莓派上运行在K8s之外时,只需使用Docker run命令,API就可以正常工作;然而,当API被应用为在Kubernetes上的部署时,API的pod失败,CrashLoopBackoff和日志显示"standard_init_linux.go:211:exec user process caused";exec格式错误">

调查表明,exec格式错误可能与针对不同CPU架构构建的相关问题有关。然而,在Raspberry Pi上构建了Docker镜像,并在该架构上成功运行了API,我不确定这可能是问题的根源。

已经两天了,所有的尝试都失败了。有人能帮忙吗?

已修复;然而,有些事情似乎不对。

Kubernetes部署始终部署在同一个节点上。我连接到那个节点并运行Docker容器,但它不会运行;";exec格式错误";会发生。所以,看起来这是一个特定于节点的问题。

我将API和Dockerfile复制到节点上,并运行Docker构建来创建映像。它现在运行。这是没有意义的,因为Docker镜像应该拥有运行所需的一切。

也许是因为之前针对x86(开发机器(构建的映像保留在该节点Docker缓存/存储库中。也许节点上的图像没有被具有相同名称和版本号的较新图像覆盖(版本号没有增加(。这似乎是因为远程节点上映像的启动时间很快,这表明新映像没有复制到远程节点上。很可能就是这样。

我无论如何都会发布这个,因为它可能有用。


编辑:请允许我进一步澄清,这个问题的根源最终是因为集群中没有共享的图像存储库。图像是从笔记本电脑(不运行ARM64(手动复制到每个RPI(运行ARM64的(上的,这个手动过程导致了问题。

笔记本电脑上的图像构建基于与ARM64不兼容的基本图像;这是手动复制到集群中的所有RPI的。这导致了Exec Format错误。

在RPI上构建了一个支持ARM64的基础镜像;然而,这个构建必须在所有RPI上完成,因为集群中没有中央存储库,Kubernetes可以将新构建的ARM64兼容映像拉到集群中的其他RPI节点。

解决方案:共享存储库

希望这能有所帮助。

最新更新