pvc配置實例? ?
實例1
在Deployment中配置 template:xxxxxxvolumeClaimTemplates:- metadata:name: dataspec:accessModes:- ReadWriteOnceresources:requests:storage: 1GistorageClassName: nfsdev-storageclass (創建好的storageClassName)
實例2
#先創建一個pvc 然后在 Deployment中引用
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: nacosserver-pvcnamespace: xxxdev
spec:storageClassName: course-nfs64storageaccessModes:- ReadWriteOnceresources:requests:storage: 1Gi##################################################containers........#創建了卷pvcdata,然后掛載到容器中的某個目錄volumeMounts:- name: pvcdatamountPath: /home/nacos/plugins/peer-findersubPath: peer-finder- name: pvcdatamountPath: /home/nacos/datasubPath: data- name: pvcdatamountPath: /home/nacos/logssubPath: logs# 修復點 2: volumes 定義在 Pod 級別(與 containers 同級)volumes:- name: pvcdatapersistentVolumeClaim:claimName: nacosserver-pvc
兩種pvc使用的不同
? ? ?這兩個配置涉及 Kubernetes 中兩種不同的 PVC(PersistentVolumeClaim)使用方式,主要區別在于創建方式和使用場景:
1.?volumeClaimTemplates
?(動態模板方式)
volumeClaimTemplates: # 用于 StatefulSet 的動態 PVC 模板- metadata:name: data # 生成的 PVC 名稱前綴(如 data-0, data-1)spec:accessModes: [ "ReadWriteMany" ] # 多節點讀寫storageClassName: "course-nfs64storag" # 存儲類名稱(注意拼寫)resources:requests:storage: 20Gi # 請求 20GB 存儲
? 特點:
動態創建 PVC:
當?StatefulSet
?被部署時,Kubernetes 會自動為每個 Pod 副本生成獨立的 PVC(如?data-<pod-name>-0
,?data-<pod-name>-1
)。綁定 StatefulSet 生命周期:
刪除 StatefulSet 時,關聯的 PVC 默認不會被刪除(需手動清理)。適用場景:
有狀態應用(如 MySQL、Redis 集群),每個 Pod 需要獨立的持久化存儲。
2.?獨立 PVC + 手動引用方式
# 先創建獨立的 PVC 資源
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: nacosserver-pvc # 固定名稱的 PVCnamespace: xxxdev # 指定命名空間
spec:storageClassName: course-nfs64storage # 存儲類名稱accessModes:- ReadWriteOnce # 單節點讀寫resources:requests:storage: 1Gi # 請求 1GB 存儲
---
# 在 Pod/Deployment 中引用已存在的 PVC
volumes:- name: pvcdatapersistentVolumeClaim:claimName: nacosserver-pvc # 直接引用 PVC 名稱
? 特點:
靜態創建 PVC:
需手動提前創建?PVC 資源(通過?kubectl apply
)。跨 Pod 共享存儲:
多個 Pod 可通過?claimName
?引用同一個 PVC(需訪問模式支持,如?ReadWriteMany
)。獨立生命周期:
PVC 與 Pod 解耦,刪除 Pod 不會刪除 PVC。適用場景:
通用存儲需求(如單實例應用、共享存儲目錄)。
🔍 關鍵區別總結:
特性 | volumeClaimTemplates ?(StatefulSet) | 獨立 PVC +?claimName |
---|---|---|
PVC 創建方式 | 動態生成(按 Pod 副本數自動創建) | 手動預先創建 |
PVC 命名規則 | 自動生成(如?data-0 ,?data-1 ) | 固定名稱(如?nacosserver-pvc ) |
存儲隔離性 | 每個 Pod 有獨立 PVC | 多個 Pod 可共享同一 PVC |
訪問模式 | 示例中為?ReadWriteMany (多節點讀寫) | 示例中為?ReadWriteOnce (單節點讀寫) |
適用控制器 | 專用于?StatefulSet | 適用于?Pod/Deployment/StatefulSet |
生命周期管理 | 隨 StatefulSet 創建/刪除(PVC 需手動刪) | 獨立管理 |
? 注意事項:
訪問模式沖突:
示例中?volumeClaimTemplates
?使用?ReadWriteMany
,而獨立 PVC 使用?ReadWriteOnce
。
若多個 Pod 同時掛載獨立 PVC,必須使用?ReadWriteMany
,否則會出現掛載錯誤。存儲類名稱拼寫:
volumeClaimTemplates
?中為?course-nfs64storag
(少字母?e
),獨立 PVC 中為?course-nfs64storage
。
需確保名稱一致,否則可能因存儲類不存在導致 PVC 掛起。存儲大小差異:
動態模板申請 20Gi,獨立 PVC 申請 1Gi,根據實際需求調整。
💡 選擇建議:
需要?為每個 Pod 提供獨立存儲(如數據庫集群)→?
volumeClaimTemplates
?+ StatefulSet。需要?共享存儲卷(如配置文件目錄)→?獨立 PVC +?
claimName
。
(確保存儲類支持?ReadWriteMany
,如 NFS)