设为首页收藏本站language→→ 语言切换

鸿鹄论坛

 找回密码
 论坛注册

QQ登录

先注册再绑定QQ

查看: 4305|回复: 3
收起左侧

搭建k8s集群实现MySQL数据持久化

[复制链接]
发表于 2022-8-11 10:14:05 | 显示全部楼层 |阅读模式
本文主要给大家简单讲讲搭建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 ?????60s5、创建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 ????51s6、进入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 ?node01 ?<none> ?????<none>mysql-6d898f8bcb-cz8gr ?1/1 ??Running ?0 ????20m ?10.244.1.3 ?node01 ?<none> ?????<none>mysql-6d898f8bcb-cz8gr ?1/1 ??Terminating ?0 ????25m ?10.244.1.3 ?node01 ?<none> ?????<none>mysql-6d898f8bcb-gp4t5 ?0/1 ??Pending ???0 ????0s ?<none> ???<none> ?<none> ?????<none>mysql-6d898f8bcb-gp4t5 ?0/1 ??Pending ???0 ????0s ?<none> ???node02 ?<none> ?????<none>mysql-6d898f8bcb-gp4t5 ?0/1 ??ContainerCreating ?0 ????0s ?<none> ???node02 ?<none> ?????<none>mysql-6d898f8bcb-gp4t5 ?1/1 ??Running ??????0 ????1s ?10.244.2.4 ?node02 ?<none> ?????<none>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数据持久化就先给大家讲到这里,对于其它相关问题大家想要了解的可以持续关注我们的行业资讯。我们的板块内容每天都会捕捉一些行业新闻及专业知识分享给大家的。

了解更多相关内容欢迎关注http://www.vecloud.com
发表于 2023-1-24 20:47:08 | 显示全部楼层
有点乱,能不能放个文件。
板凳 2023-1-24 20:47:08 回复 收起回复
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2024-11-21 17:16 , Processed in 0.058010 second(s), 9 queries , Redis On.  

  Powered by Discuz!

  © 2001-2024 HH010.COM

快速回复 返回顶部 返回列表