本文收錄在容器技術學習系列文章總目錄html
管理存儲是管理計算的一個明顯問題。該PersistentVolume子系統爲用戶和管理員提供了一個API,用於抽象如何根據消費方式提供存儲的詳細信息。爲此,咱們引入了兩個新的API資源:PersistentVolume和PersistentVolumeClaimnode
PersistentVolume(PV)是集羣中由管理員配置的一段網絡存儲。 它是集羣中的資源,就像節點是集羣資源同樣。 PV是容量插件,如Volumes,但其生命週期獨立於使用PV的任何單個pod。 此API對象捕獲存儲實現的詳細信息,包括NFS,iSCSI或特定於雲提供程序的存儲系統。nginx
PersistentVolumeClaim(PVC)是由用戶進行存儲的請求。 它相似於pod。 Pod消耗節點資源,PVC消耗PV資源。Pod能夠請求特定級別的資源(CPU和內存)。聲明能夠請求特定的大小和訪問模式(例如,能夠一次讀/寫或屢次只讀)。vim
雖然PersistentVolumeClaims容許用戶使用抽象存儲資源,可是PersistentVolumes對於不一樣的問題,用戶一般須要具備不一樣屬性(例如性能)。羣集管理員須要可以提供各類PersistentVolumes不一樣的方式,而不只僅是大小和訪問模式,而不會讓用戶瞭解這些卷的實現方式。對於這些需求,有StorageClass 資源。api
StorageClass爲管理員提供了一種描述他們提供的存儲的「類」的方法。 不一樣的類可能映射到服務質量級別,或備份策略,或者由羣集管理員肯定的任意策略。 Kubernetes自己對於什麼類別表明是不言而喻的。 這個概念有時在其餘存儲系統中稱爲「配置文件」。bash
PVC和PV是一一對應的。服務器
PV是羣集中的資源。PVC是對這些資源的請求,而且還充當對資源的檢查。PV和PVC之間的相互做用遵循如下生命週期:網絡
Provisioning ——-> Binding ——–>Using——>Releasing——>Recyclingapp
注:目前只有NFS和HostPath類型卷支持回收策略,AWS EBS,GCE PD,Azure Disk和Cinder支持刪除(Delete)策略。curl
nfs服務器在上一篇已經部署,詳情請看上一篇博客。
(1)在nfs服務器上先創建存儲卷對應的目錄
[root@nfs ~]# cd /data/volumes/ [root@nfs volumes]# mkdir v{1,2,3,4,5} [root@nfs volumes]# ls index.html v1 v2 v3 v4 v5 [root@nfs volumes]# echo "<h1>NFS stor 01</h1>" > v1/index.html [root@nfs volumes]# echo "<h1>NFS stor 02</h1>" > v2/index.html [root@nfs volumes]# echo "<h1>NFS stor 03</h1>" > v3/index.html [root@nfs volumes]# echo "<h1>NFS stor 04</h1>" > v4/index.html [root@nfs volumes]# echo "<h1>NFS stor 05</h1>" > v5/index.html
(2)修改nfs的配置
[root@nfs volumes]# vim /etc/exports /data/volumes/v1 192.168.130.0/24(rw,no_root_squash) /data/volumes/v2 192.168.130.0/24(rw,no_root_squash) /data/volumes/v3 192.168.130.0/24(rw,no_root_squash) /data/volumes/v4 192.168.130.0/24(rw,no_root_squash) /data/volumes/v5 192.168.130.0/24(rw,no_root_squash)
(3)查看nfs的配置
[root@nfs volumes]# exportfs -arv exporting 192.168.130.0/24:/data/volumes/v5 exporting 192.168.130.0/24:/data/volumes/v4 exporting 192.168.130.0/24:/data/volumes/v3 exporting 192.168.130.0/24:/data/volumes/v2 exporting 192.168.130.0/24:/data/volumes/v1
(4)是配置生效
[root@nfs volumes]# showmount -e Export list for nfs: /data/volumes/v5 192.168.130.0/24 /data/volumes/v4 192.168.130.0/24 /data/volumes/v3 192.168.130.0/24 /data/volumes/v2 192.168.130.0/24 /data/volumes/v1 192.168.130.0/24
(1)編寫yaml文件,並建立pv
建立5個pv,存儲大小各不相同,是否可讀也不相同
[root@master volumes]# vim pv-damo.yaml apiVersion: v1 kind: PersistentVolume metadata: name: pv001 labels: name: pv001 spec: nfs: path: /data/volumes/v1 server: nfs accessModes: ["ReadWriteMany","ReadWriteOnce"] capacity: storage: 2Gi --- apiVersion: v1 kind: PersistentVolume metadata: name: pv002 labels: name: pv002 spec: nfs: path: /data/volumes/v2 server: nfs accessModes: ["ReadWriteOnce"] capacity: storage: 5Gi --- apiVersion: v1 kind: PersistentVolume metadata: name: pv003 labels: name: pv003 spec: nfs: path: /data/volumes/v3 server: nfs accessModes: ["ReadWriteMany","ReadWriteOnce"] capacity: storage: 20Gi --- apiVersion: v1 kind: PersistentVolume metadata: name: pv004 labels: name: pv004 spec: nfs: path: /data/volumes/v4 server: nfs accessModes: ["ReadWriteMany","ReadWriteOnce"] capacity: storage: 10Gi --- apiVersion: v1 kind: PersistentVolume metadata: name: pv005 labels: name: pv005 spec: nfs: path: /data/volumes/v5 server: nfs accessModes: ["ReadWriteMany","ReadWriteOnce"] capacity: storage: 15Gi [root@master volumes]# kubectl apply -f pv-damo.yaml persistentvolume/pv001 created persistentvolume/pv002 created persistentvolume/pv003 created persistentvolume/pv004 created persistentvolume/pv005 created
(2)查詢驗證
[root@master ~]# kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pv001 5Gi RWO,RWX Retain Available 9s pv002 5Gi RWO Retain Available 9s pv003 5Gi RWO,RWX Retain Available 9s pv004 10Gi RWO,RWX Retain Available 9s pv005 15Gi RWO,RWX Retain Available 9s
(1)編寫yaml文件,並建立pvc
建立一個pvc,須要6G存儲;因此不會匹配pv001、pv002、pv003
[root@master volumes]# vim vol-pvc-demo.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mypvc namespace: default spec: accessModes: ["ReadWriteMany"] resources: requests: storage: 6Gi --- apiVersion: v1 kind: Pod metadata: name: vol-pvc namespace: default spec: volumes: - name: html persistentVolumeClaim: claimName: mypvc containers: - name: myapp image: ikubernetes/myapp:v1 volumeMounts: - name: html mountPath: /usr/share/nginx/html/ [root@master volumes]# kubectl apply -f vol-pvc-demo.yaml persistentvolumeclaim/mypvc created pod/vol-pvc created
(2)查詢驗證:pvc已經綁定到pv004上
[root@master ~]# kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE mypvc Bound pv004 10Gi RWO,RWX 24s [root@master ~]# kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pv001 5Gi RWO,RWX Retain Available 1m pv002 5Gi RWO Retain Available 1m pv003 5Gi RWO,RWX Retain Available 1m pv004 10Gi RWO,RWX Retain Bound default/mypvc 1m pv005 15Gi RWO,RWX Retain Available 1m
(3)查詢業務驗證
[root@master ~]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE vol-pvc 1/1 Running 0 59s 10.244.2.117 node2 [root@master ~]# curl 10.244.2.117 <h1>NFS stor 04</h1>
本篇原本還想再寫2個特點的存儲卷 configmap和secret 的解析和使用,可是博主今天又些急事,改天在下一篇補上;本篇內容有些少,還望你們見諒~