MicroK8s一次启动失败处理过程
在一次虚拟机关闭后再次启动后,通过手动启动MicroK8s,MicroK8s启动成功,服务无法访问。
·
现象:
在一次虚拟机关闭后再次启动后,通过手动启动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
更多推荐
已为社区贡献1条内容
所有评论(0)