持久化存储Reclaim Policy配置

最近需要部署一个MySQL容器,因为数据库存放的数据需要一直保存,就涉及到持久化的概念。容器本身是无状态的,出现问题后随时可销毁,但保存数据的的卷不能被销毁,需要创建一个持久卷。持久卷删除时有三种回售模式,

  • 保持(Retain):删除PV后后端存储上的数据仍然存在,如需彻底删除则需要手动删除后端存储volume
  • 删除(Delete):删除被PVC释放的PV和后端存储volume
  • 回收(Recycle):保留PV,但清空PV上的数据(已废弃)

默认情况下是delete模式,可以通过以下命令查看:

获取所有持久卷
# kubectl get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM                                                           STORAGECLASS   REASON    AGE
pvc-89ecc53b-725c-11ea-a8e2-005056aa2a6d   5Gi        RWX            Delete           Bound       service/mysql-pvc                                          isilon                   18h

查看持久卷具体信息
# kubectl describe pv pvc-89ecc53b-725c-11ea-a8e2-005056aa2a6d
Name:            pvc-89ecc53b-725c-11ea-a8e2-005056aa2a6d
Labels:       
<think>好的,我现在需要回答用户关于“PVC 怎么提供的持久化存储”的问题。首先,我得确认自己对PVC(PersistentVolumeClaim)的理解是否正确。PVC是Kubernetes中用于请求存储资源的对象,属于持久卷声明的一部分。用户可能想了解PVC如何实现持久化存储,以及它在Kubernetes存储体系中的角色。 接下来,我需要整理Kubernetes存储的基本概念,包括PersistentVolume(PV)、StorageClass(SC)和PVC之间的关系。用户可能对PVC如何与这些组件交互不太清楚,所以需要分步骤解释。比如,PV是集群中的存储资源,由管理员预先配置或动态供给,而PVC是用户对存储的请求,通过StorageClass动态创建PV。 然后,要考虑用户可能存在的疑问点,比如PVC如何绑定到PV,访问模式(如ReadWriteOnce、ReadOnlyMany、ReadWriteMany)的区别,以及存储类的作用。这时候需要具体说明PVC的配置参数,如存储大小、访问模式、存储类名称等,并举例说明一个PVC的YAML定义。 另外,用户可能想知道PVC如何被Pod使用,因此需要说明如何在Pod的volumeMounts中引用PVC,确保存储的持久性。这里要强调即使Pod被删除,PVC和PV中的数据仍然保留,除非PVC被删除且回收策略允许清除。 还要注意检查是否有常见的误解,例如PVC和PV的生命周期管理,回收策略如Retain、Delete、Recycle的不同之处,特别是动态供给下StorageClass的回收策略。可能需要解释动态供给和静态供给的区别,以及它们对持久化的影响。 最后,要确保回答结构清晰,分步骤或分点说明,帮助用户逐步理解。使用实际例子加强说明,比如动态创建PVC的流程,以及Pod如何使用该PVC。同时,提醒用户注意配置参数的重要性,如访问模式和存储类选择,避免常见错误。</think>在 Kubernetes 中,PVC(PersistentVolumeClaim)通过以下分层机制实现持久化存储: ### 一、核心概念 1. **PersistentVolume (PV)** 集群管理员预配置存储资源池,支持多种存储类型(如 NFS、云存储、本地磁盘等),具有明确的存储容量和访问模式属性。 2. **PersistentVolumeClaim (PVC)** 用户发起的存储资源请求,通过声明所需容量、访问模式(ReadWriteOnce/ReadOnlyMany/ReadWriteMany)和 StorageClass 名称,自动匹配或触发创建 PV。 3. **StorageClass (SC)** 定义动态供给的存储模板,包含制备器(provisioner)、回收策略(Retain/Delete)等参数,如: ```yaml apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: fast-ssd provisioner: kubernetes.io/gce-pd parameters: type: pd-ssd reclaimPolicy: Delete ``` ### 二、持久化流程 1. **静态供给** - 管理员预先创建 PV - 用户创建 PVC 后,系统通过容量和访问模式自动完成 PV-PVC 绑定 2. **动态供给(主流方案)** ```mermaid graph LR A[用户创建PVC] --> B{检查匹配StorageClass} B -->|存在| C[触发Provisioner创建PV] B -->|不存在| D[需预先静态PV] C --> E[自动绑定PVC-PV] ``` 3. **数据持久性保障** - Pod 删除时:PVC 和 PV 保持存在,数据保留 - PVC 删除时:根据 PV 的 `reclaimPolicy` 决定保留(Retain)或删除(Delete)后端存储数据 ### 三、实际应用示例 1. **PVC 定义文件** ```yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: app-data-pvc spec: storageClassName: fast-ssd # 关联StorageClass accessModes: - ReadWriteOnce resources: requests: storage: 10Gi ``` 2. **Pod 挂载声明** ```yaml apiVersion: v1 kind: Pod metadata: name: web-server spec: containers: - name: nginx image: nginx volumeMounts: - mountPath: "/usr/share/nginx/html" name: app-storage volumes: - name: app-storage persistentVolumeClaim: claimName: app-data-pvc ``` ### 四、关键注意事项 1. **访问模式选择** - ReadWriteOnce(RWO):单节点读写 - ReadOnlyMany(ROX):多节点只读 - ReadWriteMany(RWX):多节点读写 2. **存储后端限制** 不同存储类型对访问模式的支持不同(如 NFS 支持 RWX,云盘通常仅支持 RWO) 3. **数据安全策略** - 生产环境建议使用 `reclaimPolicy: Retain` 避免误删 - 定期备份重要数据,即使使用持久化存储 通过这种机制,PVC 实现了与 Pod 生命周期的解耦,确保应用重启、迁移或扩展时存储数据的持久可用性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SeasonRun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值