书籍来源:cloudman《每天5分钟玩转Kubernetes》
一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持!
附上汇总贴:每天5分钟玩转Kubernetes | 汇总_COCOgsta的博客-CSDN博客
本节演示如何为MySQL数据库提供持久化存储,步骤为:
(1)创建PV和PVC。
(2)部署MySQL。
(3)向MySQL添加数据。
(4)模拟节点宕机故障,Kubernetes将MySQL自动迁移到其他节点。
(5)验证数据一致性。
首先创建PV和PVC,配置说明如下。
- mysql-pv.yml如下所示。
[root@k8s-master ~]# cat mysql-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 1Gi
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs
nfs:
path: /nfsdata/mysql-pv
server: 192.168.1.146
[root@k8s-master ~]#
- mysql-pvc.yml如图下所示。
[root@k8s-master ~]# cat mysql-pvc.yml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: mysql-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: nfs
[root@k8s-master ~]#
创建mysql-pv和mysql-pvc,如图所示。
接下来部署MySQL,配置文件如下所示。
[root@k8s-master ~]# cat mysql.yml
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
ports:
- port: 3306
selector:
app: mysql
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: mysql:5.6
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: password
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-svc
[root@k8s-master ~]#
PVC mysql-pvc Bound的PV mysql-pv将被mount到MySQL的数据目录var/lib/mysql,如图所示。
MySQL被部署到k8s-node2,下面通过客户端访问Service mysql,如图所示。
① 切换到数据库mysql。
② 创建数据库表my_id。
③ 插入一条数据。
④ 确认数据已经写入。
关闭k8s-node2,模拟节点宕机故障,如图所示。
一段时间后(约5分钟),Kubernetes将MySQL迁移到k8s-node1,如图所示。
验证数据的一致性,如图所示。
MySQL服务恢复,数据也完好无损。