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"
  • 解释

图片来源:《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之间的数把
原文地址:https://www.cnblogs.com/xuziyu/p/11728099.html