【问题标题】:kubernetes create deployment using docker local image - image pull failedkubernetes 使用 docker 本地镜像创建部署 - 镜像拉取失败
【发布时间】:2019-11-26 19:27:45
【问题描述】:

我尝试使用 minikube 从本地 docker 映像和 docker hub 部署 kubernetes。但两者都不起作用。

方法一: 使用保存和加载 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'

方法二: 我确实将图像推送到了我的 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. 日志的其他来源是什么

【问题讨论】:

    标签: docker kubernetes minikube


    【解决方案1】:

    method-1中,由于图片没有推送到repository,所以必须使用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 环境中的问题。
    • 更新了答案。
    • 为第一种方法设置 imagePullPolicy,是否可以在命令行中设置此变量?知道为什么第二种方法会失败,因为图像已经在我的 docker hub 中可用。如何为从 dockerfile 创建的图像设置此变量?这是错误的方法吗?
    • 使用 --image-pull-policy 选项更新了 kubectl。您可以在Method-2中手动拉取镜像进行调试。试试docker pull image:tag
    猜你喜欢
    • 2018-07-13
    • 2021-01-21
    • 2015-08-04
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    • 2022-01-02
    • 1970-01-01
    相关资源
    最近更新 更多