k8s mysql备份,k8s持续化存储mysql数据

实验环境

master:192.168.100.10

node :192.168.100.20

然后安装好k8s以及docker

本人已经做好了Harbor私有仓库,所以以下镜像前均带IP地址。

1、因为是用NFS来作为持续数据化,所以首先搭建NFS。

master:

yum install -y nfs*

mkdir -p /nfsdata/mysql #这个目录用来当我们NFS的共享目录来使用

vim /etc/exports

/nfsdata *(rw,sync,no_root_squash)

exportfs -r

systemctl restart nfs && systemctl enable nfs

show

node:

[root@node ~]# showmount -e 192.168.100.10

Export list for 192.168.100.10:

/nfsdata *

#至此,前提的NFS服务搭建完成

2、编写PV资源文件

vim mysql-pv.yaml

apiVersion: v1

kind: PersistentVolume

metadata:

name: mysql-pv

spec:

accessModes: #给PV设置模式

- ReadWriteOnce #RWO模式是只能以读写的方式挂载到单个节点

capacity: #容量,相当于存储

storage: 1Gi #给1G

persistentVolumeReclaimPolicy: Retain #持久卷声明策略,Retain策略不清理保留数据。即删除pvc或者pv后,在插件上的数据(nfs服务端)不会被删除。这种方式是最常用的,可以避免误删pvc或者pv而造成数据的丢失

storageClassName: nfs #存储类,选择nfs

nfs:

path: /nfsdata/mysql

server: 192.168.100.10 #挂到/nfsdata/mysql这个目录上

#配置详解:

Retain: 这个策略说白了就是不清理, 保留 Volume(需要手动清理)

ReadWriteOnce(RWO): 是最基本的方式,可读可写,但只支持被单个 Pod 挂载。

ReadOnlyMany(ROX): 可以以只读的方式被多个 Pod 挂载。

ReadWriteMany(RWX): 这种存储可以以读写的方式被多个 Pod 共享

3、编写PVC资源文件

vim mysql-pvc.yaml

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

name: mysql-pvc

spec:

accessModes:

- ReadWriteOnce

resources:

requests:

storage: 1Gi #此处选择的存储必须和PV里面选择的存储一样,不然可能会导致不能bound,欢迎讨论这个配置。

storageClassName: nfs #此处是指向pv,并进行关联。

4、编写Deployment以及SVC资源文件,集成到一块。

vim mysql-deployment_svc.yaml

apiVersion: apps/v1

kind: Deployment

metadata:

name: mysql-dep

spec:

selector:

matchLabels:

app: mysql #做一个选择标签,

template:

metadata:

labels:

app: mysql #此处标签与上面一样,目的是要让spec.selector.matchLabels值和spec.template.metadata.lables值完全匹配

template:

spec:

containers:

- name: mysql

image: 192.168.100.10/library/mysql:5.6

ports:

- containerPort: 3306

env:

- name: MYSQL_ROOT_PASSWORD

value: 000000#设置数据库密码为000000

volumeMounts: #数据要存放的卷目录

- name: mysql-data-storage

mountPath: /var/lib/mysql #让容器挂载到这个目录,实现数据文件都存放在此目录当中,让这个目录数据持久化。

volumes: #在pod上选择共享存储卷

- name: mysql-data-storage

persistentVolumeClaim:

claimName: mysql-pvc #指定pvc的名称

#############################################################################

################## 以下开始创建 svc ##########################################

apiVersion: v1

kind: Service

metadata:

name: mysql

spec:

type: NodePort #暴露端口

ports:

- port: 3306#我自己开房的端口

targetPort: 3306#开放的后端端口

nodePort: 32543#暴露出去的端口,相当于一个端口映射,访问这个端口的时候,转到3306

selector:

app: mysql

5、测试是否数据持久化

kubectl apply -f mysql-pv.yaml

kubectl apply -f mysql-pvc.yaml

kubectl apply -f mysql-deployment_svc.yaml #首先启动起来

kubectl exec -it mysql- -- mysql -uroot -p000000

mysql> create database hello;

mysql> use hello;

mysql> create table test(id int(4));

mysql>insert test values(1314);

mysql>select * from test;

+------+

| id |

+------+

| 1314 |

+------+

1 row in set (0.00 sec)

然后去查看下mysql 在哪个节点上:

kubectl get pods -o wide

NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES

mysql-58dfd956ff-d472f 1/1 Running 0 9m38s 10.244.1.15 node

发现在node上,这个时候去node

[root@node ~]# docker ps -l

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

d706dbae5d50 44241dbd4d38 "docker-entrypoint.s…" 9 minutes ago Up 9 minutes k8s_mysql_mysql-58dfd956ff-d472f_default_50ac5310-6cc5-49c1-8dc0-7f4d9e23d60c_0

[root@node ~]# docker rm -f d706

d706

然后这个时候再去看看数据还在不在。

kubectl exec -it mysql- -- mysql -uroot -p000000

mysql> select * from gch.myid

-> ;

+------+

| id |

+------+

| 1314 |

+------+

1 row in set (0.00 sec)

还在,试验成功!

-----来自河南经贸19级计算机工程学院的一名普通学生,通过博客来分享自己日常收获到的新知识,会持续坚持,感谢大家的阅读,希望可以帮到你!

PS:理解不到位之处多谢包涵!

转载的希望可以放上本文章的链接,谢谢!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值