如何诊断从未准备好的Kubernetes集群?

Jos*_*Fox 1 docker kubernetes google-kubernetes-engine

我向Kubernetes部署了一个图像,但即使在几个小时之后它也永远不会准备好.

$ kubectl get pods

NAME                            READY     STATUS             RESTARTS   AGE
myapp-b8dd974db-9jbsl    0/1       ImagePullBackOff   0          21m
Run Code Online (Sandbox Code Playgroud)

所有这些都发生在Quickstart Hello应用程序以及我自己的Docker镜像上.

尝试附加失败.

$ kubectl attach -it  myapp-b8dd974db-9jbs

Unable to use a TTY - container myapp did not allocate one
If you don't see a command prompt, try pressing enter.
error: unable to upgrade connection: container 
   myapp not found in pod myapp-b8dd974db-9jbsl_default
Run Code Online (Sandbox Code Playgroud)

尝试通过HTTP访问它失败.

在Stackdriver Logging中,我看到了类似的消息

skipping: failed to "StartContainer" for "myapp"
with ImagePullBackOff: "Back-off pulling image 
\"gcr.io/myproject/myapp-image:1.0\""
Run Code Online (Sandbox Code Playgroud)

No such image

然而,我确实部署了这些图像,云控制台显示这些图像是"绿色".

而且kubectl似乎在告诉我,集群确定.

$ kubectl get service myapp
NAME           TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)          AGE
myapp   LoadBalancer   10.43.248.78   35.193.107.141   8222:31840/TCP   29m
Run Code Online (Sandbox Code Playgroud)

我怎么诊断这个?

小智 6

您可以使用kubectl describe myapp-b8dd974db-9jbsl获取有关pod的更多信息.

但是从状态消息'ImagePullBackOff'可能会尝试下载docker镜像并失败.

这可能是由于几个原因,您将获得更多信息,kubectl describe但可能是您没有该docker存储库的权限或者image/image:标记不存在.