我已经安装了
kubectl
命令行工具,客户端版本为v1.27.2,kustomize版本为v5.0.1,服务器版本为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 镜像呢?
启动 minikube 集群并重用 Docker 守护进程后,您需要拉取 Docker 镜像:
docker pull hashicorp/http-echo
通过执行
minikube image ls
命令确保图像存在。之后,使用 Kubernetes 命令行工具 run 命令代替 Docker:
kubectl run http-echo --image=hashicorp/http-echo:latest --image-pull-policy=Never
它从 docker 镜像创建
http-echo
pod。它禁用镜像拉取策略,因为 docker 镜像已经在本地 minikube 集群中。最后一步是公开 pod 的端口以在浏览器中访问它:
kubectl port-forward http-echo 8080:5678
pod 的端口为 5678,本地端口为 8080。现在,您应该能够在浏览器中通过 http://localhost:8080 站点访问该服务。
要删除 Pod,请执行
kubectl delete pod http-echo
命令。
注意:您可以通过省略镜像拉取策略参数来减少步骤数,该参数允许您从 Docker Hub 下载镜像。但是,如果您使用
命令构建自定义映像,那么docker build -t <my-image> .
参数将有意义,因为您不想从外部源提取 docker 映像。--image-pull-policy=Never