M1芯片2020款Mac Air上Minikube部署hello-node失败如何解决
问题根因
k8s.gcr.io/echoserver:1.4镜像发布时间较早,仅提供linux/amd64架构构建版本,未适配M1系列芯片使用的linux/arm64/v8架构。M1设备默认拉取该镜像后会尝试跨架构运行,镜像内针对amd64架构编译的Nginx与Lua模块无法在arm64环境下正常执行,最终触发Lua VM初始化失败报错,导致Pod无法进入就绪状态。
可行解决方案
- 方案1:替换为支持多架构的官方镜像版本(优先推荐)
先清理已创建的异常部署:
官方后续发布的echoserver版本已完成多架构适配,直接使用新版镜像创建部署即可,无需调整集群配置:kubectl delete deployment hello-node
等待10-20秒后执行kubectl create deployment hello-node --image=registry.k8s.io/echoserver:1.10kubectl get pods,当Pod状态显示为Running、READY列为1/1时即部署正常,查看日志不会再出现Lua VM初始化报错。 - 方案2:启动amd64架构的Minikube节点(兜底方案,适配必须使用老版本镜像的场景)
若测试场景必须依赖k8s.gcr.io/echoserver:1.4特定版本,可让Minikube启动运行在Rosetta 2转译层上的amd64架构集群,从节点层面兼容所有amd64镜像:
先删除现有arm64架构的Minikube集群:
启动时指定架构参数:minikube delete
集群启动完成后,执行原教程的部署命令即可正常运行,不会出现架构不兼容问题。minikube start --driver=docker --arch=amd64 - 方案3:单容器指定运行平台(临时测试用,成功率低于前两个方案)
若不想重建整个Minikube集群,可在创建部署时显式指定容器以linux/amd64平台运行,依赖Docker Desktop的跨架构转译能力执行:
注意:1.4版本镜像依赖的系统库版本过旧,跨架构转译时仍有概率出现运行异常,优先选择前两个方案。kubectl delete deployment hello-node kubectl create deployment hello-node --image=k8s.gcr.io/echoserver:1.4 --overrides='{"spec":{"template":{"spec":{"containers":[{"name":"echoserver","image":"k8s.gcr.io/echoserver:1.4"}],"nodeSelector":{"kubernetes.io/arch":"amd64"}}}}}'
内容的提问来源于stack exchange,提问作者Neetu M
相关产品推荐
相关产品推荐

