步骤1:在CentOS7中完成安装etcd和kubernetes与YUM并关闭防火墙
步骤2:修改/ etc / sysconfig / docker
中的相关配置项OPTIONS =' - selinux-enabled = false --insecure-registry gcr.io'
步骤3:修改/ etc / kubernetes / apiserver
中的相关配置项删除
ServiceAccount
在KUBE_ADMISSION_CONTROL配置项
中Step4:启动etcd和kubernetes的所有相关服务
步骤5:启动mysql db的ReplicationController
kubectl create -f 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"
Step6:启动相关的mysql数据库服务
kubectl create -f mysql-svc.yaml
kind: Service
metadata:
name: mysql
spec:
ports:
- port: 3306
selector:
app: mysql
步骤7:启动myweb的ReplicationController
kubectl create -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"
Step8:启动相关的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.jdbc4.CommunicationsException: 通信链路故障最后一个数据包成功发送到 服务器是0毫秒前。驱动程序没有收到任何数据包 来自服务器。
kubectl get 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 = MySQL的
root @ myweb-xswfb:/ usr / local / tomcat #ping mysql
ping:未知主机
有人可以告诉我为什么我无法从内部tomcat服务器ping mysqldb主机名吗?或者如何进一步找到问题?
答案 0 :(得分:1)
答案 1 :(得分:0)
尝试使用无头服务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
端点是:
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端点:
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/
我可以看到tomcat页面:
更新2
这是我的截图...我在数据库中看到的数据没有错误。
我建议检查你的数据库配置。
答案 2 :(得分:0)
作为一个初学者,我与您进行了相同的工作并遇到了相同的问题。 这是我的解决方案,也许您可以尝试一下:
在myweb-rc.yaml中删除这些配置,因为它将覆盖系统默认值:
env: -名称:MYSQL_SERVICE_HOST 值:“ mysql” -名称:MYSQL_SERVICE_PORT 值:“ 3306”
更改mysql-rc.yaml中的mysql映像标签。使用低版本的mysql:
图片:hub.c.163.com/library/mysql:5.5
首先创建服务,然后创建窗格。请参考以下顺序:
kubectl create -f myweb-svc.yaml
kubectl create -f mysql-svc.yaml
kubectl create -f mysql-rc.yaml
kubectl create -f myweb-rc.yaml
您可以参考此文档:Discovering services
祝你好运!