配置和使用持久卷
文章目錄
- 配置和使用持久卷
- @[toc]
- 一、PV與PVC的持久化存儲機制
- 二、PV和PVC的生命周期
- 三、創建基于NFS的PV
- 1.準備NFS共享目錄
- 2.創建PV
- 四、基于PVC使用PV
- 1.創建PVC
- 2.使用PVC
- 五、基于StorageClass實現動態卷制備
- 1.獲取NFS服務器的連接信息
- 2.獲取nfs-subdir-external-provisioner源碼包
- 3.創建ServiceAccount
- 4.部署nfs-subdir-external-provisioner組件
- 5.創建基于NFS共享存儲的StorageClass
- 6.創建用于測試的PVC
- 7.創建Pod測試PV的使用
文章目錄
- 配置和使用持久卷
- @[toc]
- 一、PV與PVC的持久化存儲機制
- 二、PV和PVC的生命周期
- 三、創建基于NFS的PV
- 1.準備NFS共享目錄
- 2.創建PV
- 四、基于PVC使用PV
- 1.創建PVC
- 2.使用PVC
- 五、基于StorageClass實現動態卷制備
- 1.獲取NFS服務器的連接信息
- 2.獲取nfs-subdir-external-provisioner源碼包
- 3.創建ServiceAccount
- 4.部署nfs-subdir-external-provisioner組件
- 5.創建基于NFS共享存儲的StorageClass
- 6.創建用于測試的PVC
- 7.創建Pod測試PV的使用
一、PV與PVC的持久化存儲機制
Kubernetes 中的 PV(PersistentVolume) 和 PVC(PersistentVolumeClaim) 是持久化存儲的核心機制,旨在解耦存儲資源的管理與使用,
- 核心概念與職責分離
- PV(持久卷)
由管理員創建和維護,代表集群中的實際存儲資源(如 NFS、云存儲等),定義存儲容量、訪問模式、回收策略等屬性。PV 的生命周期獨立于 Pod,即使 Pod 被刪除,數據仍可保留。 - PVC(持久卷聲明)
由用戶創建,聲明存儲需求(如容量、訪問模式),Kubernetes 會根據 PVC 的請求自動綁定符合條件的 PV。PVC 屏蔽了底層存儲細節,用戶無需關心具體存儲類型。
- 生命周期與綁定機制
- 資源供應
- 靜態供應:管理員預先創建 PV,用戶通過 PVC 申請。
- 動態供應:通過 StorageClass 動態創建 PV。用戶只需指定 StorageClass 模板,系統按需生成 PV 并與 PVC 綁定。
- 綁定規則
- PVC 需與 PV 的 訪問模式(如 ReadWriteOnce、ReadOnlyMany)、存儲容量 和 StorageClass 匹配。
- 綁定后,PV 被獨占使用,無法與其他 PVC 綁定。
- 關鍵配置參數
- PV 配置
- 訪問模式:定義存儲的掛載權限(如單節點讀寫、多節點只讀)。
- 回收策略
- Retain:保留數據,需手動清理;
- Delete:自動刪除存儲資源;
- Recycle(已廢棄):數據擦除后重新可用。
- StorageClass:用于動態供應時分類存儲特性(如性能等級)。
- PVC 配置
- 需聲明 存儲容量、訪問模式,并可通過標簽篩選特定 PV。
- 使用場景與優勢
- 數據持久化:適用于數據庫、日志存儲等需保留數據的場景。
- 共享存儲:多個 Pod 通過 PVC 共享同一 PV(需支持多節點訪問模式,如 NFS)。
- 解耦管理:存儲管理員負責 PV 運維,開發者通過 PVC 按需申請資源。
- 回收與維護
- PVC 刪除后
- 若 PV 回收策略為 Retain,需手動清理數據并刪除 PV;
- 若為 Delete,則自動釋放存儲資源。
PV 和 PVC 通過抽象存儲資源的管理與使用,實現了存儲的靈活分配和持久化。靜態供應適合固定存儲需求,動態供應則通過 StorageClass 實現自動化,兩者結合為有狀態應用提供了高效的存儲解決方案。
二、PV和PVC的生命周期
在 Kubernetes 中,PV(PersistentVolume) 和 PVC(PersistentVolumeClaim) 的生命周期通過資源供應、綁定、使用、釋放與回收等階段實現存儲資源的管理,以下是其核心要點:
一、PV 生命周期
- 供應階段(Provisioning)
- 靜態供應:管理員手動創建 PV,定義存儲容量、訪問模式(如 ReadWriteOnce)和回收策略(Retain/Delete/Recycle)。此時 PV 狀態為 Available(可用),等待 PVC 綁定。
- 動態供應:通過 StorageClass 自動創建 PV。當用戶聲明 PVC 時,系統根據 StorageClass 模板動態生成 PV 并綁定。
- 綁定階段(Binding)
- PVC 請求存儲資源時,Kubernetes 匹配符合要求的 PV(容量、訪問模式等)。綁定后 PV 狀態變為 Bound(已綁定),且被該 PVC 獨占使用。
- 使用階段(Using)
- Pod 通過掛載 PVC 使用 PV 的存儲資源。多個 Pod 可共享同一 PVC(需支持多節點訪問模式)。
- 釋放與回收階段(Releasing & Recycling)
- Released(已釋放):刪除 PVC 后,PV 進入此狀態,數據保留但不可被新 PVC 綁定。具體行為由回收策略決定:
- Retain(默認):需管理員手動清理數據并刪除 PV。
- Delete:自動刪除底層存儲資源(如云盤),PV 被銷毀。
- Recycle(已廢棄):數據擦除后重新變為 Available,現已被動態供應取代。
- Failed(失敗):PV 操作異常(如存儲后端故障)時進入此狀態,需管理員介入修復。
- Released(已釋放):刪除 PVC 后,PV 進入此狀態,數據保留但不可被新 PVC 綁定。具體行為由回收策略決定:
二、PVC 生命周期
- 創建與綁定
- 用戶定義 PVC 的存儲需求(容量、訪問模式),系統匹配或動態生成 PV。若未找到合適 PV,PVC 保持 Pending(等待)狀態。
- 使用階段
- 綁定成功后,PVC 狀態為 Bound,Pod 通過掛載 PVC 使用存儲資源。
- 刪除與釋放
- 刪除 PVC 后,其綁定的 PV 根據回收策略進入 Released 或刪除狀態。若 PV 為動態供應且策略為 Delete,則 PV 和存儲資源一并銷毀。
三、關鍵狀態與策略對比
狀態/策略 | 描述 |
---|---|
PV 狀態:Available | 空閑待綁定,支持手動或動態分配 |
PV 狀態:Bound | 已與 PVC 綁定,存儲資源被占用 |
PV 狀態:Released | PVC 刪除后保留數據,需按策略處理 |
回收策略:Retain | 數據保留,需手動清理(適用于敏感數據場景) |
回收策略:Delete | 自動銷毀存儲資源(適用于臨時環境或云存儲) |
四、生產實踐建議
- 優先使用動態供應:通過 StorageClass 自動化 PV 創建,避免資源浪費。
- 合理設置回收策略:生產環境推薦 Retain 策略防止誤刪數據,測試環境可用 Delete 策略。
- 監控 PV 狀態:定期檢查 Released 或 Failed 狀態的 PV,防止資源泄漏或故障積累。
通過上述機制,PV 和 PVC 實現了存儲資源的解耦與高效管理,為有狀態應用提供可靠的持久化支持。
三、創建基于NFS的PV
前面已經學習過了NFS卷的掛載,NFS卷是一種集群共享存儲的簡單解決方案。
1.準備NFS共享目錄
創建兩個NFS共享目錄來為兩個PV提供存儲資源
(1)創建要共享的物理目錄
[root@master ~]# mkdir -p /test-storage/nfs1 /test-storage/nfs2
(2)修改/etc/exports配置文件,添加以下兩行定義,增加兩個共享目錄
[root@master ~]# vim /etc/exports
[root@master ~]# cat /etc/exports
/test-storage/nfs 192.168.10.0/24(rw,sync,no_subtree_check,no_root_squash)
/test-storage/nfs1 192.168.10.0/24(rw,sync,no_subtree_check,no_root_squash)
/test-storage/nfs2 192.168.10.0/24(rw,sync,no_subtree_check,no_root_squash)
(3)執行生效配置
[root@master ~]# exportfs -av
exporting 192.168.10.0/24:/test-storage/nfs2
exporting 192.168.10.0/24:/test-storage/nfs1
exporting 192.168.10.0/24:/test-storage/nfs
[root@master ~]#
2.創建PV
(1)編寫PV配置文件
[root@master ~]# cat nfs-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:name: nfs-pv1
spec:capacity:storage: 5Gi # 定義PV的大小volumeMode: Filesystem # 卷模式accessModes:- ReadWriteMany # 訪問模式persistentVolumeReclaimPolicy: Recycle # 回收策略nfs: # 存儲類型path: /test-storage/nfs1server: 192.168.10.30---apiVersion: v1
kind: PersistentVolume
metadata:name: nfs-pv2
spec:capacity:storage: 3Gi # 定義PV的大小volumeMode: Filesystem # 卷模式accessModes:- ReadWriteOnce # 訪問模式persistentVolumeReclaimPolicy: Recycle # 回收策略nfs: # 存儲類型path: /test-storage/nfs2server: 192.168.10.30[root@master ~]#
這是一個多文檔的YAML配置文件,包括兩個PV的定義,為了示范,這里將兩個PV的訪問模式和容量設置得不一樣
(2)基于該配置文件創建PV
[root@master ~]# kubectl create -f nfs-pv.yaml
persistentvolume/nfs-pv1 created
persistentvolume/nfs-pv2 created
[root@master ~]#
(3)查看所創建的PV
[root@master ~]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
nfs-pv1 5Gi RWX Recycle Available 12s
nfs-pv2 3Gi RWO Recycle Available 12s
[root@master ~]#
其中RECLAIM POLICY列表示PV的回收策略,STATUS列表示狀態,值為Available說明PV處于可用狀態。
本列產生了兩個PV,說明PV就是將實際的存儲資源或設備抽象成了Kubernetes的資源。實際應用中,PV通常是由運維人員進行運維的,開發人員一般運維PVC,并部署和管理Pod。
四、基于PVC使用PV
前面創建了PV,PV需要通過PVC聲明才能為Pod所用。PVC消耗的是PV資源。通過PVC使用存儲資源時無須關心底層的存儲實現細節。
1.創建PVC
(1)編寫PVC配置文件
[root@master ~]# cat nfs-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: nfs-pvc1
spec:accessModes:- ReadWriteMany # 訪問模式volumeMode: Filesystem # 卷模式resources:requests:storage: 4Gi # 聲明存儲的大小
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: nfs-pvc2
spec:accessModes:- ReadWriteOnce # 訪問模式volumeMode: Filesystem # 卷模式resources:requests:storage: 3Gi # 聲明存儲的大小
(2)基于該配置文件創建PVC
[root@master ~]# kubectl create -f nfs-pvc.yaml
persistentvolumeclaim/nfs-pvc1 created
persistentvolumeclaim/nfs-pvc2 created
(3)查看所創建的PVC
[root@master ~]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
nfs-pvc1 Bound nfs-pv1 5Gi RWX 29s
nfs-pvc2 Bound nfs-pv2 3Gi RWO 29s
PVC會通過定義的訪問模式、存儲大小去匹配滿足條件的PV。其中,名稱為nfs-pvc1的PVC請求的是4Gi容量,Kubernetes自動匹配容量為5Gi的PV。這里可以發現STATUS列的值為Bound,表示PVC已經綁定了PV,VOLUME列表示所綁定的PV。
(4)查看之前的PV
[root@master ~]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
nfs-pv1 5Gi RWX Recycle Bound default/nfs-pvc1 9m53s
nfs-pv2 3Gi RWO Recycle Bound default/nfs-pvc2 9m53s
可以發現,PV的狀態也變成了Bound,CLAIM列表示的是與PV綁定的PVC,其中的default是名稱空間的名稱。因為PV是集群級的全局資源,并不屬于任何名稱空間,而PVC是屬于特定名稱空間資源,PV可以與任何名稱空間的PVC綁定。
2.使用PVC
Pod將PVC作為卷使用,并通過卷訪問存儲資源。PVC必須使用它的Pod位于同一名稱空間。Kubernetes在Pod的名稱空間中查找指定名稱的PVC,并使用它來獲得希望使用的PV。之后,卷會被掛載到Pod中。
(1)編寫Pod配置文件,可以在之前文件基礎上修改
[root@master ~]# cat pvc-pod.yaml
apiVersion: v1
kind: Pod
metadata:name: pvc-demo
spec:containers:- name: busyboximage: busyboxvolumeMounts: # 容器掛載卷- name: pod-volume # 要掛載的卷名稱mountPath: /pod-data # 掛載到容器的路徑# 容器啟動命令及參數command: ["/bin/sh"] args: ["-c","while true;do /bin/echo $(date +%T) '記錄' >> /pod-data/test.txt;sleep 60; done;"] volumes: # 在Pod級別定義卷- name: pod-volume # 卷名稱persistentVolumeClaim:claimName: nfs-pvc1 # PVC名稱readOnly: false # 不使用只讀模式
(2)基于配置文件創建Pod
[root@master ~]# kubectl create -f pvc-pod.yaml
pod/pvc-demo created
[root@master ~]#
(3)進入該Pod容器的Shell環境,查看由容器命令寫入的test.txt文件,可以看到該文件中記錄的內容
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
pvc-demo 1/1 Running 0 54s
[root@master ~]# kubectl exec -it pvc-demo -- /bin/sh
/ # cat /pod-data/test.txt
05:59:19 記錄
06:00:19 記錄
/ # exit
(4)刪除該Pod
[root@master ~]# kubectl delete po pvc-demo
pod "pvc-demo" deleted
(5)觀察PVC,可以發現所用的PVC沒有發生變化
[root@master ~]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
nfs-pvc1 Bound nfs-pv1 5Gi RWX 11m
nfs-pvc2 Bound nfs-pv2 3Gi RWO 11m
(6)刪除所創建的PVC
[root@master ~]# kubectl delete -f nfs-pvc.yaml
persistentvolumeclaim "nfs-pvc1" deleted
persistentvolumeclaim "nfs-pvc2" deleted
(7)觀察PV,可以發現PV處于Released狀態
[root@master ~]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
nfs-pv1 5Gi RWX Recycle Released default/nfs-pvc1 19m
nfs-pv2 3Gi RWO Recycle Released default/nfs-pvc2 19m
(8)刪除所創建的PV
[root@master ~]# kubectl delete -f nfs-pv.yaml
persistentvolume "nfs-pv1" deleted
persistentvolume "nfs-pv2" deleted
(9)查看PV對應的NFS共享目錄,發現由Pod容器寫入的test.txt文件仍然被保存著
[root@master ~]# cat /test-storage/nfs1/test.txt
05:59:19 記錄
06:00:19 記錄
06:01:19 記錄
五、基于StorageClass實現動態卷制備
利用StorageClass實現動態卷制備,需要相應的卷插件和外部存儲系統支持。為便于實驗操作,這里選擇前面已經部署的NFS共享目錄作為外部存儲資源,利用NFS的外部存儲基于StorageClass實現動態卷制備。Kubernetes內置的制備器不包括NFS,也就不包含內部NFS驅動,管理員需要使用外部驅動為NFS創建StorageClass。目前常用的第三開源的NFS制備器(卷插件)由nfs-subdir-external-provisioner和nfs-ganesha-server-and-external-provisioner這兩種,這里選擇第一種,它基于現有的NFS服務器通過PVC請求來支持PV的動態分配,自動創建的PV被命名為 n a m e s p a c e ? {namespace}- namespace?{pvcName}-${pvName},由名稱空間、PVC和PV這3個資源的名稱組合而成。目前在Kubernetes集群種部署nfs-subdir-external-provisioner組件的方式有3種,分別是Helm、Kustomize和Manually(手動)。下面示范手動部署方式,并測試其動態卷制備功能。
1.獲取NFS服務器的連接信息
如果沒有NFS服務器,則需要先部署NFS服務器。
確保可以從Kubernetes集群訪問NFS服務器,并獲取連接到該服務器所需的信息,至少需要獲取它的主機名
這里利用之前創建的NFS服務器和發布的共享目錄。
IP地址:192.168.10.30
共享目錄:/test-storage/nfs
2.獲取nfs-subdir-external-provisioner源碼包
從源碼托管平臺搜索nfs-subdir-external-provisioner,找到后下載相應的源碼包,本例下載的是(nfs-subdir-external-provisioner-4.0.18.tar.gz),重點是要使用其deploy目錄種的所有文件。直接將整個deploy目錄拷貝到控制平面節點主機上。
[root@master ~]# ls deploy/class.yaml 'deployment(復件).yaml' deployment.yaml kustomization.yaml objects rbac.yaml test-claim.yaml test-pod.yaml
3.創建ServiceAccount
本例所在的Kubernetes集群基于RBAC進行權限控制,因此需要創建一個擁有一定權限的ServiceAccount,以便綁定要部署的nfs-subdir-external-provisioner組件。如果要部署的項目所在的名稱空間不是默認的default,需要將deploy/rbac.yaml文件種namespace字段值修改為要部署項目的名稱空間。這里保持默認值,執行以下命令創建ServiceAccount等RBAC對象。
[root@master ~]# kubectl create -f deploy/rbac.yaml
serviceaccount/nfs-client-provisioner created
clusterrole.rbac.authorization.k8s.io/nfs-client-provisioner-runner created
clusterrolebinding.rbac.authorization.k8s.io/run-nfs-client-provisioner created
role.rbac.authorization.k8s.io/leader-locking-nfs-client-provisioner created
rolebinding.rbac.authorization.k8s.io/leader-locking-nfs-client-provisioner created
4.部署nfs-subdir-external-provisioner組件
以Deployment的形式部署并運行nfs-subdir-external-provisioner組件,該組件提供NFS制備器,基于NFS共享目錄創建掛載點,運行nfs-client-provisioner程序,以便自動創建PV,并將PV與NFS掛載點關聯起來。
根據本例環境修改deploy/deployment.yaml,設置實際的NFS服務器連接信息
[root@master ~]# cat deploy/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: nfs-client-provisionerlabels:app: nfs-client-provisionernamespace: default # 可以根據項目需要替換名稱空間
spec:replicas: 1strategy:type: Recreate # 設置升級策略為刪除再創建(默認為滾動更新)selector:matchLabels:app: nfs-client-provisionertemplate:metadata:labels:app: nfs-client-provisionerspec:serviceAccountName: nfs-client-provisionercontainers:- name: nfs-client-provisioner# 針對國內網絡環境修改其中鏡像倉庫的地址# image: registry.k8s.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2image: registry.cn-hangzhou.aliyuncs.com/weiyigeek/nfs-subdir-external-provisioner:v4.0.2volumeMounts: # 卷掛載點- name: nfs-client-rootmountPath: /persistentvolumesenv:# 制備器名稱和值,以后創建的StorageClass的provisioner字段要用到它- name: PROVISIONER_NAME value: k8s-sigs.io/nfs-subdir-external-provisioner- name: NFS_SERVER value: 192.168.10.30 # NFS服務器設置,需與卷定義的配置保持一致- name: NFS_PATH value: /test-storage/nfs # NFS共享目錄,需與卷定義的配置保持一致volumes: # 卷定義- name: nfs-client-rootnfs:server: 192.168.10.30 # NFS服務器設置path: /test-storage/nfs # NFS共享目錄
執行部署
[root@master ~]# kubectl apply -f deploy/deployment.yaml
deployment.apps/nfs-client-provisioner created
查看運行該Pod的組件,發現本例中該Pod已被部署到node1節點上
[root@master ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nfs-client-provisioner-548bdbd66c-jst69 1/1 Running 0 81s 10.244.166.143 node1 <none> <none>
5.創建基于NFS共享存儲的StorageClass
要實現動態制備,必須創建StorageClass。編寫配置文件
[root@master ~]# cat nfs-storageclass.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: nfs-storage # StorageClass對象名稱,供PVC引用annotations:# 設置為默認的storageclassstorageclass.kubernetes.io/is-default-class: "true"
# 卷制備器名稱,必須和nfs-subdir-external-provisioner組件的PROVISIONER_NAME的值一致
provisioner: k8s-sigs.io/nfs-subdir-external-provisioner
parameters:archiveOnDelete: "true" # 設置為"false"時刪除PVC不會保留數據,"true"則保留數據
執行創建
[root@master ~]# kubectl apply -f nfs-storageclass.yaml
storageclass.storage.k8s.io/nfs-storage created
查看所創建的StorageClass,可以發現這是一個默認的StorageClass
[root@master ~]# kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
nfs-storage (default) k8s-sigs.io/nfs-subdir-external-provisioner Delete Immediate false 9s
6.創建用于測試的PVC
接下來創建一個PVC測試NFS制備器自動創建PV,并于該PV綁定
[root@master ~]# cat test-sc-pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: test-sc-pvc
spec:storageClassName: nfs-storage # 需要與前面創建的StorageClass名稱一致accessModes:- ReadWriteOnceresources:requests:storage: 1Mi
其中關鍵是要通過storageClassName字段指定要選用的StorageClass名稱。
基于配置文件創建PVC
[root@master ~]# kubectl apply -f test-sc-pvc.yaml
persistentvolumeclaim/test-sc-pvc created
查看PVC信息,由于該StorageClass的卷綁定模式為Immediate,即立即綁定,因此PVC創建之后就調用與該StorageClass關聯的制備器來動態創建并綁定PV
[root@master ~]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
test-sc-pvc Bound pvc-d197f44a-1588-47c5-aff9-5bcd85d76443 1Mi RWO nfs-storage 5s
PV卷名是自動生成的隨機字符串,只要不刪除PVC,與PV的綁定就不會丟失
7.創建Pod測試PV的使用
動態卷最終要提供給Pod使用,下面創建一個Pod進行測試
(1)編寫PV配置文件
[root@master ~]# cat test-sc-pod.yaml
kind: Pod
apiVersion: v1
metadata:name: test-sc-pod
spec:containers:- name: test-sc-podimage: busybox:latestcommand:- "/bin/sh"args:- "-c"- "touch /mnt/SUCCESS && exit 0 || exit 1" # 創建名為"SUCCESS"的文件volumeMounts:- name: nfs-pvcmountPath: "/mnt"restartPolicy: "Never"volumes:- name: nfs-pvcpersistentVolumeClaim:claimName: test-sc-pvc # 通過PVC請求PV
(2)執行創建
[root@master ~]# kubectl apply -f test-sc-pod.yaml
pod/test-sc-pod created
(3)在NFS制備器所掛載的NFS共享目錄中查看上述PVC關聯的目錄
[root@master ~]# ls -l /test-storage/nfs | grep test-sc-pvc
drwxrwxrwx 2 root root 6 5月 4 14:13 default-test-sc-pvc-pvc-d197f44a-1588-47c5-aff9-5bcd85d76443
可以發現,上述NFS制備器創建的目錄命名格式為:名稱空間名稱-PVC名稱-PV名稱
(4)查看該目錄內容,可以發現,Pod已經在其中創建了SUCCESS文件
[root@master ~]# ls -l /test-storage/nfs/default-test-sc-pvc-pvc-d197f44a-1588-47c5-aff9-5bcd85d76443
總用量 0
-rw-r--r-- 1 root root 0 5月 4 16:03 SUCCESS
(5)刪除用于測試的Pod和PVC
[root@master ~]# kubectl delete -f test-sc-pod.yaml
pod "test-sc-pod" deleted
[root@master ~]# kubectl delete -f test-sc-pvc.yaml
persistentvolumeclaim "test-sc-pvc" deleted
(6)在NFS共享目錄中再次查看與上述PVC關聯的目錄
[root@master ~]# ls -l /test-storage/nfs | grep test-sc-pvc
drwxrwxrwx 2 root root 21 5月 4 16:03 archived-default-test-sc-pvc-pvc-d197f44a-1588-47c5-aff9-5bcd85d76443
可以發現,Kubernetes根據上述StorageClass中關于NFS制備器的存檔刪除處理參數定義(archiveOnDelete:“true”),自動為基于PVC請求所創建的目錄保留了一份存檔目錄。
(7)清理實驗環境
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nfs-client-provisioner-548bdbd66c-jst69 1/1 Running 1 (36m ago) 148m
recycler-for-nfs-pv1 0/1 ContainerStatusUnknown 0 155m
[root@master ~]# kubectl delete -f deploy/rbac.yaml
serviceaccount "nfs-client-provisioner" deleted
clusterrole.rbac.authorization.k8s.io "nfs-client-provisioner-runner" deleted
clusterrolebinding.rbac.authorization.k8s.io "run-nfs-client-provisioner" deleted
role.rbac.authorization.k8s.io "leader-locking-nfs-client-provisioner" deleted
rolebinding.rbac.authorization.k8s.io "leader-locking-nfs-client-provisioner" deleted
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nfs-client-provisioner-548bdbd66c-jst69 1/1 Running 1 (36m ago) 149m
recycler-for-nfs-pv1 0/1 ContainerStatusUnknown 0 156m
[root@master ~]# kubectl delete -f deploy/deployment.yaml
deployment.apps "nfs-client-provisioner" deleted
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
recycler-for-nfs-pv1 0/1 ContainerStatusUnknown 0 156m
[root@master ~]# kubectl delete pod recycler-for-nfs-pv1
pod "recycler-for-nfs-pv1" deleted
[root@master ~]# kubectl get pods
No resources found in default namespace.
[root@master ~]#