现象:

在一次虚拟机关闭后再次启动后,通过手动启动MicroK8s,MicroK8s启动成功,服务无法访问。


处理过程:

第一步:使用microk8s inspect查看MicroK8s是否正常启动。查看到没有错误。
microk8s inspect
第二步:查看Pod是否正常,使用 microk8s kubectl get pods -A(如果做了快捷链接alias kubectl='microk8s kubectl’操作,也可以直接使用kubectl get pod -A)。发现有一个Pod处在ContainerCreating状态。
microk8s kubectl get pods -A

在这里插入图片描述

第三步:查看该Pod日志,命令格式kubectl describe pod [pod名称] -n [命名空间名称]:
 kubectl describe pod calico-kube-controllers-68d594d748-547hs -n kube-system

在这里插入图片描述
从日志可以看出是因为没有拉取到registry.k8s.io/pause:3.7镜像导致无法创建Pod。

第四步:查看MicroK8s cluster中是否有registry.k8s.io/pause:3.7镜像。
microk8s ctr images ls

在列出的镜像列表中确实没有registry.k8s.io/pause:3.7(因为列表太长就不贴图了。另外说明一下,因为该镜像默认的仓库地址无法访问到,当初安装MicroK8s时是通过Docker 拉取的镜像,然后导入MicroK8s cluster中的,不知道这次为什么又找不到了,这个问题后面再研究)。

第五步:发现问题,解决问题。将日志中提示找不到的镜像再次从Docker中导入MicroK8s cluster。

先通过docker的save命令将Docker中镜像达成tar包,然后通过microk8s命令导入MicroK8s cluster。

docker save registry.k8s.io/pause>pause37.tar
microk8s ctr image import pause37.tar

执行完命令后,再查看MicroK8s cluster中镜像可以发现registry.k8s.io/pause:3.7已经加入了。
再次查看Pod状态,发现所有Pod都已经启动。

在这里插入图片描述

解决方案:

最终是通过再次将Docker中的镜像导入MicroK8s cluster中解决问题。因为MicroK8s cluster中Pod启动默认优先还是从集群中拉去镜像,在集群中没有该镜像的情况下再会去远程仓库拉取。

写在最后

本次问题解决记录,只针对本人当时的网络和系统环境和相关软件版本。
网络环境:国内正常网络
系统环境:Ubuntu22
MicroK8s版本:MicroK8s v1.26.1 revision 4595

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐