Python 如何在kubernetes集群中使用脚本语言连接到数据库

Python 如何在kubernetes集群中使用脚本语言连接到数据库,python,mysql,r,kubernetes,google-kubernetes-engine,Python,Mysql,R,Kubernetes,Google Kubernetes Engine,使用GoogleKubernetes引擎,我在Kubernetes中设置了一个mysql数据库部署和服务,很像。我想通过R和R访问它,我在kubernetes集群中的另一个部署和服务(R-user-app,w/2容器)中有R。这在docker的网络中起到了作用 > kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)

使用GoogleKubernetes引擎,我在Kubernetes中设置了一个mysql数据库部署和服务,很像。我想通过R和R访问它,我在kubernetes集群中的另一个部署和服务(R-user-app,w/2容器)中有R。这在docker的网络中起到了作用

> kubectl get services
NAME         TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)                         AGE
kubernetes   ClusterIP      10.15.240.1     <none>           443/TCP                         8d
mysql        LoadBalancer   10.15.248.129   35.227.123.232   3306:31410/TCP                  3m
r-user-app   LoadBalancer   10.15.255.135   35.227.33.206    3838:31003/TCP,8787:32395/TCP   1d
然而,当我试图通过R获得它时,我没有这样的运气:

root@r-user-app-1788932656-vgczh:/# R
R version 3.4.2 (2017-09-28) -- "Short Summer"
-----
> require("RMySQL")
Loading required package: RMySQL
Loading required package: DBI
> mydb<-dbConnect(MySQL(), user="root", password="mypassword", host="10.15.248.129")
Error in .local(drv, ...) :
  Failed to connect to database: Error: Can't connect to MySQL server on '10.15.248.129' (107)

也许我甚至不知道该问什么问题!请帮忙#kubenube

您不需要使用IP。您可以通过名称直接访问服务器。您甚至不需要使用带有“mysql.default.svc.cluster.local”的DNS全名,只要“mysql”就足够了


您还应该检查mysql pod是否正确部署。使用
Type=LoadBalancer
对于数据库来说不是一个好主意,因为它会将数据库打开到外部网络。

回答我自己的问题:这是yaml的一个问题。需要确保与
服务匹配

  selector:
    app: my-app
    tier: mysql
以及
部署

spec:
  selector:
    matchLabels:
      app: my-app
      tier: mysql

现在我们可以使用“mysql”而不是主机IP地址访问数据库。

Steinman非常感谢您的快速回答,但当我尝试时,我得到了相同的错误。我将只切换回ClusterIP<代码>数据库它看起来像是一个网络问题…它实际上应该工作这是一个GCE的东西吗?Ping mysql服务返回为空:
root@r-user-app-1788932656-vgczh:/#ping mysql ping mysql.default.svc.cluster.local(10.15.245.25):56个数据字节
您的mysql播客运行正常吗?查看mysql后面的pod日志
20:32:44 1[注意]服务器主机名(绑定地址):“*”;端口:3306 2018-01-17 20:32:44 1[注]IPv6可用。2018-01-17 20:32:44 1[注]::“决议为”:”;2018-01-17 20:32:44 1[注意]已在IP上创建服务器套接字:':'。2018-01-17 20:32:44[警告]“私人代理”条目root@mysql-3648550465 lmzxc在--跳过名称解析模式下被忽略。2018-01-17 20:32:44 1[注]事件计划程序:已加载0个事件2018-01-17 20:32:44 1[注]mysqld:已准备好连接。版本:“5.6.39”套接字:“/var/run/mysqld/mysqld.sock”端口:3306 MySQL社区服务器(GPL)
  selector:
    app: my-app
    tier: mysql
spec:
  selector:
    matchLabels:
      app: my-app
      tier: mysql