【问题标题】:Use local docker image having mysql with minikube使用具有 mysql 和 minikube 的本地 docker 映像
【发布时间】:2019-03-21 15:26:42
【问题描述】:

在我的笔记本电脑上,我安装了 Linux Mint 操作系统。详情如下:

Mint version 19, 
Code name : Tara,
PackageBase : Ubuntu Bionic
Cinnamon (64-bit)
  1. 我有使用 spring boot 和 mysql 编写的 web 服务。

  2. 它在本地运行良好。- 已验证和测试... 使用 dockerfile 我创建了 docker 映像。 从 Dockerfile 目录运行命令-docker build . -t users-mysql-docker

运行创建的 Docker 镜像(users-mysql-docker)。 docker run -p 8086:8086 --name users-mysql-app --link mysql-standalone:mysql -d users-mysql-docker(在这个命令中,我们将自己的镜像与独立的 mysql 链接起来。)

我已经在 docker 和容器 mysql-standalone 中有 mysql 映像。

  1. 我启动了 minikube 并检查了 pod 和部署
xxxxxxxxx:~$ pwd
/home/sj
xxxxxxxxxx:~$ minikube start
xxxxxxxxxx:~$ kubectl get pods
xxxxxxxxxx:~$ kubectl get deployments
xxxxxxxxxx:~$ eval $(minikube docker-env)

现在,当我检查 docker 映像时,看起来就像 README 所描述的那样,它使用 eval $(minikube docker-env) 重用 Minikube 的 Docker 守护程序。

  1. 根据this 链接,我确实在 minikube 上设置了 mysql。 有了我在 pod、部署和服务中看到的内容
xxxxxxxxxx:~$ kubectl get pods
NAME                         READY   STATUS    RESTARTS   AGE
mysql-6c57cd4d76-gxb7g       1/1     Running   1          9d

xxxxxxxxxx:~$ kubectl get deployments
NAME        DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
mysql       1         1         1            1           8d

xxxxxxxxxx:~$ kubectl get services
NAME         TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
kubernetes   ClusterIP      10.96.0.1        <none>        443/TCP          9d
mysql        ClusterIP      None             <none>        3306/TCP         8d
  1. 现在我想将第 1 步中的相同 Web 服务部署到 kubernetes(minikube)。 我去了我有 dockerfile 的目录并运行如下构建命令:

xxxxxxxxx:/目录$ 码头工人建造。 -t users-mysql-kube:V1

验证我是否可以在 minikube 内的 deamon docker 中看到图像。

xxxxxxxxxx:~$ docker images
REPOSITORY                                 TAG                 IMAGE ID            CREATED             SIZE
users-mysql-kube                           V1                  53152583b2b8        2 seconds ago       652MB
openjdk                                    8                   81f83aac57d6        5 weeks ago         624MB
mysql                                      5.7                 563a026a1511        5 weeks ago         372MB
k8s.gcr.io/coredns                         1.2.2               367cdc8433a4        6 weeks ago         39.2MB
k8s.gcr.io/kubernetes-dashboard-amd64      v1.10.0             0dab2435c100        7 weeks ago         122MB
k8s.gcr.io/kube-proxy-amd64                v1.10.0             bfc21aadc7d3        6 months ago        97MB
k8s.gcr.io/kube-apiserver-amd64            v1.10.0             af20925d51a3        6 months ago        225MB
k8s.gcr.io/kube-scheduler-amd64            v1.10.0             704ba848e69a        6 months ago        50.4MB
k8s.gcr.io/kube-controller-manager-amd64   v1.10.0             ad86dbed1555        6 months ago        148MB
k8s.gcr.io/etcd-amd64                      3.1.12              52920ad46f5b        7 months ago        193MB
k8s.gcr.io/kube-addon-manager              v8.6                9c16409588eb        7 months ago        78.4MB
k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64     1.14.8              c2ce1ffb51ed        9 months ago        41MB
k8s.gcr.io/k8s-dns-sidecar-amd64           1.14.8              6f7f2dc7fab5        9 months ago        42.2MB
k8s.gcr.io/k8s-dns-kube-dns-amd64          1.14.8              80cc5ea4b547        9 months ago        50.5MB
k8s.gcr.io/pause-amd64                     3.1                 da86e6ba6ca1        9 months ago        742kB
gcr.io/k8s-minikube/storage-provisioner    v1.8.1              4689081edb10        11 months ago       80.8MB

我按照测试目的尝试了以下步骤。我可能错了。请就此提出您的建议

  1. 如第 2 步中提到的我运行 docker 映像并将其链接到 mysql 的方式,我们如何在 minikube 中运行第 5 步中创建的映像并将其链接到已部署的 mysql? 是不是类似:
xxxxxxxxxxx:~$ kubectl run umk-01 --image=users-mysql-kube:V1 --image-pull-policy=Never
  1. 镜像部署后,如何暴露? 我应该这样做:
xxxxxxxxxxxxx:~$ kubectl expose deployment umk-01 --type=NodePort --port=8086

xxxxxxxxxxxxx:~$ kubectl get services
NAME         TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
kubernetes   ClusterIP      10.96.0.1        <none>        443/TCP          9d
mysql        ClusterIP      None             <none>        3306/TCP         8d
umk-01       NodePort       10.100.105.58    <none>        8086:30004/TCP   6s
  1. 我尝试了第 6 步和第 7 步,然后尝试了下面的命令,但没有成功。
xxxxxxxxxxxxx:~$ minikube service umk-01 --url
Waiting, endpoint for service is not ready yet...

这意味着在第 6 步和第 7 步中有问题。 有人可以帮忙吗?

【问题讨论】:

  • 使用minikube ip检查你的minikube的地址是什么。找到服务kubectl get svc umk-01 使用的节点端口。最后用curl MINIKUBE_IP:NODE_PORT进行测试
  • xxxxxxxxxxxxx:~$ kubectl get svc umk-01 提供端口 8086:32581/TCP 和 xxxxxxxxxx:~$ minikube ip 提供 192.168.99.100` 然后尝试测试 xxxxxxxxxx:~$ curl 192.168.99.100:32581 这给出错误- curl: (7) 无法连接到 192.168.99.100 端口 32581:连接被拒绝
  • 您可以尝试使用 kubectl exec -it &lt;POD_NAME&gt; -- /bin/bash 连接到您的 pod 并检查它是否可以在本地运行。

标签: mysql docker kubernetes linux-mint minikube


【解决方案1】:

我不确定您是否通过 Minikube 获得 nodeport 服务的服务 URL。您可以直接访问 Minikube IP 和端口 30004 上的服务。只要确保您没有防火墙阻止该端口即可。

【讨论】:

  • 我在本地执行此操作,所以我确信没有防火墙问题。但是,如果您通过我的帖子描述步骤 6 和 7 看起来不正确。我想如果纠正它应该可以工作。你能看透那个并提供你的想法吗?
猜你喜欢
  • 2017-07-22
  • 2019-03-10
  • 2021-10-30
  • 2020-01-06
  • 2020-03-28
  • 1970-01-01
  • 2020-11-02
  • 2022-12-09
  • 1970-01-01
相关资源
最近更新 更多