web-dev-qa-db-ja.com

このKubernetes展開でErrImagePullエラーが発生するのはなぜですか?

Minikube、Docker Registry、デモノードプロジェクトを使用して、ローカルKubernetesデプロイメントを作成しようとしています。

最初にしたことは、Docker v 1.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のbashにアクセスした後VMを取得し、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内で使用する正しいアドレスは?

23
Nathan Jones

ホストでレジストリを実行しているようです。実際、VM内でレジストリを実行する必要があります。シェルでeval $(minikube docker-env)を最初に実行することで、minikube VM)内のdockerデーモンにdockerクライアントをポイントできます。

その後、ホストでdocker buildコマンドを実行できますが、VM内でビルドされます。

実際、イメージのローカルバージョンを単純に実行することが目標である場合は、eval $(minikube docker-env)を実行してVMのdockerデーモンを指し、imagePullPolicy: IfNotPresentポッドYAMLで。次に、kubernetesはローカルに構築されたイメージを使用します(使用可能な場合)。

29
Matt Rickard