我正在尝试使用Minikube、Docker Registry和一个演示节点项目创建一个本地Kubernetes部署。
我做的第一件事是安装Docker v1.12.3,然后是Minikube v0.12.2。
然后我通过运行以下命令创建了一个Docker Registry容器(通过this tutorial,只运行下面的第一个命令)
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主机虚拟机中使用的正确地址?
3条答案
按热度按时间hc8w905p1#
看起来您是在主机上运行注册表,但实际上,您需要在VM内部运行注册表。您可以通过在shell中首先运行此命令
eval $(minikube docker-env)
,将Docker客户端指向minikube VM内部的Docker守护进程。然后,您可以在主机上运行docker build命令,但它将在虚拟机内部进行构建。
实际上,如果您的目标只是运行映像的本地版本,您应该运行
eval $(minikube docker-env)
以指向VM中的docker守护进程,并在pod YAML中设置imagePullPolicy: IfNotPresent
。然后,kubernetes将使用本地构建的映像(如果可用)。k5ifujac2#
有一个同样的问题与
Docker-Desktop > Kubernetes
,我试图设置imagePullPolicy
到Never
,它只是工作。正如我从
kubectl describe pod mypd
中了解到的,Kubectl
试图拉取映像,当然,远程服务器上不存在此映像,因此失败。上述属性将避免连接到注册表,并将使用来自Docker本Map像缓存的图像。
c6ubokkw3#
这篇文章解决了我的类似错误https://medium.com/swlh/how-to-run-locally-built-docker-images-in-kubernetes-b28fbc32cc1d
将
imagePullPolicy: Never
相加然后将本地容器注册表链接到minikube docker容器注册表。
运行以下命令:
eval $(minikube -p minikube docker-env)
现在再次构建您的Docker映像和kubectl服务,就是这样!