簡體   English   中英

為什么我會在此 Kubernetes 部署中收到 ErrImagePull 錯誤?

[英]Why am I getting an ErrImagePull error in this Kubernetes deployment?

我正在嘗試使用 Minikube、Docker Registry 和演示節點項目創建本地 Kubernetes 部署。

我做的第一件事是安裝 Docker v1.12.3,然后是 Minikube v0.12.2。

然后我通過運行這個命令創建了一個 Docker Registry 容器(通過本教程,只運行下面的第一個命令)

docker run -d -p 5000:5000 --name registry registry:2

接下來我運行這個 minikube 命令來創建一個本地 kubernetes 集群:

minikube start --vm-driver="virtualbox" --insecure-registry="0.0.0.0:5000"

我的項目結構如下所示:

.
├── Dockerfile
└── server.js

我的 Dockerfile 看起來像這樣:

FROM node:7.1.0
EXPOSE 8080
COPY server.js .
CMD node server.js

然后我構建了自己的 docker 鏡像並將其推送到我的私有存儲庫:

docker build -t hello-node .
docker tag hello-node localhost:5000/hello-node
docker push localhost:5000/hello-node

然后我嘗試使用以下命令運行部署:

kubectl run hello-node --image=localhost:5000/hello-node --port=8888

但后來我得到了這個:

sudo kubectl get pods --all-namespaces                                                                                                                             
NAMESPACE     NAME                          READY     STATUS         RESTARTS   AGE
default       hello-node-3745105022-gzs5a   0/1       ErrImagePull   0          11m
kube-system   kube-addon-manager-minikube   1/1       Running        4          10d
kube-system   kube-dns-v20-2x64k            3/3       Running        12         10d
kube-system   kubernetes-dashboard-mjpjv    1/1       Running        4          10d

我想我可能缺少某種 docker 注冊表身份驗證,但是當我在谷歌上搜索時,我找不到我理解的東西。 有人可以指出我正確的方向嗎?

編輯

在使用 ssh 訪問 kubernetes VM 上的bash並使用以下命令從我的私有注冊表中提取hello-node映像后:

minikube ssh
Boot2Docker version 1.11.1, build master : 901340f - Fri Jul  1 
22:52:19 UTC 2016
Docker version 1.11.1, build 5604cbe
docker@minikube:~$ sudo docker pull localhost:5000/hello-node
Using default tag: latest
Pulling repository localhost:5000/hello-node
Error while pulling image: Get http://localhost:5000/v1/repositories/hello-node/images: dial tcp 127.0.0.1:5000: getsockopt: connection refused

localhost:5000是在 kubernetes 主機 VM 中使用的正確地址嗎?

看起來您正在主機上運行注冊表。 實際上,您需要在 VM 內運行注冊表。 您可以通過在 shell 中運行此命令 first eval $(minikube docker-env)將您的 docker 客戶端指向 minikube VM 內的 docker 守護進程。

然后,您可以在主機上運行 docker build 命令,但它將在 VM 內構建。

事實上,如果您的目標是簡單地運行本地版本的鏡像,您應該運行eval $(minikube docker-env)以指向 VM 中的imagePullPolicy: IfNotPresent守護進程,並在您的 pod YAML 中設置imagePullPolicy: IfNotPresent 然后,如果可用,kubernetes 將使用本地構建的鏡像。

Docker-Desktop > Kubernetes也有同樣的問題,我嘗試將imagePullPolicy設置為Never並且它正常工作。

正如我從kubectl describe pod mypdKubectl試圖拉取鏡像,當然這個鏡像不存在於遠程服務器上,因此失敗。

上述屬性將避免連接到注冊表,並將使用來自 docker 本地圖像緩存的圖像。

spec:
  template:
    spec:
      containers:
        - image: my/local-image
          imagePullPolicy: Never

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM