日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

kubernetes pv回收策略

發布時間:2023/12/16 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 kubernetes pv回收策略 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文最近更新于2021.9.11

kubernetes pv回收策略

當用戶不再使用其存儲卷時,他們可以從 API 中將 PVC 對象刪除,從而允許該資源被回收再利用。PersistentVolume 對象的回收策略告訴集群,當其被從申領中釋放時如何處理該數據卷。 目前,數據卷可以被 Retained(保留)、Recycled(回收)或 Deleted(刪除)。

1、保留(Retain)

回收策略Retain使得用戶可以手動回收資源。當 PersistentVolumeClaim 對象被刪除時,PersistentVolume 卷仍然存在,對應的數據卷被視為"已釋放(released)"。 由于卷上仍然存在著前一申領人的數據,該卷還不能用于其他申領。 管理員可以通過下面的步驟來手動回收該卷:

2、刪除(Delete)

對于支持Delete回收策略的卷插件,刪除動作會將 PersistentVolume 對象從 Kubernetes 中移除,同時也會從外部基礎設施(如 AWS EBS、GCE PD、Azure Disk 或 Cinder 卷)中移除所關聯的存儲資產。 動態供應的卷會繼承其 StorageClass 中設置的回收策略,該策略默認 為Delete。 管理員需要根據用戶的期望來配置 StorageClass;否則 PV 卷被創建之后必須要被 編輯或者修補。

3、回收(Recycle)

警告:回收策略Recycle已被廢棄。取而代之的建議方案是使用動態供應。

kubernetes 持久卷概念

PersistentVolume 子系統為用戶和管理員提供了一組 API,將存儲如何供應的細節從其如何被使用中抽象出來。為了實現這點,引入了一些新的資源和概念:

  • PV(PersistentVolume,持久卷),是集群中的一塊存儲,可以由管理員事先供應,或者使用存儲類(Storage
    Class)來動態供應。 持久卷是集群資源,就像節點也是集群資源一樣。
  • PVC(PersistentVolumeClaim,持久卷申領),表達的是用戶對存儲的請求。 PVC申領請求特定的大小和訪問模式的PV卷。
  • StorageClass(存儲類),集群管理員需要能夠提供不同性質的PersistentVolume,并且這些 PV卷之間的差別不僅限于卷大小和訪問模式,同時又不能將卷是如何實現的這些細節暴露給用戶。為了滿足這類需求,就有了存儲類(StorageClass)資源。
  • volume, 卷的核心是一個目錄,其中可能存有數據,Pod 中的容器可以訪問該目錄中的數據。
  • volumeclaim, 使用卷時,在 .spec.volumes 字段中設置為 Pod 提供的卷,并在 .spec.containers[*].volumeMounts 字段中聲明卷在容器中的掛載位置。

相關概念示意圖:

下面以NFS存儲為例演示pv回收策略及如何復用被保留的pv卷。

kubernetes pv創建流程

1、創建靜態pv,定義存儲容量、訪問模式及回收策略,注意這里的回收策略為Retain保留:

[root@master hostpath]# cat pv.yaml apiVersion: v1 kind: PersistentVolume metadata:name: task-pv-volumelabels:type: local spec:storageClassName: nfscapacity:storage: 10GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: Retainnfs:server: 10.0.0.5path: "/nginx"

查看創建的pv,該pv狀態為Available ,可用于pvc申請:

[root@master hostpath]# kubectl apply -f pv.yaml [root@master hostpath]# kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE task-pv-volume 10Gi RWO Retain Available nfs 2s

2、創建pvc綁定到pv

[root@master hostpath]# cat pvc.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata:name: task-pv-claim spec:storageClassName: nfsaccessModes:- ReadWriteOnceresources:requests:storage: 3Gi

查看創建的pvc,此時pvc已經隨機獲取到一個可用pv并與其綁定,查看pvc及pv都為Bound狀態

[root@master hostpath]# kubectl apply -f pvc.yaml [root@master hostpath]# kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE task-pv-claim Bound task-pv-volume 10Gi RWO nfs 3s[root@master hostpath]# kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE task-pv-volume 10Gi RWO Retain Bound default/task-pv-claim nfs 2m58s

3、創建pod申請pvc

[root@master hostpath]# cat pod.yaml kind: Service apiVersion: v1 metadata:name: task-pv-service spec:ports:- port: 80type: NodePortselector:app: nginx --- apiVersion: v1 kind: Pod metadata:name: task-pv-podlabels:app: nginx spec:containers:- name: task-pv-containerimage: nginxports:- containerPort: 80name: "http-server"volumeMounts:- mountPath: "/usr/share/nginx/html"name: task-pv-storagevolumes:- name: task-pv-storagepersistentVolumeClaim:claimName: task-pv-claim

查看創建的pod:

[root@master hostpath]# kubectl get pod NAME READY STATUS RESTARTS AGE task-pv-pod 1/1 Running 0 84s[root@master hostpath]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.233.0.1 <none> 443/TCP 36h task-pv-service NodePort 10.233.11.207 <none> 80:31181/TCP 6s

向pod內寫入測試數據,并連接到NFS Server查看持久化數據:

[root@master hostpath]# kubectl exec task-pv-pod -- sh -c "echo 'Hello from Kubernetes storage' > /usr/share/nginx/html/index.html"[root@nfs-server nfs-share]# cat nginx/index.html Hello from Kubernetes storage

瀏覽器訪問web應用:

kubernetes pv回收策略

1、刪除pod,該pvc及pv依然保留并處于綁定狀態,因此刪除pod對pvc及pv沒有影響:

[root@product-cluster nfs-share]# kubectl delete pods task-pv-pod

2、繼續刪除pvc,此時pv是否被刪除取決于其回收策略,回收策略為Delete則pv也會被自動刪除,回收策略為Retain則pv會被保留

[root@product-cluster nfs-share]# kubectl delete pvc task-pv-claim

可以看到pv依然保留,并且狀態由Bound變為Released,該狀態pv無法被新的pvc申領,只有PV處于Available狀態時才能被pvc申領。

[root@product-cluster nfs-share]# kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE task-pv-volume 10Gi RWO Retain Released default/task-pv-claim nfs 10m

被保留下來的PV在spec.claimRef字段記錄著原來PVC的綁定信息:

[root@product-cluster nfs-share]# kubectl get pv task-pv-volume -o yaml apiVersion: v1 kind: PersistentVolume ...... spec:accessModes:- ReadWriteOncecapacity:storage: 10GiclaimRef:apiVersion: v1kind: PersistentVolumeClaimname: task-pv-claimnamespace: defaultresourceVersion: "792426"uid: 325b013f-0467-4078-88e9-0fc208c6993cnfs:path: /nginxserver: 10.0.0.5persistentVolumeReclaimPolicy: RetainstorageClassName: nfsvolumeMode: Filesystem status:phase: Released

刪除綁定信息中的resourceVersion和uid鍵,即可重新釋放PV使其狀態由Released變為Available

[root@product-cluster nfs-share]# kubectl edit pv task-pv-volume ...... spec:accessModes:- ReadWriteOncecapacity:storage: 10GiclaimRef:apiVersion: v1kind: PersistentVolumeClaimname: task-pv-claimnamespace: default ......

再次查看pv狀態已經變為Available

[root@product-cluster nfs-share]# kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE task-pv-volume 10Gi RWO Retain Available default/task-pv-claim nfs 20m

由于該pv中spec.claimRef.name和spec.claimRef.namespace鍵不變,該pv依然指向原來的pvc名稱,具有相應spec的新PVC能夠準確綁定到該PV。重新恢復之前刪除的pvc及pod:

[root@master hostpath]# kubectl apply -f pvc.yaml[root@master hostpath]# kubectl apply -f pod.yaml

查看pvc及pod狀態

[root@master hostpath]# kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE task-pv-claim Bound task-pv-volume 10Gi RWO nfs 71s[root@master hostpath]# kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE task-pv-volume 10Gi RWO Retain Bound default/task-pv-claim nfs 33m[root@master hostpath]# kubectl get pods NAME READY STATUS RESTARTS AGE task-pv-pod 1/1 Running 0 62s

再次訪問web應用,之前寫入的數據依然存在,數據成功恢復:

配置pv回收策略

pv回收策略可以在多個地方定義。

1、在pv中定義回收策略

apiVersion: v1 kind: PersistentVolume metadata:name: pv0003 spec:capacity:storage: 5GivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RecyclestorageClassName: slowmountOptions:- hard- nfsvers=4.1nfs:path: /tmpserver: 172.17.0.2

2、在storageclass中定義pv回收策略

kind: StorageClass apiVersion: storage.k8s.io/v1 metadata:name: gp2-retainannotations: provisioner: kubernetes.io/aws-ebs parameters:type: gp2fsType: ext4 reclaimPolicy: Retain

修改pv回收策略

對于動態配置的PersistentVolumes來說,默認回收策略為 “Delete”。這表示當用戶刪除對應的PersistentVolumeClaim時,動態配置的 volume 將被自動刪除。如果 volume 包含重要數據時,這種自動行為可能是不合適的。這種情況下,更適合使用 “Retain” 策略。使用 “Retain” 時,如果用戶刪除PersistentVolumeClaim,對應的PersistentVolume不會被刪除。相反,它將變為Released狀態,表示所有的數據可以被手動恢復。

使用如下命令可以修改pv回收策略:

kubectl patch pv <your-pv-name> -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'

綁定pvc到特定pv

默認pvc會隨機申請滿足條件的任意pv,可以使用如下兩種方式將pvc綁定到特定pv上:

1、在pvc中直接指定pv名稱

apiVersion: v1 kind: PersistentVolumeClaim metadata:name: foo-pvcnamespace: foo spec:storageClassName: "" # Empty string must be explicitly set otherwise default StorageClass will be setvolumeName: foo-pv

首先需要保留該存儲卷,claimRef在 PV的字段中指定相關的 PersistentVolumeClaim,以便其他 PVC 無法綁定到它。

apiVersion: v1 kind: PersistentVolume metadata:name: foo-pv spec:storageClassName: ""claimRef:name: foo-pvcnamespace: foo

2、可以使用對 pv 打 label 的方式,具體如下:

創建 pv,指定 label

[root@server PV]# cat pv-test1.yaml kind: PersistentVolume apiVersion: v1 metadata:name: test1-pvnamespace: kubeflowlabels:pv: test1 spec:capacity:storage: 100MiaccessModes:- ReadWriteOncehostPath:path: "/data/test1"

然后創建 pvc,使用 matchLabel 來關聯剛創建的 pv

[root@server PV]# cat pvc1.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata:name: test2-pvc spec:accessModes:- ReadWriteOnceresources:requests:storage: 100Miselector:matchLabels:pv: test1

參考:
https://blog.51cto.com/ygqygq2/2308576
https://blog.csdn.net/zwqjoy/article/details/88051147

總結

以上是生活随笔為你收集整理的kubernetes pv回收策略的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。