注意yaml配置文件中的注言,与格式的缩进

一、

1.Persistent Volume,即PV,是集群中已由管理员配置的一段网络存储,相当于一个存储卷,一块存储盘。由管理员或者由StorageClass,存储类自动管理。

2.Persistent Volume Claim,即PVC,是用户存储的请求,相当于Pod,Pod消耗节点资源,而PVC消耗存储资源,通俗点说就是,pv是创建的总空间,pvc从总空间中申请空间使用。

3.PV的访问控制类型(accessModes):

(1)ReadWriteOnce:访问模式为只能以读写的方式挂载到单个节点

(2)ReadWriteMany:访问模式为只能以读写的方式挂载到多个节点

(3)ReadOnlyOnce:访问模式为只能以只读的方式挂载到单个节点

4.PV的空间回收策略(persistentVolumeReclaimPolicy):

(1)Recycle:自动清除数据。

(2)Retain:需要管理员手动回收。

(3)Delete:云存储专用。

5.PV与PVC相互的关联,通过的是accessModes(访问模式)和storageClassName(存储类的名字)来定义的。

二、用MySQL实验模拟数据持久化的作用:

**1.首先搭建NFS共享服务:**

1.[root@master ~]# yum install -y nfs-utils rpcbind  #这里注意三台都要安装NFS服务。

2.[root@master ~]# vim /etc/exports

3./nfsdata  *(rw,sync,no_root_squash)

4.[root@master ~]# mkdir /nfsdata

5.[root@master ~]# systemctl start rpcbind

6.[root@master ~]# systemctl start nfs-server.service

7.[root@master ~]# showmount -e

8.Export list for master:

9./nfsdata *

**2.创建PV资源对象:**

1.[root@master ~]# mkdir yaml

2.[root@master ~]# cd yaml/

3.[root@master yaml]# vim nfs-pv.yaml

4.

5.apiVersion: v1

6.kind: PersistentVolume

7.metadata:

8.  name: lbh-pv

9.spec:

10.  capacity:

11.    storage: 1Gi

12.  accessModes:

13.    - ReadWriteOnce   #访问模式为只能以读写的方式挂载单个节点。

14.  persistentVolumeReclaimPolicy: Retain  #PV空间回收策略为手动回收。

15.  storageClassName: nfs   #定义存储类的名字

16.  nfs:

17.    path: /nfsdata/lbh-pv

18.    server: 192.168.2.50

执行yaml文件,查看状态:

1.[root@master yaml]# kubectl apply -f nfs-pv.yaml

2.persistentvolume/lbh-pv created

3.[root@master yaml]# kubectl get pv

4.NAME     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE

5.lbh-pv   1Gi        RWO            Retain         **  Available **          nfs                     27s  **注意pv的状态Available:**

PV创建成功。

**3.创建PVC资源对象:**

1.[root@master yaml]# vim nfs-pvc.yaml

2.

3.apiVersion: v1

4.kind: PersistentVolumeClaim

5.metadata:

6.  name: lbh-pvc

7.spec:

8.  accessModes:

9.    - ReadWriteOnce   #这里的访问模式必须与PV资源一致

10.  resources:

11.    requests:

12.      storage: 1Gi

13.  storageClassName: nfs   #存储类的名字,必须与PV资源一致

**执行yaml文件,查看PVC及PV状态:**

1.[root@master yaml]# kubectl apply -f nfs-pvc.yaml

2.persistentvolumeclaim/lbh-pvc created

3.[root@master yaml]# kubectl get pv

4.NAME     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM             STORAGECLASS   REASON   AGE

5.lbh-pv   1Gi        RWO            Retain           **Bound **   default/lbh-pvc   nfs                     3m55s

6.[root@master yaml]# kubectl get pvc

7.NAME      STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE

8.lbh-pvc  ** Bound**    lbh-pv   1Gi        RWO            nfs            10s

```注意是否关联Bound:

4.创建Deployment资源对象,镜像为mysql:5.6

节点提前下载镜像:

1.[root@node01 ~]# docker pull mysql:5.6

2.[root@node02 ~]# docker pull mysql:5.6

**创建Deployment资源对象:**

1.[root@master yaml]# vim mysql.yaml

2.

3.apiVersion: extensions/v1beta1

4.kind: Deployment

5.metadata:

6.  name: lbh-mysql

7.spec:

8.  selector:

9.    matchLabels:

10.      app: mysql

11.  template:

12.    metadata:

13.      labels:

14.        app: mysql

15.    spec:

16.      containers:

17.      - image: mysql:5.6

18.        name: mysql

19.        env:   #定义变量,这里定义MySQL数据库的密码

20.        - name: MYSQL_ROOT_PASSWORD

21.          value: 123.com

22.        volumeMounts:

23.        - name: mysql-storage

24.          mountPath: /var/lib/mysql   #数据库的数据存放目录,对这个目录做持久化

25.      volumes:

26.      - name: mysql-storage

27.        persistentVolumeClaim:

28.          claimName: lbh-pvc   #指定PVC资源。

**执行yaml文件,查看状态:**

1.[root@master yaml]# kubectl apply -f mysql.yaml

2.deployment.extensions/lbh-mysql created

3.[root@master yaml]# kubectl get pod

4.NAME                         READY   STATUS              RESTARTS   AGE

5.lbh-mysql-59778fd8d6-xhk7h   0/1     ContainerCreating   0          3m7s

**这时候容器一直处于容器创建中,可以采用四种方式来排错:

(1)使用kubectl describe命令来查看Pod的详细信息。

(2)使用kubectl logs命令来查看Pod的日志,因为容器没有创建成功,所以不存在日志。

(3)查看本机的message日志

(4)查看kubelet的日志。**

使用kubectl describe命令查看Pod的详细信息:

[root@master yaml]# kubectl describe pod lbh-mysql-59778fd8d6-xhk7h

最后一条信息:

mount.nfs: mounting 192.168.2.50:/nfsdata/lbh-pv failed, reason given by server: No such file or directory

根据提示得出,在挂载NFS存储目录时,指定的目录不存在。

进行创建目录,再次查看Pod'状态:

1.[root@master yaml]# mkdir -p /nfsdata/lbh-pv

2.[root@master yaml]# kubectl get pod

3.NAME                         READY   STATUS    RESTARTS   AGE

4.lbh-mysql-59778fd8d6-xhk7h   1/1     Running   0          12m

Deployment资源创建成功。

**5.进入MySQL数据库,创建测试数据。**

1.[root@master yaml]# kubectl exec -it lbh-mysql-59778fd8d6-xhk7h -- mysql -uroot -p123.com

2.mysql> show databases;   #查看数据库。

3.+--------------------+

4.| Database           |

5.+--------------------+

6.| information_schema |

7.| mysql              |

8.| performance_schema |

9.+--------------------+

10.3 rows in set (0.01 sec)

11.

12.mysql> create database lbh;   #创建数据库。

13.

14.mysql> use lbh;   #选择使用的数据库。

15.Database changed

16.mysql> create table lbh_id( id int(4));   #创建表。

17.

18.mysql> insert lbh_id values(9224);   #在表中插入数据。

19.

20.mysql> select * from lbh_id;   #查看表中所以数据。

21.+------+

22.| id   |

23.+------+

24.| 9224 |

25.+------+

26.1 row in set (0.00 sec)

27.

28.mysql> exit

在本地查看数据:

1.[root@master yaml]# ls /nfsdata/lbh-pv/

2.auto.cnf  ibdata1  ib_logfile0  ib_logfile1  lbh  mysql  performance_schema

数据存在。

**6.查看Pod运行在哪个节点,关闭对应的节点上的kubelet,查看是否重新创建Pod,创建后的Pod数据是否还存在:**

1.[root@master yaml]# kubectl get pod -o wide

2.NAME                         READY   STATUS    RESTARTS   AGE   IP           NODE     NOMINATED NODE   READINESS GATES

3.lbh-mysql-59778fd8d6-xhk7h   1/1     Running   0          26m   10.244.1.4   node01              

4.

5.[root@node01 ~]# systemctl stop kubelet.service

6.

7.[root@master yaml]# kubectl get pod -o wide -w

8.lbh-mysql-59778fd8d6-xhk7h   1/1     Running   0          28m   10.244.1.4   node01              

9.lbh-mysql-59778fd8d6-xhk7h   1/1     Terminating   0          33m   10.244.1.4   node01              

10.lbh-mysql-59778fd8d6-cf6g4   0/1     Pending       0          0s                         

11.lbh-mysql-59778fd8d6-cf6g4   0/1     Pending       0          0s           node02              

12.lbh-mysql-59778fd8d6-cf6g4   0/1     ContainerCreating   0          1s           node02              

13.lbh-mysql-59778fd8d6-cf6g4   1/1     Running             0          2s    10.244.2.9   node02   

**Pod重新创建成功,进入Pod查看数据是否存在:**

1.[root@master yaml]# kubectl get pod -o wide

2.NAME                         READY   STATUS        RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES

3.lbh-mysql-59778fd8d6-cf6g4   1/1     Running       0          12s   10.244.2.10   node02              

4.lbh-mysql-59778fd8d6-xhk7h   1/1     Terminating   0          44m   10.244.1.4    node01              

5.

6.[root@master yaml]# kubectl exec -it lbh-mysql-59778fd8d6-cf6g4 -- mysql -uroot -p123.com

7.mysql> show databases;

8.+--------------------+

9.| Database           |

10.+--------------------+

11.| information_schema |

12.| lbh                |

13.| mysql              |

14.| performance_schema |

15.+--------------------+

16.4 rows in set (0.01 sec)

17.

18.mysql> use lbh

19.Database changed

20.mysql> select * from lbh_id;

21.+------+

22.| id   |

23.+------+

24.| 9224 |

25.+------+

26.1 row in set (0.00 sec)

数据还存在,再次查看本地的文件:

1.[root@master yaml]# ls /nfsdata/lbh-pv/

2.auto.cnf  ibdata1  ib_logfile0  ib_logfile1  lbh  mysql  performance_schema

MySQL的数据持久化完成。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐