注意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的數據持久化完成。網絡