Kubernetes使用本地Docker镜像创建部署-镜像拉取失败

4
我尝试使用minikube部署kubernetes,既从本地Docker镜像中部署,也从Docker Hub中部署。但两者都无法工作。
方法1: 使用save和load命令创建tar文件并生成镜像,然后通过kubectl可用。
root@arun-desktop-e470:/var/local/dprojects/elasticsearch# kubectl get pods --all-namespaces -o jsonpath="{..image}" |tr -s '[[:space:]]' '\n' |sort |uniq -c|grep elk
      2 elk/elasticsearch:latest

执行下面的命令创建部署:
kubectl run elastic --image=elk/elasticsearch:latest --port=9200
kubectl expose deployment elastic --target-port=9200 --type=NodePort
minikube service elastic --url

从 kubectl describe pod 命令中,
  Warning  Failed     122m (x4 over 124m)   kubelet, minikube  Failed to pull image "elk/elasticsearch:latest": rpc error: code = Unknown desc = Error response from daemon: pull access denied for elk/elasticsearch, repository does not exist or may require 'docker login'

方法2: 我已经将图像推送到我的Docker Hub存储库(https://hub.docker.com/r/get2arun/elk/tags),然后在终端中登录到Docker Hub并重新创建了部署。
像下面这样推送到Docker Hub,因此我有权限将图像推送和拉取到我的Docker Hub帐户。我已在“管理存储库”下检查了“协作者”,其中包含我的Docker Hub ID。
root@arun-desktop-e470:~# docker push get2arun/elk:elasticsearch_v1
The push refers to repository [docker.io/get2arun/elk]
19b7091eba36: Layer already exists 
237c06a69e1c: Layer already exists 
c84fa0f11212: Layer already exists 
6ca6c301e2ab: Layer already exists 
76dd25653d9b: Layer already exists 
602956e7a499: Layer already exists 
bde76be259f3: Layer already exists 
2333287a7524: Layer already exists 
d108ac3bd6ab: Layer already exists 
elasticsearch_v1: digest: sha256:6f0b981b5dedfbe3f8e0291dc17fc09d32739ec3e0dab6195190ab0cc3071821 size: 2214

kubectl run elasticsearch-v2 --image=get2arun/elk:elasticsearch_v1 --port=9200
从kubectl describe pods命令中:
  Normal   BackOff    21s               kubelet, minikube  Back-off pulling image "get2arun/elk:elasticsearch_v1"
  Warning  Failed     21s               kubelet, minikube  Error: ImagePullBackOff
  Normal   Pulling    7s (x2 over 24s)  kubelet, minikube  Pulling image "get2arun/elk:elasticsearch_v1"
  Warning  Failed     4s (x2 over 21s)  kubelet, minikube  Failed to pull image "get2arun/elk:elasticsearch_v1": rpc error: code = Unknown desc = Error response from daemon: pull access denied for get2arun/elk, repository does not exist or may require 'docker login'

我取消了代理设置并尝试使用开放式wifi帐户,但仍然看到权限被拒绝的错误消息。
这个错误消息不足以确定问题,并希望有一些方法来缩小这些问题的范围。
  1. Kubernetes在被要求使用本地docker镜像或从docker hub拉取镜像时后台会发生什么?
  2. 如何获取部署开始时的所有日志信息?
  3. 其他日志来源是什么?
1个回答

9

在方法一中,由于镜像没有推送到仓库中,你需要使用imagePullPolicy。

永不尝试拉取镜像

imagePullPolicy: Never

如果镜像不存在,请尝试拉取

imagePullPolicy: IfNotPresent

我认为如果您想使用本地镜像/仓库,IfNotPresent是理想的选择。根据您的需求使用即可。

kubectl

kubectl run elastic --image=elk/elasticsearch:latest --port=9200 --image-pull-policy IfNotPresent

在方法2中,推送了get2arun/elk:elasticsearch_v1镜像,在方法2的日志中正确地获取了镜像名称,拉取镜像“get2arun/elk:elasticsearch_v1”。我认为这可能是Kubernetes环境的问题。 - intechops6
更新了答案。 - Prakash Krishna
第一种方法设置imagePullPolicy,是否可以在命令行中设置此变量?为什么第二种方法会失败,因为镜像已经在我的Docker Hub中可用。如何为从dockerfile创建的图像设置此变量?这是错误的方法吗? - intechops6
已更新带有--image-pull-policy选项的kubectl。您可以通过在Method-2中手动拉取镜像来进行调试。尝试docker pull image:tag - Prakash Krishna

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接