解决方法:
1、$ vi /etc/kubernetes/apiserver
2、找到这一行
"KUBE_ADMISSION_CONTROL="--admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota",去掉ServiceAccount,保存退出。
3、重新启动kube-apiserver服务即可
systemctl restart kube-apiserver
4、# 执行 显示正常
kubectl get pods
此时执行kubectl get pods, no resources found问题得以解决
问题描述
通过kubectl describe pod可以查看报错:
Error:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications
link failure The last packet sent successfully to the server was 0 milliseconds
ago. The driver has not received any packets from the server.
相关资源rc、pod、service、ep都创建成功,但是myweb的pods无法访问到mysql提供的数据库服务。
# kubectl get all
NAME DESIRED CURRENT READY AGE
rc/mysql 1 1 1 4h
rc/myweb 1 1 1 2h
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
svc/kubernetes 10.254.0.1 <none> 443/TCP 5d
svc/mysql 10.254.67.31 <none> 3306/TCP 4h
svc/myweb 10.254.62.177 <nodes> 8080:30001/TCP 2h
NAME READY STATUS RESTARTS AGE
po/mysql-vc9x6 1/1 Running 0 4h
po/myweb-6k7s3 1/1 Running 0 2h
# kubectl get ep
NAME ENDPOINTS AGE
kubernetes 192.168.1.171:6443 5d
mysql 172.17.0.4:3306 4h
myweb 172.17.0.2:8080 2h
分析
查看源代码
既然无法建立连接,那先看下是如何建立连接的。登录到myweb的docker容器里面,查看index.jsp文件,主要内容如下:
java.sql.Connection conn=null; java.lang.String strConn; java.sql.Statement
stmt=null; java.sql.ResultSet rs=null;
Class.forName("com.mysql.jdbc.Driver").newInstance(); try{
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...");
System.out.println("jdbc:mysql://"+ip+":"+port+"?useUnicode=true&characterEncoding=UTF-8");
conn =
java.sql.DriverManager.getConnection("jdbc:mysql://"+ip+":"+port+"?useUnicode=true&characterEncoding=UTF-8",
"root","123456"); stmt = conn.createStatement(); }catch(Exception ex){ ... }
* 就是用jsp创建了一个连接,连接的地址通过ENV方式注入。即在myweb-rc.yaml中配置的MYSQL_SERVICE_HOST和
MYSQL_SERVICE_PORT环境变量指定。
登陆myweb应用查看这两个环境变量是否有问题: [root@localhost ~]# kubectl exec -ti myweb-cp4gm --
/bin/bash root@myweb-cp4gm:/usr/local/tomcat# echo $MYSQL_SERVICE_HOST
10.254.15.45 root@myweb-cp4gm:/usr/local/tomcat# echo $MYSQL_SERVICE_PORT 3306
可以看出环境变量也是没有问题的。
<>解决方法
考虑到可能是mysql版本的问题,修改mysql版本为5.7,并且设置来直接使用本地镜像。
apiVersion : v1 kind : ReplicationController metadata : name : mysql spec :
replicas : 1 selector : app : mysql template : metadata : labels : app : mysql
spec : containers : - name : mysql image : mysql:5.7 imagePullPolicy:
IfNotPresent ports : - containerPort : 3306 env : - name : MYSQL_ROOT_PASSWORD
value : "123456"