我已经安装了kubectl
命令行工具v1.27.2客户端版本,v5.0.1 kustomize版本和v1.26.3服务器版本。我在Microsoft Windows 10 Enterprise和Git Bash上使用minikube
v1.30.1。我通过以下方式启动了minikube集群:
minikube start
字符串
然后,我在minikube集群中重用Docker守护进程:
eval $(minikube docker-env)
型
现在,我想在minikube集群中测试hashicorp/http-echo docker镜像。我尝试将镜像作为docker容器运行:
docker run -p 5678:5678 hashicorp/http-echo -text="hello world"
型
但是,如果我在浏览器中访问http://localhost:5678/站点,则无法访问。因此,我强制删除了docker镜像并从minikube退出了docker环境:
docker rmi -f docker.io/hashicorp/http-echo:latest
eval $(minikube docker-env -u)
型
如果我在没有minikube的情况下对docker镜像进行测试,一切都能正常工作。但是我如何在浏览器中测试minikube集群中的docker镜像呢?
2条答案
按热度按时间l5tcr1uw1#
启动minikube集群并重用Docker守护进程后,需要拉取Docker镜像:
字符串
通过执行
minikube image ls
命令确保镜像存在。之后,使用Kubernetes命令行工具run命令而不是Docker:型
它从docker镜像创建
http-echo
pod,您可以通过kubectl get pod
命令确保这一点。此外,它禁用了镜像拉取策略,因为docker镜像已经在本地minikube集群中。最后一步是暴露pod的端口以在浏览器中访问它:型
Pod的端口是5678,本地端口是8080。现在,您应该可以在http://localhost:8080站点的浏览器中访问该服务。
要删除pod,请执行
kubectl delete pod http-echo
命令。注意事项:您可以通过省略镜像拉取策略参数来减少步骤数量,该参数允许您从Docker Hub下载镜像。但是如果您使用
docker build -t <my-image> .
命令构建自定义镜像,则--image-pull-policy=Never
参数将有意义,因为您不想从外部源拉取Docker镜像。trnvg8h32#
1.你不应该在镜像上使用[:latest]标签,即使你使用
(eval $(minikube docker-env))
。因为它内部从远程仓库而不是本地镜像获取。你应该指定标签名称[:1.xx,:test etc]。然后你可以从你的CLI中使用removeimage-pull-policy
选项。https://kubernetes.io/docs/concepts/containers/images/#updating-images见注解。
在生产环境中部署容器时,应避免使用:latest标签,因为很难跟踪映像的哪个版本正在运行,也很难正确回滚。
相反,指定一个有意义的标记,如v1.42.0和/或摘要。
1.你也可以使用service而不是port-forward。port-forward是访问pod的简单方法。
https://kubernetes.io/docs/concepts/services-networking/service/