1. k8s PV 是什么?
PersistentVolume ( PV )是群集中的一塊存儲,由管理員配置或使用存儲類動態(tài)配置。 它是集群中的資源,就像 pod 是 k8s 集群資源一樣。 PV是容量插件,如 Volumes ,其生命周期獨立于使用 PV 的任何單個 pod 。
2. k8s PVC 是什么?
PersistentVolumeClaim ( PVC )是一個持久化存儲卷,我們在創(chuàng)建 pod 時可以定義這個類型的存儲卷。 它類似于一個pod 。 Pod 消耗節(jié)點資源,PVC 消耗 PV 資源。 Pod 可以請求特定級別的資源(CPU 和
內(nèi)存)。 pvc 在申請 pv 的時候也可以請求特定的大小和訪問模式(例如,可以一次讀寫或多次只讀)。
3. k8s PVC 和 和 PV 工作原理
PV 是群集中的資源。 PVC 是對這些資源的請求。
PV 和 PVC 之間的相互作用遵循以下生命周期:
3.1 pv 的供應(yīng)方式
可以通過兩種方式配置 PV :靜態(tài)或動態(tài)。
靜態(tài)的
集群管理員創(chuàng)建了許多 PV 。它們包含可供群集用戶使用的實際存儲的詳細(xì)信息。它們存在于Kubernetes API 中,可供使用。**
動態(tài)的
當(dāng)管理員創(chuàng)建的靜態(tài) PV 都不匹配用戶的 PersistentVolumeClaim 時,群集可能會嘗試為 PVC 專門動態(tài)配置卷。此配置基于 StorageClasses , PVC 必須請求存儲類,管理員必須創(chuàng)建并配置該類,以便進(jìn)行動態(tài)配置。**
3.2 綁定
用戶創(chuàng)建 c pvc 并指定需要的資源和訪問模式。在找到可用 pv 之前,pvc 會保持未綁定狀態(tài).
3.3 使用
3.3.1 需要找一個存儲服務(wù)器,把它劃分成多個存儲空間;
3.3.2 k8s 管理員可以把這些存儲空間定義成多個 pv ;
3.3.3 在 pod 中使用 pvc 類型的存儲卷之前需要先創(chuàng)建 pvc ,通過定義需要使用的 pv 的大小和對應(yīng)的訪問模式,找到合適的 pv ;
3.3.4 pvc 被創(chuàng)建之后,就可以當(dāng)成存儲卷來使用了,我們在定義 pod 時就可以使用這個 c pvc 的存儲卷;
3.3.5 pvc 和 和 pv 它們是一 一對應(yīng)的關(guān)系, pv 如果被 pvc 綁定了,就不能被其他 pvc 使用了;
3.3.6 我們在創(chuàng)建 pvc 的時候,應(yīng)該確保和底下的 pv 能綁定,如果沒有合適的 pv ,那么 pvc 就會處于 pending 狀態(tài)。
3.4 回收策略
當(dāng)我們創(chuàng)建 pod 時如果使用 pvc 做為存儲卷,那么它會和 pv 綁定,當(dāng)刪除 pod ,pvc 和 pv 綁定就會解除,解除之后和 pvc 綁定的 pv 卷里的數(shù)據(jù)需要怎么處理,目前,卷可以保留(Retain),回收(Recycle,被廢棄了)或刪除(Delete)。
3.4.1 Retain
當(dāng)刪除 pvc 的時候, pv 仍然存在,處于 released 狀態(tài),但是它不能被其他 pvc 綁定使用,里面的數(shù)據(jù)還是存在的,當(dāng)我們下次再使用的時候,數(shù)據(jù)還是存在的,這個是默認(rèn)的回收策略.
3.4.2 Delete
刪除 pvc 時即會從 Kubernetes 中移除 PV ,也會從相關(guān)的外部設(shè)施中刪除存儲資產(chǎn).文章來源:http://www.zghlxwxcb.cn/news/detail-409434.html
第一:創(chuàng)建 nfs 共享目錄
[root@k8s-master ~]# mkdir -p /data/pv/v{1,2,3,4,5,6,7,8,9,10}
[root@k8s-master ~]# cat >> /etc/exports <<EOF
/data/pv/v1 *(rw,no_root_squash)
/data/pv/v2 *(rw,no_root_squash)
/data/pv/v3 *(rw,no_root_squash)
/data/pv/v4 *(rw,no_root_squash)
/data/pv/v5 *(rw,no_root_squash)
/data/pv/v6 *(rw,no_root_squash)
/data/pv/v7 *(rw,no_root_squash)
/data/pv/v8 *(rw,no_root_squash)
/data/pv/v9 *(rw,no_root_squash)
/data/pv/v10 *(rw,no_root_squash)
EOF
[root@k8s-master ~]# exportfs -arv #使配置生效
第二:創(chuàng)建 pv 的資源清單文件
cat > pv.yaml <<EOF
apiVersion: v1
kind: PersistentVolume
metadata:
name: v1
spec:
capacity:
storage: 1Gi #pv的存儲空間容量
accessModes: ["ReadWriteOnce"]
nfs:
path: /data/volume_test/v1 #把nfs的存儲空間創(chuàng)建成pv
server: 192.168.243.180 #nfs服務(wù)器的地址
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: v2
spec:
persistentVolumeReclaimPolicy: Delete
capacity:
storage: 2Gi
accessModes: ["ReadWriteMany"]
nfs:
path: /data/volume_test/v2
server: 192.168.243.180
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: v3
spec:
capacity:
storage: 3Gi
accessModes: ["ReadOnlyMany"]
nfs:
path: /data/volume_test/v3
server: 192.168.243.180
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: v4
spec:
capacity:
storage: 4Gi
accessModes: ["ReadWriteOnce","ReadWriteMany"]
nfs:
path: /data/volume_test/v4
server: 192.168.243.180
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: v5
spec:
capacity:
storage: 5Gi
accessModes: ["ReadWriteOnce","ReadWriteMany"]
nfs:
path: /data/volume_test/v5
server: 192.168.243.180
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: v6
spec:
capacity:
storage: 6Gi
accessModes: ["ReadWriteOnce","ReadWriteMany"]
nfs:
path: /data/volume_test/v6
server: 192.168.243.180
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: v7
spec:
capacity:
storage: 7Gi
accessModes: ["ReadWriteOnce","ReadWriteMany"]
nfs:
path: /data/volume_test/v7
server: 192.168.243.180
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: v8
spec:
capacity:
storage: 8Gi
accessModes: ["ReadWriteOnce","ReadWriteMany"]
nfs:
path: /data/volume_test/v8
server: 192.168.243.180
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: v9
spec:
capacity:
storage: 9Gi
accessModes: ["ReadWriteOnce","ReadWriteMany"]
nfs:
path: /data/volume_test/v9
server: 192.168.243.180
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: v10
spec:
capacity:
storage: 10Gi
accessModes: ["ReadWriteOnce","ReadWriteMany"]
nfs:
path: /data/volume_test/v10
server: 192.168.243.180
EOF
kubectl apply -f pv.yaml #創(chuàng)建pv資源
[root@k8s-master mqq]# kubectl get pv #查看pv資源,#STATUS 是Available ,表示pv 是可用的
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
v1 1Gi RWO Retain Available 5s
v10 10Gi RWO,RWX Retain Available 5s
v2 2Gi RWX Delete Available 5s
v3 3Gi ROX Retain Available 5s
v4 4Gi RWO,RWX Retain Available 5s
v5 5Gi RWO,RWX Retain Available 5s
v6 6Gi RWO,RWX Retain Available 5s
v7 7Gi RWO,RWX Retain Available 5s
v8 8Gi RWO,RWX Retain Available 5s
v9 9Gi RWO,RWX Retain Available 5s
第三:創(chuàng)建 pvc,和符合條件的 pv 綁定
cat > pvc.yaml <<EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes: ["ReadWriteMany"]
resources:
requests:
storage: 2Gi
EOF
kubectl apply -f pvc.yaml
[root@k8s-master mqq]# kubectl get pvc ##和v2綁定了
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
my-pvc Bound v2 2Gi RWX 19s
[root@k8s-master mqq]#
[root@k8s-master mqq]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
v1 1Gi RWO Retain Available 5m25s
v10 10Gi RWO,RWX Retain Available 5m25s
v2 2Gi RWX Delete Bound default/my-pvc 5m25s
v3 3Gi ROX Retain Available 5m25s
v4 4Gi RWO,RWX Retain Available 5m25s
v5 5Gi RWO,RWX Retain Available 5m25s
v6 6Gi RWO,RWX Retain Available 5m25s
v7 7Gi RWO,RWX Retain Available 5m25s
v8 8Gi RWO,RWX Retain Available 5m25s
v9 9Gi RWO,RWX Retain Available 5m25s
[root@k8s-master mqq]# kubectl get pvc #pvc 的名字- 綁定到 pv 綁定的是v2這個pv-pvc 可使用的容量是 2G
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
my-pvc Bound v2 2Gi RWX 59s
[root@k8s-master mqq]#
第四:創(chuàng)建 pod ,掛載 pvc
cat > pod_pvc.yaml <<EOF
apiVersion: v1
kind: Pod
metadata:
name: pod-pvc
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
volumeMounts:
- name: nginx-html
mountPath: /usr/share/nginx/html
volumes:
- name: nginx-html
persistentVolumeClaim:
claimName: my-pvc
EOF
kubectl apply -f pod_pvc.yaml
[root@k8s-master mqq]# kubectl get pods
NAME READY STATUS RESTARTS AGE
pod-pvc 1/1 Running 0 34s
[root@k8s-master mqq]#
第五: 驗證結(jié)果
[root@k8s-master mqq]# kubectl get pods
NAME READY STATUS RESTARTS AGE
pod-pvc 1/1 Running 0 4m48s
[root@k8s-master mqq]# kubectl exec -it pod-pvc -- /bin/bash #進(jìn)入pod
root@pod-pvc:/# cd /usr/share/nginx/html/
root@pod-pvc:/usr/share/nginx/html# ls
root@pod-pvc:/usr/share/nginx/html# echo "hello weixin mqq759035366" > index.html #寫入一個網(wǎng)頁信息
root@pod-pvc:/usr/share/nginx/html# ls
index.html
root@pod-pvc:/usr/share/nginx/html# cat index.html
hello weixin mqq759035366
root@pod-pvc:/usr/share/nginx/html#
[root@k8s-master pv]# cd /data/pv/v2 #因為pvc綁定的是pv是v2目錄
[root@k8s-master v2]# ls
index.html
[root@k8s-master v2]# pwd
/data/pv/v2
[root@k8s-master v2]# cat index.html
hello weixin mqq759035366
[root@k8s-master v2]#
#刪除pod,pvc和pv后,查看數(shù)據(jù)文件是否存在
[root@k8s-master mqq]# ll
total 12
-rw-r--r-- 1 root root 301 Apr 9 22:18 pod_pvc.yaml
-rw-r--r-- 1 root root 153 Apr 9 22:17 pvc.yaml
-rw-r--r-- 1 root root 2152 Apr 9 22:17 pv.yaml
[root@k8s-master mqq]# kubectl delete -f pod_pvc.yaml
pod "pod-pvc" deleted
[root@k8s-master mqq]# kubectl delete -f pvc.yaml
persistentvolumeclaim "my-pvc" deleted
[root@k8s-master mqq]# kubectl delete -f pv.yaml
persistentvolume "v1" deleted
persistentvolume "v2" deleted
persistentvolume "v3" deleted
persistentvolume "v4" deleted
persistentvolume "v5" deleted
persistentvolume "v6" deleted
persistentvolume "v7" deleted
persistentvolume "v8" deleted
persistentvolume "v9" deleted
persistentvolume "v10" deleted
[root@k8s-master mqq]#
[root@k8s-master v2]# pwd
/data/pv/v2
[root@k8s-master v2]# ls
index.html
[root@k8s-master v2]# cat index.html #數(shù)據(jù)依然存在
hello weixin mqq759035366
[root@k8s-master v2]#
第六:使用 pvc 和 pv 的注意事項
6.1 、 我們每次創(chuàng)建 pvc 的時候,需要事先有劃分好的 pv , 這樣可能不方便,那么可以在創(chuàng)建 pvc 的時候直接動態(tài)創(chuàng)建一個 pv 這個存儲類, pv 事先是不存在的;
6.2 pvc 和 pv 綁定,如果使用默認(rèn)的回收策略 retain ,那么刪除 pvc 之后,pv 會處于 released 狀態(tài),我們想要繼續(xù)使用這個 pv ,需要手動刪除 pv ,刪除 pv ,不會刪除 pv里的數(shù)據(jù),當(dāng)我們重新創(chuàng)建 pvc 時還會和這個最匹配的 pv 綁定,數(shù)據(jù)還是原來數(shù)據(jù),不會丟失 。文章來源地址http://www.zghlxwxcb.cn/news/detail-409434.html
到了這里,關(guān)于K8S持久化存儲--- PVC和PV的存儲的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!