mysql可以以docker的形式在集群内部署,也可以安装在集群之外,以服务的形式部署到集群内。
(1)、如果是在集群内部署,可以启动一个ReplicationController,用以对mysql pod进行监控,并同时启动一个Service,用以集群访问。
(2)、如果mysql是安装在集群之外,那么可以启动一个Endpoint和Service,将mysql引入集群之中。
下面分别对这两种方式进行部署。
1、安装Mysql
创建mysql-rc.yaml和mysql-svc.yaml,分别如下:
mysql-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: mysql-rc
labels:
name: mysql-rc
spec:
replicas: 1
selector:
name: mysql-pod
template:
metadata:
labels:
name: mysql-pod
spec:
containers:
- name: mysql
image: mysql
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "mysql"
mysql-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: mysql-svc
labels:
name: mysql-svc
spec:
type: NodePort
ports:
- port: 3306
protocol: TCP
targetPort: 3306
name: http
nodePort: 30306
selector:
name: mysql-pod
在mysql-rc.yaml中,image参数可以指定mysql的版本,如8.0.11、5.7.22等。这里省略了,表示用latest。另外,可以指定镜像库,这里使用阿里云镜像库,在安装docker时进行了配置。env参数指定了mysql的root密码。
在mysql-svc.yaml中,targetPort表示mysql pod中mysql窗口的目标端口,默认为3306,type类型为NodePort,表示将映射到本地端口,本地端口为nodePort: 30306。
接下来启动ReplicationController和Service,执行以下命令:
kubectl create -f mysql-rc.yaml
kubectl create -f mysql-svc.yaml
启动后可以查看mysql部署在了哪个node上,执行以下命令可以查看:
kubectl get pod -o wide |grep mysql
远程连接mysql8.0时可能会报一些错误,如navicat连接。这里对mysql8.0作一些设置。
(1)、登录到192.168.56.28 node 中。
(2)、执行docker ps查看mysql容器。如下所示:
(3)、进入mysql容器,执行以下命令进入容器,这里container_id为6f0827595caf
docker exec -it container_id /bin/bash
(4)、在容器内登录mysql。执行以下命令,-h为ip,容器内ip为127.0.0.1,-r为用户名,-p为密码,在mysql-rc中设置的密码。
mysql -h127.0.0.1 -uroot -pmysql
(5)、对mysql进行如下设置。
alter user 'root'@'%' identified with mysql_native_password by'root';
alter user 'root'@'%' identified by 'mysql';
(6)、退出mysql和容器,执行quit;退出mysql,按ctrl+p后,再按ctrl+q从容器中返回node主机。
设置好mysql后,可以远程连接node中的mysql,node的ip为127.0.0.1,映射的端口为30306,可以用navicat工具连接到这个myql。