pvc配置实例
实例1
在Deployment中配置
template:
xxxxxx
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: nfsdev-storageclass (创建好的storageClassName)
实例2
#先创建一个pvc 然后在 Deployment中引用
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nacosserver-pvc
namespace: xxxdev
spec:
storageClassName: course-nfs64storage
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
##################################################
containers
........
#创建了卷pvcdata,然后挂载到容器中的某个目录
volumeMounts:
- name: pvcdata
mountPath: /home/nacos/plugins/peer-finder
subPath: peer-finder
- name: pvcdata
mountPath: /home/nacos/data
subPath: data
- name: pvcdata
mountPath: /home/nacos/logs
subPath: logs
# 修复点 2: volumes 定义在 Pod 级别(与 containers 同级)
volumes:
- name: pvcdata
persistentVolumeClaim:
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 # 固定名称的 PVC
namespace: xxxdev # 指定命名空间
spec:
storageClassName: course-nfs64storage # 存储类名称
accessModes:
- ReadWriteOnce # 单节点读写
resources:
requests:
storage: 1Gi # 请求 1GB 存储
---
# 在 Pod/Deployment 中引用已存在的 PVC
volumes:
- name: pvcdata
persistentVolumeClaim:
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)