K8S集群部署MySql

挂载MySQL数据卷

在k8s集群中挂载MySQL数据卷 需要安装一个NFS。

在主节点安装NFS

  yum install -y nfs-utils rpcbind

在主节点创建目录

  mkdir -p /nfs

  chmod 777 /nfs

更改归属组与用户

  chown -R nfsnobody:nfsnobody /nfs

配置共享目录

  echo "/nfs *(insecure,rw,sync,no_root_squash)" > /etc/exports

创建mysql共享目录

  mkdir -p /nfs/mysql

启动服务

  systemctl start rpcbind

  systemctl start nfs

设置开启启动

  systemctl enable rpcbind

  systemctl enable nfs

0

检查配置是否生效

  exportfs

  showmount -e 192.168.91.129

0

创建MySQL Deployment

编写一个 mysql.yaml 配置文件:

apiVersion: apps/v1                             # apiserver的版本
kind: Deployment                                # 副本控制器deployment,管理pod和RS
metadata:
  name: mysql                                   # deployment的名称,全局唯一
  namespace: default                            # deployment所在的命名空间
  labels:
    app: mysql
spec:
  replicas: 1                                   # Pod副本期待数量
  selector:
    matchLabels:                                # 定义RS的标签
      app: mysql                                # 符合目标的Pod拥有此标签
  strategy:                                     # 定义升级的策略
    type: RollingUpdate                         # 滚动升级,逐步替换的策略
  template:                                     # 根据此模板创建Pod的副本(实例)
    metadata:
      labels:
        app: mysql                              # Pod副本的标签,对应RS的Selector
    spec:
      nodeName: k8s-worker01                    # 指定pod运行在的node
      containers:                               # Pod里容器的定义部分
        - name: mysql                           # 容器的名称
          image: mysql:5.7                      # 容器对应的docker镜像
          volumeMounts:                         # 容器内挂载点的定义部分
            - name: time-zone                   # 容器内挂载点名称
              mountPath: /etc/localtime         # 容器内挂载点路径,可以是文件或目录
            - name: mysql-data
              mountPath: /var/lib/mysql         # 容器内mysql的数据目录
            - name: mysql-logs
              mountPath: /var/log/mysql         # 容器内mysql的日志目录
          ports:
            - containerPort: 3306               # 容器暴露的端口号
          env:                                  # 写入到容器内的环境容量
            - name: MYSQL_ROOT_PASSWORD         # 定义了一个mysql的root密码的变量
              value: "root"
      volumes:                                  # 本地需要挂载到容器里的数据卷定义部分
        - name: time-zone                       # 数据卷名称,需要与容器内挂载点名称一致
          hostPath:
            path: /etc/localtime                # 挂载到容器里的路径,将localtime文件挂载到容器里,可让容器使用本地的时区
        - name: mysql-data
          hostPath:
            path: /data/mysql/data              # 本地存放mysql数据的目录
        - name: mysql-logs
          hostPath:
            path: /data/mysql/logs              # 本地存入mysql日志的目录

将 mysql.yaml 配置文件上传至虚拟机的 /root 目录下,在 /root 目录下执行命令:

  kubectl create -f mysql.yaml

0

执行添加服务的命令(这行不执行应该也不影响结果):

  kubectl apply -f mysql.yaml

0

编写一个提供对外访问的service mysql-svc.yaml:

apiVersion: v1
kind: Service
metadata:
  name: mysql
  labels:
    name: mysql
spec:
  type: NodePort
  ports:
    - port: 3306
      targetPort: 3306
      nodePort: 30001
  selector:
    app: mysql

将 mysql-svc.yaml 配置文件上传至虚拟机的 /root 目录下,在 /root 目录下执行命令:

  kubectl create -f mysql-svc.yaml

0

访问数据库并验证其运行正常

  kubectl get pod

0

kubectl exec -it mysql-999dcb98f-srxff -- mysql -u root -p

(密码也是root)

K8S集群部署MySql_第1张图片

mysql开放远程连接:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;

flush privileges;        #刷新权限表,使配置生效

开启防火墙端口

systemctl start firewalld.service

firewall-cmd --zone=public --add-port=6443/tcp --permanent

firewall-cmd --zone=public --add-port=30001/tcp --permanent

firewall-cmd --reload

firewall-cmd --zone=public --list-ports

systemctl stop firewalld.service

systemctl disable firewalld.service

要开放6443端口(k8s集群连接地址)和30001端口(k8s集群mysql端口)

查看已安装的mysql

kubectl get pod

0

kubectl get svc

0

mysql服务安装在default命名空间中,查看其所在节点:

kubectl get pod -n default -o wide

0

此次部署的mysql服务被我们指定运行在了 k8s-worker01 节点上。

在本地用SQLyog连接到k8s集群的mysql:

K8S集群部署MySql_第2张图片

K8S集群部署MySql_第3张图片

创建一个名为 test 的数据库:

K8S集群部署MySql_第4张图片

将本地数据导入搭建好的mysql服务器-test数据库:

K8S集群部署MySql_第5张图片

K8S集群部署MySql_第6张图片

可以看到,数据已成功导入。

在k8s集群中查看mysql数据库:

K8S集群部署MySql_第7张图片

可看到中文数据出现乱码问题。

查看数据库的字符编码类型:

show variables like '%char%';

K8S集群部署MySql_第8张图片

将查询结果集设置为utf8后再查看数据:

set character_set_results=utf8;

K8S集群部署MySql_第9张图片

已经可以正常显示中文了。

你可能感兴趣的:(kubernetes,mysql,容器)