首页 / K8S / K8s之MySQL实现数据持久化
K8s之MySQL实现数据持久化
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了K8s之MySQL实现数据持久化,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5714字,纯文字阅读大概需要9分钟。
内容图文
~]# 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服务,并将其映射到宿主机,可以做和clinet端通信。
[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 <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.33.244 -P 31111 MySQL [(none)]> select * from test.my_id; #查看数据 +------+ | id | +------+ | 1996 | +------+ 1 row in set (0.01 sec
K8s之MySQL实现数据持久化
标签:match persist default 实现 port 登陆 mina mode term
本文系统来源:https://www.cnblogs.com/fengyuanfei/p/14665411.html
内容总结
以上是互联网集市为您收集整理的K8s之MySQL实现数据持久化全部内容,希望文章能够帮你解决K8s之MySQL实现数据持久化所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。