挂载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
![]()
检查配置是否生效
exportfs
showmount -e 192.168.91.129

创建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
![]()
执行添加服务的命令(这行不执行应该也不影响结果):
kubectl apply -f mysql.yaml

编写一个提供对外访问的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
![]()
访问数据库并验证其运行正常
kubectl get pod

kubectl exec -it mysql-999dcb98f-srxff -- mysql -u root -p
(密码也是root)

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

kubectl get svc

mysql服务安装在default命名空间中,查看其所在节点:
kubectl get pod -n default -o wide

此次部署的mysql服务被我们指定运行在了 k8s-worker01 节点上。
在本地用SQLyog连接到k8s集群的mysql:


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

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


可以看到,数据已成功导入。
在k8s集群中查看mysql数据库:

可看到中文数据出现乱码问题。
查看数据库的字符编码类型:
show variables like '%char%';

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

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
















![解决:PermissionError: [Errno 13] Permission denied: ‘xxx’](https://img-blog.csdnimg.cn/2796e1259a1b4df695a5f9078fffebc1.gif#pic_center)

