K8S上运行MySQL和Tomcat
K8S的搭建在https://www.cnblogs.com/xuziyu/p/11725976.html可以查看
我们要在K8S上启动Mysql服务分为以下几步
1.1为MySQL服务创建一个RC定义文件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: mysql ports: - containerPort: 3306 env: - name: MYSQL_ROOT_PASSWORD value: "123456"
-
解释
![](https://img2018.cnblogs.com/blog/1326937/201910/1326937-20191023191921257-448048453.jpg)
图片来源:《Kubernetes权威指南》第四版
1.2 文件创建好了以后为了将它发布到Kubernetes集群中,我们需要在Master上执行命令
[root@docker001 yum.repos.d]# kubectl apply -f mysql-svc.yaml
接下来查看刚刚创建的RC
[root@docker001 yum.repos.d]# kubectl get rc
查看Pod的创建情况时可以运行下面的命令 kubectl get pod
这里的running刚刚开始可能是ContainerCreating,等1分钟左右再看一下
2.1 创建一个Kubernetes Service ——MySQL的定义文件(名为mysql-svc.yaml)
apiVersion: v1 kind: Service metadata: name: mysql spec: type: NodePort ports: - port: 3306 nodePort: 30060 selector: app: mysql
说明:这里我们type用了NodePort,为了可以外部用海狸链接
2.2 运行kubectl命令,创建Service
[root@docker001 yum.repos.d]# kubectl create -f mysql-svc.yaml
运行kubectl命令查看刚刚创建的Service:
kubectl get svc
这时候我们就已经再K8S上启动好mysql服务了
3.1 登录MySQL
kubectl get rc,services yum install -y mysql mysql -h 10.109.17.0 -P 3306 -uroot -p123456
如果mysql -h 10.109.17.0 -P 3306 -uroot -p123456执行不成功,请进行以下步骤
[root@docker001 ~]# docker ps
找到mysql的CONTAINER ID
这里我的是2f4e3f3314c9
然后通过docker命令进入 docker exec -it 2f4e3f3314c9 bash mysql -h 10.109.17.0 -P 3306 -uroot -p123456
3.2 然后不出意外你就可以进入了
然后这里你用海狸链接时无法连上的,具体原因我还没有弄清楚,但是很神奇的是执行完以下步骤就可以了
mysql> alter user 'root'@'%' identified with mysql_native_password by'root'; Query OK, 0 rows affected (0.01 sec) mysql> mysql> alter user 'root'@'%' identified by '123456'; Query OK, 0 rows affected (0.02 sec) mysql> mysql> use mysql; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; Query OK, 0 rows affected (0.01 sec) mysql> mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)
然后这个时候你再用mysql -h 10.109.17.0 -P 3306 -uroot -p123456这个命令直接登录就OK了,具体原因还在探究中
4.1 然后打开海狸链接
- 30060端口是外部链接用的端口注意这里的这个外部端口在配置的时候:,我是避免了超出它的30000-32767这个范围,所以选了30060,你也可以改一下KUBE_API_ARGS参数范围
在设置node节点上mysql的端口时候,如果端口太大,发现会报错,提示端口范围只允许在30000-32767之间,
出现这个问题在于master的apiserver中KUBE_API_ARGS参数没设置,这个最好修改下,如下:
#这里修改端口范围,默认是30000-32767,创建service时超出会报错 KUBE_API_ARGS="--service-node-port-range=20000-65535"
- 这个参数具体在那个文档里改其实我也不是很清楚,但是在网上查了一下好像是生成证书的时候的用到的,具体的先不深究了 就用30000-32767之间的数把