k8s的pv和pvc簡述


pvc:資源需要指定:
1.accessMode:訪問模型;對象列表:
    ReadWriteOnce – the volume can be mounted as read-write by a single node:  RWO - ReadWriteOnce一人讀寫
    ReadOnlyMany – the volume can be mounted read-only by many nodes:          ROX - ReadOnlyMany 多人只讀
    ReadWriteMany – the volume can be mounted as read-write by many nodes:     RWX - ReadWriteMany多人讀寫
2.resource:資源限制(比如:定義5GB空間,我們期望對應的存儲空間至少5GB。)    
3.selector:標簽選擇器。不加標簽,就會在所有PV找最佳匹配。
4.storageClassName:存儲類名稱:
5.volumeMode:指后端存儲卷的模式。可以用於做類型限制,哪種類型的PV可以被當前claim所使用。
6.volumeName:卷名稱,指定后端PVC(相當於綁定)

PV和PVC是一一對應關系,當有PV被某個PVC所占用時,會顯示banding,其它PVC不能再使用綁定過的PV。
PVC一旦綁定PV,就相當於是一個存儲卷,此時PVC可以被多個Pod所使用。(PVC支不支持被多個Pod訪問,取決於訪問模型accessMode的定義)。
PVC若沒有找到合適的PV時,則會處於pending狀態。
PV是屬於集群級別的,不能定義在名稱空間中。
PVC時屬於名稱空間級別的。
PV的reclaim policy選項:
   默認是Retain保留,保留生成的數據。
   可以改為recycle回收,刪除生成的數據,回收pv
   delete,刪除,pvc解除綁定后,pv也就自動刪除。

例:在nfs服務器上,使用nfs創建多個數據卷,在k8s集群中定義PV/PVC,讓pod關聯PVC
1.在/data/volumes/創建多個目錄:v1,v2,v3,v4,v5,修改/etc/exports文件,使數據卷單獨輸出。

1 /data/volumes/v1  192.168.1.0/24(rw,no_root_squash)
2 /data/volumes/v2  192.168.1.0/24(rw,no_root_squash)
3 /data/volumes/v3  192.168.1.0/24(rw,no_root_squash)
4 /data/volumes/v4  192.168.1.0/24(rw,no_root_squash)
5 /data/volumes/v5  192.168.1.0/24(rw,no_root_squash)

exportfs -arv:顯示nfs當前輸出的可以掛載的數據卷。
showmount -e :顯示nfs導出的數據卷
2.在k8s集群中定義pv:

 1 vim pv-demo.yaml
 2 apiVersion: v1
 3 kind: PersistentVolume
 4 metadata:
 5   name: pv001
 6   labels:
 7     name: pv001
 8 spec:
 9   nfs:
10     path: /data/volumes/v1
11     server: k8s-node2
12   accessModes: ["ReadWriteMany","ReadWriteOnce","ReadOnlyMany"]
13   capacity:
14     storage: 2Gi  
15 ---
16 ...pv002
17 ---
18 ...pv003
19     ...創建5個以上內容,修改name和path等參數

應用:kubectl apply -f pv-demo.yaml
查看:kubectl get pv

1 NAME    CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM           STORAGECLASS   REASON   AGE
2 pv001   2Gi        RWO,ROX,RWX    Retain           Available                                           56m
3 pv002   5Gi        RWO,ROX        Retain           Available                                           56m
4 pv003   3Gi        ROX,RWX        Retain           Available                                           56m
5 pv004   10Gi       RWO            Retain           Available                                           56m
6 pv005   15Gi       ROX            Retain           Available                                           56m

3.創建PVC和pod

 1 vim pod-pvc.yaml
 2 apiVersion: v1
 3 kind: PersistentVolumeClaim
 4 metadata:
 5   name: mypvc
 6   namespace: default
 7 spec:
 8   accessModes: ["ReadWriteOnce"]  ##注:這個訪問模型必須是PV中存在的訪問模型的子集,否則會找不到合適的PV,會一直Pending。  9   resources:
10     requests:
11       storage: 6Gi
12 ---
13 apiVersion: v1
14 kind: Pod
15 metadata:
16   name: myapp-pv
17   namespace: default
18 spec:
19   containers:
20   - name: myapp
21     image: ikubernetes/myapp:v1
22     imagePullPolicy: IfNotPresent
23     ports:
24     - name: html
25       containerPort: 80
26     volumeMounts:
27     - name: nfs
28       mountPath: "/usr/share/nginx/html"    
29   volumes:
30   - name: nfs
31     persistentVolumeClaim:
32       claimName: mypvc

應用:kubectl apply -f pod-pvc.yaml

 1 查看pvc:kubectl get pvc
 2 NAME    STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
 3 mypvc   Bound    pv004    10Gi       RWO                           4s
 4 查看pv:kubectl get pv
 5 NAME    CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM           STORAGECLASS   REASON   AGE
 6 pv001   2Gi        RWO,ROX,RWX    Retain           Available                                           56m
 7 pv002   5Gi        RWO,ROX        Retain           Available                                           56m
 8 pv003   3Gi        ROX,RWX        Retain           Available                                           56m
 9 pv004   10Gi       RWO            Retain           Bound       default/mypvc                           56m
10 pv005   15Gi       ROX            Retain           Available                                           56m 、

如此pvc就綁定在合適的pv上了。綁定的pv是pv004,說明pod的/usr/share/nginx/html掛載在nfs服務器/data/volumes/v4目錄下。
4.查看pod:kubectl get pods -owide

1 NAME       READY   STATUS    RESTARTS   AGE   IP             NODE        NOMINATED NODE   READINESS GATES
2 myapp-pv   1/1     Running   0          24s   10.244.1.141   k8s-node2   <none>           <none>

5.在nfs服務器上,找到/data/volumes/v4目錄,寫個測試文件:

1 vi /data/volumes/v4/index.html
2 <h1>Smbands</h1>

測試:訪問podIP

1 curl 10.244.1.141
2 <h1>Smbands</h1>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM