如图,一个Pod在等待(Pending)状态9个小时,肯定不是个好事!容器没有启动,我们将会使用技巧2中的describe命令对此进行深入地研究。但,在这里我们强调一下在容器启动失败时发生的其他错误代码。如下:
- Imagepullbackoff:
Docker镜像仓库不可访问,部署中指定的镜像名称或版本不正确。
请确保镜像名称是正确的,并且镜像仓库是可访问的以及经过身份验证的(docker login…)。
- RunContainerError:
也是一种可能。
原因:
缺少ConfigMap或Secrets。
- ContainerCreating:
容器创建时一些组件无法立刻启用,比如持久卷?
在研究其他错误之前,让我们先尝试使用错误的镜像名称启动Pod。
- # start Pod from image "ngin".
- # 'web' can be any name, is the name of resulting K8S deployment
- kubectl run web –image=ngin –replicas=1
最后一行展示了镜像错误
果然,完全不存在的镜像“ngin”导致了ImagePullBackOff错误。使用正确的镜像名称“nginx”就能解决这个问题。
- kubectl run temp –image=nginx –replicas=1
- kubectl get pods
如图,Pod已经起来了。
接下来,这里有一些在容器启动后可能发生的错误。
- Crashloopbackoff:
Pod存活检查失败或Docker镜像出错。
例如,Docker CMD即刻退出。
可以用下面的技巧3来检查日志。
注意:
此截图中的“重启(RESTARTS)”列显示了重启的次数。
在这种情况下,你应该会看到一些重启,因为当错误发生时,Kubernetes会反复尝试启动Pod。
- 如果Pod处于运行(Running)状态,而你的应用程序仍然不能正常工作,请继续技巧3和4。
技巧:检查和Pod相关的事件
如果你在Pod状态上看到一个错误代码,你可以使用describe命令获得更多信息。这在容器本身没有启动的情况下是很有帮助的。