我在一台机器上使用kubernetes进行测试,我已经从nginx docker图像构建了一个自定义图像,但是当我尝试在kubernetes中使用图像时,我得到一个图像拉错误?????
我的POD YAML
kind: Pod
apiVersion: v1
metadata:
name: yumserver
labels:
name: frontendhttp
spec:
containers:
- name: myfrontend
image: my/nginx:latest
ports:
- containerPort: 80
name: "http-server"
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: mypd
imagePullSecrets:
- name: myregistrykey
volumes:
- name: mypd
persistentVolumeClaim:
claimName: myclaim-1
Run Code Online (Sandbox Code Playgroud)
我的KUBERNETES指挥
kubectl create -f pod-yumserver.yaml
错误
kubectl describe pod yumserver
Name: yumserver
Namespace: default
Image(s): my/nginx:latest
Node: 127.0.0.1/127.0.0.1
Start Time: Tue, 26 Apr 2016 16:31:42 +0100
Labels: name=frontendhttp
Status: Pending
Reason:
Message:
IP: 172.17.0.2
Controllers: <none> …Run Code Online (Sandbox Code Playgroud) 我在我的机器上设置了docker,还有minikube,里面有docker,所以我可能在不同的VM上运行了两个docker实例
我构建一个图像并标记它,然后将其推送到本地注册表,它成功推送,我也可以从注册表中拉出它也是当我运行curl得到标签列表我得到结果,这是我做的
1- docker build -t 127.0.0.1:5000/eliza/console:0.0.1 .
2- docker run -d -p 5000:5000 --name registry registry:2
3- docker tag a3703d02a199 127.0.0.1:5000/eliza/console:0.0.1
4- docker push 127.0.0.1:5000/eliza/console:0.0.1
5- curl -X GET http://127.0.0.1:5000/v2/eliza/console/tags/list
Run Code Online (Sandbox Code Playgroud)
以上所有步骤都运行正常,没有任何问题.
我的问题是当我运行minikube并尝试在其中的本地注册表中访问此图像
所以,当我运行下一个命令
1- sudo minikube start --insecure-registry 127.0.0.1:5000
2- eval $(minikube docker-env)
3- minikube ssh
4- curl -X GET http://127.0.0.1:5000/v2/eliza/console/tags/list
Run Code Online (Sandbox Code Playgroud)
在最后一步(第4点),它给了我下一条消息
curl:(7)无法连接到127.0.0.1端口5000:连接被拒绝
因此,我可以从我的机器访问图像注册表,但不能从minikube访问,当我在minikube上使用Kubernetes部署此图像时,我当然会遇到问题,并且由于无法连接到http://127.0.0.1:5000而导致部署失败
你能帮我配置minikube来查看我的本地注册表,这样我的问题就能解决,然后我可以成功地使用kubernetes将图像部署到minikube吗?
UPDATE
我正在使用这个yaml文件(我命名为ConsolePre.yaml)来使用kubernetes部署我的图像
apiVersion: v1
kind: Service
metadata:
name: tripbru-console
labels:
app: tripbru-console
spec:
ports:
- port: 9080
targetPort: 9080
nodePort: …Run Code Online (Sandbox Code Playgroud) 我有一个名为 docker-hello-world 的 docker 映像 - 它所做的只是使用 JRE 将 Hello World 打印到日志中。经过测试,它工作正常。
然后,我将图像导入 Kubernetes Docker 并运行——仍然没有问题。
docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
docker-hello-world latest 9a161d166742 20 hours ago 83.17 MB
Run Code Online (Sandbox Code Playgroud)
kubectl run docker-hello-world --image=docker-hello-world:latest 出现问题 - 我也尝试了图像 ID,但我不明白为什么它找不到图像。它说部署已创建。
kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
docker-hello-world 1 1 1 0 24s
kubectl get pods
NAME READY STATUS RESTARTS AGE
docker-hello-world-67c745cff4-sv77d 0/1 ErrImagePull 0 43s
Run Code Online (Sandbox Code Playgroud)
日志:
kubectl logs docker-hello-world-67c745cff4-sv77d
Error from server …Run Code Online (Sandbox Code Playgroud) 在我的本地 Ubuntu 工作站上使用 minikube 和 docker,我在 Minikube Web UI 中收到以下错误:
Failed to pull image "localhost:5000/samples/myserver:snapshot-180717-213718-0199": rpc error: code = Unknown desc = Error response from daemon: Get http://localhost:5000/v2/: dial tcp 127.0.0.1:5000: getsockopt: connection refused
Run Code Online (Sandbox Code Playgroud)
在我创建以下部署配置后:
kubectl apply -f hello-world-deployment.yaml
Run Code Online (Sandbox Code Playgroud)
hello-world-deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: hello-world
spec:
replicas: 1
template:
metadata:
labels:
app: hello-world
tier: backend
spec:
containers:
- name: hello-world
image: localhost:5000/samples/myserver:snapshot-180717-213718-0199
resources:
requests:
cpu: 100m
memory: 100Mi
env:
- name: GET_HOSTS_FROM
value: dns
ports:
- containerPort: 8080 …Run Code Online (Sandbox Code Playgroud) 在Kubernetes 文档中提到使用的缓存语义ImagePullPolicy: Always使得 ImagePullPolicy 非常高效。我想选择不同的 ImagePullPolicy 的原因是什么?
我正在 Linux 工作站上使用 podman 和 minikube 探索和学习容器和 kubernetes。我使用 podman 在工作站上构建映像,并希望在使用 kvm2 虚拟机驱动程序的工作站上运行的 minikube 中部署这些映像。我还使用 CRI-O 容器运行时启动 minikube。
在这种情况下,将这些映像从工作站部署到 minikube 的有效工作流程是什么?Docker 不在 minikube 虚拟机上运行,因此不能像 minikube 文档中描述的那样重用 Docker 守护进程。使用 kvm2 时,此时与 minikube 共享主机文件系统似乎也不可行。
运行对工作站和 minikube vm 都可见的本地注册表是最佳选择吗?解答如何使用当地搬运工图像与Minikube?并且(Kubernetes + Minikube)无法从本地注册表获取 docker 镜像似乎为配置本地注册表提供了很好的解决方案。
skopeo 会是一个解决方案吗?
编辑:这是一篇很好的文章,描述了如何使用 podman 设置注册表:https ://computingforgeeks.com/create-docker-container-registry-with-podman-letsencrypt/
谢谢你
布拉德
我是Kubernetes的新手.我正在尝试按照本教程指导我如何使用minikube设置本地服务.我能够$ kubectl run hello-minikube --image=k8s.gcr.io/echoserver:1.10 --port=8080从教程中获得运行服务的东西.好哇!
现在我想运行一个带有本地标记和构建的 Docker镜像的服务器.根据这篇文章,我需要做的就是告诉我的电脑使用minikube docker守护进程,构建我的图像,然后设置imagePullPolicy为never.
如何和我在哪里设置imagePullPolicy有minikube?我已经google了一下,虽然有很多结果,但我在K8的"树林里的宝贝"状态会导致信息过载.(即你的答案越简单越好)