搭建k8s集群实现MySQL数据持久化
admin
2023-03-28 22:41:18
0

本文主要给大家简单讲讲搭建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 -e
Export list for master:
/nfsdata *

2、创建PV

[root@master lv]# vim mysql-pv.yaml      #编写pv的yaml文件
kind: PersistentVolume
apiVersion: v1
metadata:
  name: mysql-pv
spec:
  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: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: mysql-pvc
spec:
  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   AGE
mysql-pv   1Gi        RWO            Retain           Bound    default/mysql-pvc   nfs                     5m8s
[root@master lv]# kubectl get pvc
NAME        STATUS   VOLUME     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
mysql-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/v1beta1
kind: Deployment
metadata:
  name: mysql
spec:
  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: v1
kind: Service
metadata:
  name: mysql
spec:
  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   AGE
mysql-6d898f8bcb-lhqxb   1/1     Running   0          51s

6、进入MySQL数据库,添加测试数据

[root@master lv]# kubectl exec -it mysql-6d898f8bcb-lhqxb -- mysql -uroot -p123.com
mysql> 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.com
mysql> 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 GATES
mysql-6d898f8bcb-cz8gr   1/1     Running   0          20m   10.244.1.3   node01              

mysql-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 31111
MySQL [(none)]> select * from test.my_id;    #查看数据
+------+
| id   |
+------+
| 1996 |
+------+
1 row in set (0.01 sec)

搭建k8s集群实现MySQL数据持久化就先给大家讲到这里,对于其它相关问题大家想要了解的可以持续关注我们的行业资讯。我们的板块内容每天都会捕捉一些行业新闻及专业知识分享给大家的。

相关内容

热门资讯

“一星差评”,余华出新书,为什... 作者 | 戈色 编辑 | 青霆余华迄今为止文学生涯的“最低作”诞生了。《卢克明的偷偷一笑》于年底出版...
【第一消息】“欢聚水鱼虎步龙行... 家人们!今天小编来为大家解答欢聚水鱼虎步龙行透视挂怎么安装这个问题咨询软件客服徽9784099的挂在...
今日重大消息“一起温州麻将有没... 家人们!今天小编来为大家解答一起温州麻将透视挂怎么安装这个问题咨询软件客服徽9752949的挂在哪里...
中国联通赋能全栈国产化智算中心... 来源:人民邮电报 本报讯 近日,国内规模领先的医疗领域全栈国产化智算中心在北京次渠正式点亮,首期38...
最新引进“蜀友汇到底有挂吗?”... 最新引进“蜀友汇到底有挂吗?”(确实真的有挂)您好,蜀友汇这个游戏其实有挂的,确实是有挂的,需要了解...
原创 帮... 浩瀚宇宙,危机四伏。人类习惯了抬头仰望那轮皎洁的明月,将其视为寄托相思与浪漫的图腾,却往往忽略了它最...
玩家分享攻略“飞鹰炸/金/花是... 网上科普关于“飞鹰炸/金/花有没有挂”话题很是火热,小编也是针对飞鹰炸/金/花作*弊开挂的方法以及开...
最新引进“相约福建麻将是不是有... 有 亲,根据资深记者爆料相约福建麻将是可以开挂的,确实有挂(咨询软件无需...
今日重磅消息“728开挂神器?... 有 亲,根据资深记者爆料728是可以开挂的,确实有挂(咨询软件无需打开直...
我来教教您“来几局怎么装挂?”... 您好:来几局这款游戏可以开挂,确实是有挂的,需要了解加客服微信【4282891】很多玩家在这款游戏中...