k8s之Mysql實現數據持久化

注意yaml配置文件中的注言,與格式的縮進node

1、
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

2、用MySQL實驗模擬數據持久化的做用:sql

**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建立成功。docker

**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  vim

**建立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資源建立成功。api

**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   <none>           <none>  
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   <none>           <none>  
9.lbh-mysql-59778fd8d6-xhk7h   1/1     Terminating   0          33m   10.244.1.4   node01   <none>           <none>  
10.lbh-mysql-59778fd8d6-cf6g4   0/1     Pending       0          0s    <none>       <none>   <none>           <none>  
11.lbh-mysql-59778fd8d6-cf6g4   0/1     Pending       0          0s    <none>       node02   <none>           <none>  
12.lbh-mysql-59778fd8d6-cf6g4   0/1     ContainerCreating   0          1s    <none>       node02   <none>           <none>  
13.lbh-mysql-59778fd8d6-cf6g4   1/1     Running             0          2s    10.244.2.9   node02   <none>       
**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   <none>           <none>  
4.lbh-mysql-59778fd8d6-xhk7h   1/1     Terminating   0          44m   10.244.1.4    node01   <none>           <none>  
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的數據持久化完成。網絡

相關文章
相關標籤/搜索