挂载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; 已经可以正常显示中文了。总结
到这里,我们就成功地在k8s集群上部署了一个MysqL、公布该MysqL使其可以在外部进行访问、向MysqL数据库中导入数据并设置其查询结果集支持中文显示,整个搭建过程还是有点繁琐的,如果不熟悉k8s集群一些概念,可能会遇到挺多小问题。
这里分享我自己的搭建过程,希望其他人在学习过程中能从我的笔记中得到一些帮助!