PV與PVC

PersistentVolume(PV) 數據持久卷
            對存儲資源的建立與使用進行抽象,讓存儲能夠作爲集羣的資源進行管理html

PersistentVolumeClaim(PVC) 數據持久卷請求
           讓用戶不須要關心具體的volume實現細節node

 

 

 

 

靜態PV的實現:nginx

 

 

首先配置PV:web

  1                                               #在/ifs/kubernetes/目錄下建立pv01,pv02,pv03
  2 [root@node2 ~]# cd /ifs/kubernetes/
  3 [root@node2 kubernetes]# mkdir pv01
  4 [root@node2 kubernetes]# mkdir pv02
  5 [root@node2 kubernetes]# mkdir pv03
  6 
  7                                               #經過pv.yaml文件建立三個PV 
  8                                               #訪問模式:
  9                                               #ReadWriteMany RWX  全部pod讀寫,應用場景:數據獨立,塊設備
 10                                               #ReadWriteOnce RWO  單個Pod讀寫    
 11                                               #ReadOnlyMany  ROX  全部pod只讀  應用場景:數據共享,文件系統                                                                               
 12 [root@master ~]# cat pv.yaml 
 13 apiVersion: v1
 14 kind: PersistentVolume
 15 metadata:
 16   name: pv01                                  #PV的名字
 17 spec:
 18   capacity:                                   #定義容量爲5G
 19     storage: 5Gi  
 20   accessModes:                                #訪問模式爲ReadWriteMany
 21     - ReadWriteMany
 22   nfs:                                        #卷的類型爲nfs
 23     path: /ifs/kubernetes/pv01                #路徑爲/ifs/kubernetes/pv01
 24     server: 192.168.1.63                      #nfs的服務器爲:192.168.1.63
 25 ---
 26 apiVersion: v1
 27 kind: PersistentVolume
 28 metadata:
 29   name: pv02       
 30 spec:
 31   capacity:
 32     storage: 10Gi  
 33   accessModes:
 34     - ReadWriteMany
 35   nfs:
 36     path: /ifs/kubernetes/pv02  
 37     server: 192.168.1.63
 38 ---
 39 apiVersion: v1
 40 kind: PersistentVolume
 41 metadata:
 42   name: pv03       
 43 spec:
 44   capacity:
 45     storage: 20Gi  
 46   accessModes:
 47     - ReadWriteMany
 48   nfs:
 49     path: /ifs/kubernetes/pv03  
 50     server: 192.168.1.63
 51 
 52 [root@master ~]# 
 53 [root@master ~]# kubectl apply -f pv.yaml 
 54 persistentvolume/pv01 created
 55 persistentvolume/pv02 created
 56 persistentvolume/pv03 created
 57 [root@master ~]# kubectl get pv
 58 NAME   CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
 59 pv01   5Gi        RWX            Retain           Available                                   11s
 60 pv02   10Gi       RWX            Retain           Available                                   11s
 61 pv03   20Gi       RWX            Retain           Available                                   11s
 62 [root@master ~]# 

 

 

以deployment的方式使用靜態PVCapi

 1 [root@master ~]#                               #經過deployment控制器啓動一個Pod,在這個Pod中數據
 2                                                #持久化經過PVC來實現
 3                                                #deployment和PVC經過name:my-pvc進行關聯
 4                                                #兩個yaml文件一般是寫在一塊兒的
 5 [root@master ~]# cat deployment2.yaml 
 6 apiVersion: apps/v1
 7 kind: Deployment
 8 metadata:
 9   labels:
10     app: web
11   name: web
12 spec:
13   replicas: 1
14   selector:
15     matchLabels:
16       app: web
17   strategy: {}
18   template:
19     metadata:
20       labels:
21         app: web
22     spec:
23       containers:
24       - image: nginx
25         name: nginx
26         resources: {}
27         volumeMounts:
28         - name: data
29           mountPath: /usr/share/nginx/html
30       
31       volumes:
32       - name: data
33         persistentVloumeClaim:
34           claimName: my-pvc
35 ---
36 apiVersion: v1
37 
38 kind: PersistentVolumeClaim
39 metadata:
40   name: my-pvc
41 spec:
42   accessModes:
43     - ReadWriteMany
44   resources:
45     requests:
46       storage: 8Gi
47 [root@master ~]#         
48 
49 [root@master ~]# kubectl apply -f deployment2.yaml
50 deployment.apps/web created
51 persistentvolumeclaim/my-pvc created
52 [root@master ~]# kubectl get pod
53 NAME                   READY   STATUS    RESTARTS   AGE
54 web-7d74df4646-fr88j   1/1     Running   0          15s
55 [root@master ~]# kubectl get pvc
56 NAME     STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
57 my-pvc   Bound    pv02     10Gi       RWX                           27s
58 [root@master ~]#           

 

PVC與PV的關係服務器

PV與PVC是一一對應的,名爲my-pvc的PVC最終匹配的是PV02,一個PVC只可能匹配一個pv
PVC與PV之間的對應是由匹配條件決定的,PVC與PV的匹配條件是:app

1 容量
2 訪問模式
3 標籤
spa

 1 [root@master ~]# kubectl get pv
 2 NAME   CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM            STORAGECLASS   REASON   AGE
 3 pv01   5Gi        RWX            Retain           Available                                            67s
 4 pv02   10Gi       RWX            Retain           Bound       default/my-pvc                           67s
 5 pv03   20Gi       RWX            Retain           Available                                            67s
 6 [root@master ~]#                               #PVX刪除了以後,對應的PV中的數據並不會刪除
 7                                                #以下圖中的pv02,my-pvc刪除後,pv02中的數據仍是存在的能夠對
 8                                                #pv02中的數據進行刪除或者備份
 9                                                #同時pv02已不能夠再次使用,即它的狀態沒法再回到available
10                                                #若是肯定再也不使用pv02中的數據,能夠手動刪除pv02
11                                                #pv刪除以後對就的存儲是否刪除是由RECLAIM POLICY決定的:
12                                                #RECLAIM POLICY的狀態有
13                                                #Delete: 直接刪除PV+數據   (不推薦)
14                                                #Recycle: 清除數據,但保留PV(被廢棄)
15                                                #Retain: 保留PV&數據       (推薦)
16                             
17 [root@master ~]# kubectl delete -f deployment2.yaml 
18 deployment.apps "web" deleted
19 persistentvolumeclaim "my-pvc" deleted
20 [root@master ~]# kubectl get pv,pvc
21 NAME                    CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM            STORAGECLASS   REASON   AGE
22 persistentvolume/pv01   5Gi        RWX            Retain           Available                                            86m
23 persistentvolume/pv02   10Gi       RWX            Retain           Released    default/my-pvc                           86m
24 persistentvolume/pv03   20Gi       RWX            Retain           Available                                            86m
25 [root@master ~]# 
26     

 Kubernetes支持持久卷的存儲插件: https://kubernetes.io/docs/concepts/storage/persistent-volumes/插件

 

                動態PVC的實現:code

 

 

 

Dynamic Provisioning機制工做的核心在於StorageClass的API對象。StorageClass聲明存儲插件,用於自動建立PV。
Kubernetes支持動態供給的存儲插件:
https://kubernetes.io/docs/concepts/storage/storage-classes/

相關文章
相關標籤/搜索