我试图使用minikube和kitematic在我的本地机器上测试kubernetes。但是,kubernetes无法从我的本地存储库(ImagePullBackOff
)中提取图像。
我试着用这个来解决它:当使用Minikube
时,不能从私有仓库中拉docker映像但是我没有/etc/init.d/docker
,我想这是因为运动学?(我在OS X上)
我安装了https://github.com/docker/docker-registry,
docker tag local-image-build localhost:5000/local-image-build
docker push localhost:5000/local-image-build
我的kubernetes yaml包含:
spec:
containers:
- name: backend-nginx
image: localhost:5000/local-image-build:latest
imagePullPolicy: Always
但它仍然不工作…日志:
Error syncing pod, skipping: failed to "StartContainer"
for "backend-nginx" with ErrImagePull: "Error while pulling image:
Get http://127.0.0.1:5000/v1/repositories/local-image-build/images:
dial tcp 127.0.0.1:5000: getsockopt: connection refused
EDIT 2:
我不知道我是否走在正确的道路上,但我发现了这个:
http://kubernetes.io/docs/user-guide/images/
但我不知道什么是我的DOCKER_USER…
kubectl create secret docker-registry myregistrykey --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL
编辑3
现在我上了我的pod:
Failed to pull image "local-image-build:latest": Error: image library/local-image-build not found
Error syncing pod, skipping: failed to "StartContainer" for "backend-nginx" with ErrImagePull: "Error: image library/local-image-build not found"
救救我,我要疯了
编辑4
Error syncing pod, skipping: failed to "StartContainer" for "backend-nginx" with ErrImagePull: "Error response from daemon: Get https://192.168.99.101:5000/v1/_ping: tls: oversized record received with length 20527"
我添加了:
EXTRA_ARGS='
--label provider=virtualbox
--insecure-registry=192.168.99.101:5000
到我的docker配置,但它仍然不工作,相同的消息....
顺便说一下,我修改了我的yaml:
spec:
containers:
- name: backend-nginx
image: 192.168.99.101:5000/local-image-build:latest
imagePullPolicy: Always
我这样运行注册表:
docker run -d -p 5000:5000 --restart=always --name myregistry registry:2
使用minikube docker注册表代替本地docker
https://kubernetes.io/docs/tutorials/stateless-application/hello-minikube/create-a-docker-container-image
设置docker指向minikube
eval $(minikube docker-env)
推送到minikube docker
docker build -t hello-node:v1 .
设置你的部署不拉IfNotPresent
K8S默认设置为"Always"改为"IfNotPresent"
imagePullPolicy: IfNotPresent
相关问题
minikube start --vm-driver="virtualbox" --insecure-registry="$REG_IP":80
而不是
minikube start
$REG_IP is:
REG_IP=docker-machine ip registry
来源
如果您使用的是--vm-driver=none
,则需要将imagePullPolicy设置为Never
imagepulpolicy: Never:假设图像在本地存在。没有试图拉出图像。
根据kubernetes文档:https://kubernetes.io/docs/concepts/containers/images/#imagepullpolicy-defaulting
如果您使用最新的标签进行部署,那么它将尝试拉取图像。在遵循wsdl -2
上的步骤后,我能够部署带有v1标记的服务。- eval $(minikube -p minikube docker-env)
- minikube开始
- docker build——tag=my-service:v1 . kubectl创建部署my-service——image=my-service:v1
- kubectl expose pod "my-service"——类型= NodePort端口= 8080
- minikube service
在我的例子中,我必须执行以下步骤。
$ eval $(minikube docker-env)$ minikube config set driver virtualbox
$ minikube start
查看这篇很棒的文章:如何在Kubernetes中运行本地构建的Docker映像
我的环境
- 操作系统:Debian
- 版本:11 (Bullseye)
- Minikube: v1.24.0
- Kubectl: v1.22.4
- 码头工人:20.10.5 + dfsg1
它涵盖了所有错误的图像阶段和解决方法。
ErrImagePull
编辑deployment.yaml
并添加imagePullPolicy: Never
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-local-deployment
spec:
template:
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: my-local-image # The one built and tagged locally
imagePullPolicy: Never # So it doesn't pull the image from remote registry
ErrImageNeverPull
执行命令eval $(minikube -p minikube docker-env)
输出将本地Docker守护进程指向minikube内部Docker注册表所需的环境变量
最后重新构建映像,将其安装在minikube注册表中:
docker build . -t my-image
添加-insecure-registry="$REG_IP":80似乎不适合我。
我不得不使用wlredye的答案当使用Minikube时,不能从私有仓库中提取docker映像要使它工作:
对于http注册表,以下步骤适用于我:
- <
- minikube ssh/gh>编辑/var/lib/boot2docker/profile并添加到$EXTRA_ARGS中
--insecure-registry 192.168.99.1(your local machine's IP):5000
- 重启docker守护进程
sudo /etc/init.d/docker restart
- 验证您可以访问docker注册表
curl -s -S http://192.168.99.1/v2/_catalog
这是minikube版本:v0.14.0
首先你需要启动一个本地注册表,似乎你已经完成了。
docker run -d -p 5000:5000 --restart=always --name myregistry registry:2
您可以通过ifconfig
查看您的minikube IP
在minikube开始使用virtualbox作为VMdriver后,应该有如下输出:
vboxnet0 Link encap:Ethernet HWaddr 0a:00:27:00:00:00
inet addr:192.168.99.1 Bcast:192.168.99.255 Mask:255.255.255.0
inet6 addr: fe80::800:27ff:fe00:0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:515 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:86256 (86.2 KB)
minikube start --insecure-registry=192.168.99.1:5000
你可以通过(在minikube内)
来检查你是否可以提取你自己的图片 docker pull 192.168.99.1:5000/your_own_repo/your_own_images
希望这可能会有所帮助。
Mac我在minikube中有dns解析问题,因为/etc/resolv.conf配置了我的Mac ip。我没有在本地安装dns服务器,所以minikube无法解析任何内容。
我用安装本地dns-server
解决了这个问题brew install dnsmasq
sudo brew services start dnsmasq
在Mac中我安装了docker客户端所以我必须做
minikube config set driver docker
minikube start
启动minikube
minikube start --insecure-registry "10.0.0.0/24,192.168.39.0/24"
minikube addons enable registry
查找minikube IP
minikube ip
设置码头工人/insecure-registry
# edit /etc/docker/daemon.json
{
...
"insecure-registries": [ "your-minikube-ip:5000" ]
...
}
推送图片
docker build --tag $(minikube ip):5000/local-image-build:latest
docker push $(minikube ip):5000/local-image-build:latest
享受它。
:
https://minikube.sigs.k8s.io/docs/handbook/pushing/#4-pushing-to-an-in-cluster-using-registry-addon
在我的情况下(在M1上运行minikube),添加imagePullPolicy: Never
修复了这个问题
如果您在Windows中使用minikube
我通过在minikube集群中像下面这样构建我的映像来解决这个问题,因为我只是想测试它。
进入你想要创建镜像的目录
尝试下面的命令在本地的minikube中构建您的映像
然后您可以在您的部署中使用标记来引用此图像。Yaml或pods。yamlminikube image build -t your_image_name:tag .
我在CentOS7中进行了测试,并为我工作。
首先使用以下命令将图像加载到minikube:minikube image load test/kubia
查看minikube的图片列表:minikube image ls
然后不要从远程通过配置yaml文件拉出
apiVersion: v1
kind: Pod
metadata:
name: kubia-manual
spec:
containers:
- image: test/kubia
name: kubia
# This will use local image from minikube image list
imagePullPolicy: Never
ports:
- containerPort: 8080
protocol: TCP
NAME READY STATUS RESTARTS AGE
kubia-manual 1/1 Running 0 7s