搭建k8s集群实现MySQL数据持久化
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,本文主要给大家简单讲讲搭建k8s集群实现MySQL数据持久化,相关专业术语大家可以上网查查或者找一些相关书籍补充一下,这里就不涉猎了,我们就直奔主题吧,希望搭建k8s集群实现MySQL数据持久化这篇文
千家信息网最后更新 2025年12月03日搭建k8s集群实现MySQL数据持久化
本文主要给大家简单讲讲搭建k8s集群实现MySQL数据持久化,相关专业术语大家可以上网查查或者找一些相关书籍补充一下,这里就不涉猎了,我们就直奔主题吧,希望搭建k8s集群实现MySQL数据持久化这篇文章可以给大家带来一些实际帮助。
1、搭建nfs存储
为了方便操作,我直接在master上搭建nfs存储。
[root@master ~]# yum -y install nfs-utils[root@master ~]# systemctl enable rpcbind[root@master lv]# mkdir -p /nfsdata/mysql[root@master ~]# vim /etc/exports/nfsdata *(rw,sync,no_root_squash)[root@master ~]# systemctl start nfs-server[root@master ~]# systemctl enable nfs-server[root@master ~]# showmount -eExport list for master:/nfsdata *
2、创建PV
[root@master lv]# vim mysql-pv.yaml #编写pv的yaml文件kind: PersistentVolumeapiVersion: v1metadata: name: mysql-pvspec: accessModes: - ReadWriteOnce #访问模式定义为只能以读写的方式挂载到单个节点 capacity: storage: 1Gi persistentVolumeReclaimPolicy: Retain storageClassName: nfs nfs: path: /nfsdata/mysql server: 192.168.20.6[root@master lv]# kubectl apply -f mysql-pv.yaml #执行yaml文件
3、创建PVC
[root@master lv]# vim mysql-pvc.yaml #编写pvc的yaml文件kind: PersistentVolumeClaimapiVersion: v1metadata: name: mysql-pvcspec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi storageClassName: nfs #这里指定关联的PV名称[root@master lv]# kubectl apply -f mysql-pvc.yaml #执行yaml文件
4、确认pv及pvc的状态
至此,PV和PVC的状态类应该都是Bound。
[root@master lv]# kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGEmysql-pv 1Gi RWO Retain Bound default/mysql-pvc nfs 5m8s[root@master lv]# kubectl get pvcNAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGEmysql-pvc Bound mysql-pv 1Gi RWO nfs 60s
5、创建pod+svc(service)
这个pod是提供的MySQL服务,并将其映射到宿主机,可以做和client端通信。
这里我将pod和svc的yaml文件写在同一个文件中。
[root@master lv]# vim mysql-pod.yaml #编写pod的yaml文件apiVersion: extensions/v1beta1kind: Deploymentmetadata: name: mysqlspec: selector: matchLabels: app: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:5.7 env: #以下是设置MySQL数据库的密码 - name: MYSQL_ROOT_PASSWORD value: 123.com ports: - containerPort: 3306 volumeMounts: - name: mysql-persistent-storage mountPath: /var/lib/mysql #MySQL容器的数据都是存在这个目录的,要对这个目录做数据持久化 volumes: - name: mysql-persistent-storage persistentVolumeClaim: claimName: mysql-pvc #指定pvc的名称--- #以下是创建svc的yaml文件apiVersion: v1kind: Servicemetadata: name: mysqlspec: type: NodePort ports: - port: 3306 targetPort: 3306 nodePort: 31111 selector: app: mysql selector: app: mysql[root@master lv]# kubectl apply -f mysql-pod.yaml #执行yaml文件[root@master lv]# kubectl get pod #确定pod运行正常NAME READY STATUS RESTARTS AGEmysql-6d898f8bcb-lhqxb 1/1 Running 0 51s
6、进入MySQL数据库,添加测试数据
[root@master lv]# kubectl exec -it mysql-6d898f8bcb-lhqxb -- mysql -uroot -p123.commysql> create database test;mysql> use test;mysql> create table my_id(id int(4));mysql> insert my_id values(9527);mysql> select * from my_id; #确认有数据存在
7、手动删除节点上的容器,验证数据库内的数据是否还存在
[root@master lv]# kubectl get pod -o wide #查看pod运行在哪个节点NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE mysql-6d898f8bcb-cz8gr 1/1 Running 0 10m 10.244.1.3 node01 #我这是运行在node01节点,现在去node01节点手动将其容器删除[root@node01 ~]# docker ps #查看MySQL容器的ID[root@node01 ~]# docker rm -f 1a524e001732 #将MySQL的容器删除#由于Deployment的保护策略,当删除容器后,它会根据pod的yaml文件生成一个新的容器,但新容器的ID号就变了#回到master节点,登录到数据库,查看数据是否还存在[root@master lv]# kubectl exec -it mysql-6d898f8bcb-cz8gr -- mysql -uroot -p123.commysql> select * from test.my_id; #数据还在,OK+------+| id |+------+| 1996 |+------+1 row in set (0.01 sec)
至此,即可证明,当使用PV来做数据持久化的话,容器的新陈代谢并不会造成丢失数据的。
8、模拟MySQL容器所在的节点宕机,验证数据是否会丢失
[root@master lv]# kubectl get pod -o wide #查看容器所在节点,我这里还是在node01#然后我这里将node01关机,然后动态查看pod的状态[root@master lv]# kubectl get pod -o wide -w #动态查看pod的状态#大概node01关机五分钟左右,可以看到pod就被转移到node02上运行了。NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESmysql-6d898f8bcb-cz8gr 1/1 Running 0 20m 10.244.1.3 node01mysql-6d898f8bcb-cz8gr 1/1 Running 0 20m 10.244.1.3 node01 mysql-6d898f8bcb-cz8gr 1/1 Terminating 0 25m 10.244.1.3 node01 mysql-6d898f8bcb-gp4t5 0/1 Pending 0 0s mysql-6d898f8bcb-gp4t5 0/1 Pending 0 0s node02 mysql-6d898f8bcb-gp4t5 0/1 ContainerCreating 0 0s node02 mysql-6d898f8bcb-gp4t5 1/1 Running 0 1s 10.244.2.4 node02
9、client端访问MySQL数据库
因为我们在创建pod的yaml文件中,将其svc的端口映射类型是nodeport,所以,我们是可以通过访问群集内的任意主机的31111端口(yaml文件中自定义的端口)来登录到数据库的。如下:
[root@master lv]# mysql -uroot -p123.com -h 192.168.20.8 -P 31111MySQL [(none)]> select * from test.my_id; #查看数据+------+| id |+------+| 1996 |+------+1 row in set (0.01 sec)
搭建k8s集群实现MySQL数据持久化就先给大家讲到这里,对于其它相关问题大家想要了解的可以持续关注我们的行业资讯。我们的板块内容每天都会捕捉一些行业新闻及专业知识分享给大家的。
数据
文件
容器
节点
数据库
状态
运行
集群
端口
专业
动态
名称
所在
手动
目录
至此
行业
存储
登录
验证
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
苹果手机隐藏数据库
网络货运平台软件开发公司
服务器存储设备采购清单
通达oa数据库用的哪个
南京基础网络技术常见问题
较新的网络安全问题
upnp媒体服务器
数据库检索系统代码
深圳水木网络技术公司
支付宝远程连接服务器失败
全球互联网科技专利
上海市区软件开发电话
数据库sales模式
切换数据库用什么软件
群服务器
上海腾讯云服务器在哪
长沙国际网络安全产业园
工信部网络安全三同步
崇明区海航数据库服务活动简介
部署git服务器
yq服务器
盛源网络技术服务
华为网络技术方案
数据库培训班厦门
西部机场网络安全服务中标
表格中数据库怎么设置打印
网络安全法实名制
win服务器怎么看操作日志
上海工程软件开发哪家好
长城网络安全生态圈