当前位置: 首页 > 知识库问答 >
问题:

kubernetes示例中的Mysql Communications链接故障

阎璞瑜
2023-03-14

Step1:在CentOS7中完成使用YUM安装etcd和kubernetes并关闭防火墙

第二步:修改/etc/sysconfig/docker中的相关配置项

OPTIONS = '-selinux-enabled = false-unsecured-registry gcr . io '

Step3:修改 /etc/kubernetes/apiserver中的相关配置项

去除

服务帐户

在KUBE _准入_控制配置项中

第四步:启动etcd和kubernetes的所有相关服务

步骤5:启动mysql数据库的复制控制器

创建mysql-rc.yaml

apiVersion: v1
kind: ReplicationController  
metadata:
  name: mysql
spec:
  replicas: 1 
  selector:
    app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: hub.c.163.com/library/mysql
        ports:
        - containerPort: 3306
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "123456"

步骤6:启动相关的mysql-db服务

kubectl create -f mysql-svc.yaml

kind: Service   
metadata: 
  name: mysql 
spec:
  ports:
    - port: 3306
  selector:     
    app: mysql

步骤7:启动myweb的复制控制器

kubectl创建-f myweb-rc.yaml

apiVersion: v1
kind: ReplicationController
metadata:
  name: myweb
spec:
  replicas: 3  
  selector:
    app: myweb
  template:
    metadata:
      labels:
        app: myweb
    spec:
      containers:
      - name: myweb
        image: docker.io/kubeguide/tomcat-app:v1
        ports: 
        - containerPort: 8080
        env:
        - name: MYSQL_SERVICE_HOST
          value: "mysql"
        - name: MYSQL_SERVICE_PORT
          value: "3306"

步骤8:启动相关的tomcat服务

kubectl create -f myweb-svc.yaml

apiVersion: v1
kind: Service
metadata: 
  name: myweb
spec:
  type: NodePort
  ports:
    - port: 8080
      nodePort: 30001
  selector:
    app: myweb

当我使用nodeport(30001)从浏览器访问时,我会得到以下异常:

错误:com . MySQL . JDBC . exceptions . JDBC 4 . communication s异常:通信链接失败最后一个成功发送到服务器的数据包是在0毫秒前。驱动程序没有从服务器收到任何数据包。

库贝特尔获得EP

NAME         ENDPOINTS                                         AGE

kubernetes   192.168.57.129:6443                               1d

mysql        172.17.0.2:3306                                   1d

myweb        172.17.0.3:8080,172.17.0.4:8080,172.17.0.5:8080   1d

Kubectl Get SVC

NAME         CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE

kubernetes   10.254.0.1     <none>        443/TCP          1d

mysql        10.254.0.5     <none>        3306/TCP         1d

myweb        10.254.220.2   <nodes>       8080:30001/TCP   1d

从任何tomcat容器的内部,我都可以看到mysql-env和JSP中的相关mysql链接代码,如下所示:

Class.forName("com.mysql.jdbc.Driver");
String ip=System.getenv("MYSQL_SERVICE_HOST");
String port=System.getenv("MYSQL_SERVICE_PORT");
ip=(ip==null)?"localhost":ip;
port=(port==null)?"3306":port;  
System.out.println("Connecting to database...");

conn = java.sql.DriverManager.getConnection("jdbc:mysql://"+ip+":"+port+"?useUnicode=true&characterEncoding=UTF-8", "root","123456");

[root@promote ~]# docker exec -it 1470cfaa1b1c /bin/bash

root@myweb-xswfb:/usr/local/tomcat# env |grep MYSQL_SERVICE

MYSQL_SERVICE_PORT=3306

MYSQL_SERVICE_HOST

root@myweb-xswfb:/usr/本地/Tomcat#ping mysql

ping:未知主机

有人能告诉我为什么我不能ping mysqldb主机名从内部Tomcat服务器?或者如何进一步定位问题?

共有3个答案

赵智
2023-03-14

作为一个初学者,我和你做了同样的工作,遇到了同样的问题。这是我的解决方案,也许你可以试试:

>

  • 在myweb rc中删除这些配置。yaml,因为它将覆盖系统默认值:

    env: -名称:MYSQL_SERVICE_HOST值:“MYSQL”-名称:MYSQL_SERVICE_PORT值:“3306”

    更改mysql-rc.yaml中的mysql image标签,使用低版本mysql:

    图片:hub.c.163.com/library/mysql:5.5

    首先创建服务,然后创建pod。请参考以下顺序:

    kubectl create -f myweb-svc.yaml

    kubectl create -f mysql-svc.yaml

    创建mysql-rc.yaml

    kubectl创建-f myweb-rc.yaml

    您可以参考此文档:发现服务

    祝你好运

  • 柴意智
    2023-03-14

    尝试使用无头服务http://kubernetes.io/v1.0/docs/user-guide/services.html#headless-services

    通过在你的mysql服务中设置

    clusterIP: None
    

    更新

    我试过你的yaml文件。

    pod正在运行:

    ➜  kb get po                      
    NAME          READY     STATUS    RESTARTS   AGE
    mysql-ndtxn   1/1       Running   0          7m
    myweb-j8xgh   1/1       Running   0          8m
    myweb-qc7ws   1/1       Running   0          8m
    myweb-zhzll   1/1       Running   0          8m
    

    服务包括:

    kb get svc
    NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
    kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP          1h
    mysql        ClusterIP   10.102.178.190   <none>        3306/TCP         20m
    myweb        NodePort    10.98.74.113     <none>        8080:30001/TCP   19m
    

    endpoint为:

    kb get ep 
    NAME         ENDPOINTS                                         AGE
    kubernetes   10.0.2.15:8443                                    1h
    mysql        172.17.0.7:3306                                   20m
    myweb        172.17.0.2:8080,172.17.0.4:8080,172.17.0.6:8080   19m
    

    我在一个tomcat pod上执行bash,我可以ping我的服务(问题已解决):

    kb exec -ti myweb-zhzll -- bash
    root@myweb-zhzll:/usr/local/tomcat# ping mysql
    PING mysql.default.svc.cluster.local (10.102.178.190): 56 data bytes
    ^C--- mysql.default.svc.cluster.local ping statistics ---
    

    我可以 ping endpoint:

    ping 172.17.0.7
    PING 172.17.0.7 (172.17.0.7): 56 data bytes
    64 bytes from 172.17.0.7: icmp_seq=0 ttl=64 time=0.181 ms
    64 bytes from 172.17.0.7: icmp_seq=1 ttl=64 time=0.105 ms
    64 bytes from 172.17.0.7: icmp_seq=2 ttl=64 time=0.119 ms
    ^C--- 172.17.0.7 ping statistics ---
    

    正在连接到

    http://192.168.99.100:30001/
    

    我可以看到假猫页面:

    更新 2

    这是我的截图...我在您的数据库中看到数据没有错误。

    我建议检查您的数据库配置。

    裴育
    2023-03-14

    我知道原因,是DNS的问题。web服务器找不到mysql服务器的IP地址。所以失败了。临时解决方案是将web服务器的IP地址改为mysql数据库服务器。希望能帮到你。谢谢你。

     类似资料:
    • 查看某个资源的定义和用法 kubectl explain 查看Pod的状态 kubectl get pods kubectl describe pods my-pod 监控Pod状态的变化 kubectl get pod -w 可以看到一个 namespace 中所有的 pod 的 phase 变化,请参考 Pod 的生命周期。 查看 Pod 的日志 kubectl logs my-pod kub

    • 链表是一系列通过链接连接在一起的数据结构。 链接列表是包含项目的一系列链接。 每个链接都包含与另一个链接的连接。 链表是数组后第二个最常用的数据结构。 以下是理解链表的概念的重要术语。 Link - 链接列表的每个链接都可以存储称为元素的数据。 Next - 链接列表的每个链接都包含指向下一个链接的链接。 LinkedList - LinkedList包含指向First的第一个Link的连接链接。

    • 我正在构建一个脚本,它将通知聊天室关于Asana中任务、评论等的更改。 我面临着3个简单的问题,但我被困住了,我想也许你们中的一些人可以帮助我。 问题#1:我面临的问题是,当某人(用户)在评论中得到“提及或超链接”时,我会得到一个随机的网址,上面有数字,我对用户身份或任何东西都不太了解。也许有什么我没看到的逻辑? 任务和项目的超链接也一样吗?你能告诉我URL的第一个和第二个是什么吗? 当我从Asa

    • 这个示例程序将展示如何从一个URL获得一个页面。然后提取页面中的所有链接、图片和其它辅助内容。并检查URLs和文本信息。 运行下面程序需要指定一个URLs作为参数 package org.jsoup.examples; import org.jsoup.Jsoup; import org.jsoup.helper.Validate; import org.jsoup.nodes.Document

    • 本文向大家介绍btrace定位生产故障的方法示例,包括了btrace定位生产故障的方法示例的使用技巧和注意事项,需要的朋友参考一下 前言 很多时候我们需要知道更多的程序的运行细节,但又不可能在开发的时候就把程序中所有的运行细节都打印到日志上,通常这个时候能采取的就是修改代码,重新部署,然后再观察,但这种方法对于online应用来说不是很好,另外一方面如果碰到不好改的代码,例如引用的其他的外部的包什

    • 本文向大家介绍超链接的禁用属性Disabled使用示例,包括了超链接的禁用属性Disabled使用示例的使用技巧和注意事项,需要的朋友参考一下 可以设置超链接的Disabled属性的true 和 false来确定超链接是不是能点击 例如: 上面的意思是不想让bai du的超链生效,但在click不做任何约束和判断的话,但点击bai du的时候自然就会跳转到百度页面,这就是html中超链接禁用属性的