k8s存储介绍(五)PV与PVC

打印 上一主题 下一主题

主题 1947|帖子 1947|积分 5841

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在 Kubernetes(k8s)中,长期化存储(Persistent Storage)是一个非常紧张的概念,因为 Pod 本身是无状态的,重启后会丢失数据。为了支持有状态应用,Kubernetes 提供了长期化存储的机制,主要包罗 PV(Persistent Volume,长期卷)和 PVC(Persistent Volume Claim,长期卷声明)。
1. 什么是 PV 和 PVC?

PV(Persistent Volume,长期卷) Persistent Volume(PV)是由管理员创建的存储资源,它代表了集群中的实际存储,可以是本地存储、NFS、云存储(如 AWS EBS、Google Persistent Disk)等。PV 是集群级别的资源,不属于特定的命名空间。
PVC(Persistent Volume Claim,长期卷声明) Persistent Volume Claim(PVC)是用户(开发者或应用)请求存储资源的方式。PVC 代表了对存储的需求,比如存储巨细、访问模式等。Kubernetes 通过 PVC 绑定到符合的 PV,以满足用户的需求。
2. PV 和 PVC 的工作流程


  • 管理员创建 PV:管理员在集群中定义一个 PV,并指定存储类型、巨细、访问模式等。
  • 用户创建 PVC:应用程序需要存储时,用户创建 PVC,声明所需的存储资源。
  • Kubernetes 进行绑定:Kubernetes 根据 PVC 的请求寻找符合的 PV,并进行绑定。
  • Pod 挂载 PVC:Pod 使用 PVC 来挂载存储,应用程序可以像使用本地存储一样访问数据。
3. PV 的定义示例

  1. apiVersion: v1
  2. kind: PersistentVolume
  3. metadata:
  4.   name: example-pv
  5. spec:
  6.   capacity:
  7.     storage: 10Gi
  8.   accessModes:
  9.     - ReadWriteOnce
  10.   persistentVolumeReclaimPolicy: Retain
  11.   storageClassName: standard
  12.   hostPath:
  13.     path: "/mnt/data"
复制代码
字段表明


  • capacity:指定存储容量,如 10Gi。
  • accessModes:访问模式,包罗:

    • ReadWriteOnce(RWO):单个节点可读写。
    • ReadOnlyMany(ROX):多个节点只读。
    • ReadWriteMany(RWX):多个节点可读写。

  • persistentVolumeReclaimPolicy:回收策略:

    • Retain(保存):PV 开释后数据仍然保存。
    • Recycle(回收):简单删除数据。
    • Delete(删除):PV 开释后删除存储。

  • storageClassName:存储类,允许动态存储。
  • hostPath:表现本地存储路径。
4. PVC 的定义示例

  1. apiVersion: v1
  2. kind: PersistentVolumeClaim
  3. metadata:
  4.   name: example-pvc
  5. spec:
  6.   accessModes:
  7.     - ReadWriteOnce
  8.   resources:
  9.     requests:
  10.       storage: 5Gi
  11.   storageClassName: standard
复制代码
字段表明


  • accessModes:指定访问模式。
  • resources.requests.storage:请求的存储巨细。
  • storageClassName:必须与 PV 的存储类匹配。
5. 在 Pod 中使用 PVC

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4.   name: example-pod
  5. spec:
  6.   containers:
  7.     - name: app-container
  8.       image: nginx
  9.       volumeMounts:
  10.         - mountPath: "/usr/share/nginx/html"
  11.           name: storage
  12.   volumes:
  13.     - name: storage
  14.       persistentVolumeClaim:
  15.         claimName: example-pvc
复制代码
阐明


  • volumeMounts:将 PVC 挂载到容器内的 /usr/share/nginx/html 目次。
  • volumes:引用 example-pvc 作为存储。
6. PV 绑定 PVC 的过程


  • 管理员创建 PV,它可以是静态的或动态分配的。
  • 用户创建 PVC,请求特定存储巨细和访问模式。
  • Kubernetes 绑定 PVC 到符合的 PV
  • Pod 挂载 PVC,并可以访问存储数据。
7. 应用场景


  • 数据库存储:MySQL、PostgreSQL、MongoDB 等数据库需要长期化存储,以防止数据丢失。
  • 日志存储:应用日志需要长期化存储,以便分析和调试,即使 Pod 重新调理,日志仍然可用。
  • 文件共享:多个 Pod 共享数据,如 NFS 或云存储,多个应用可同时访问雷同数据。
  • 呆板学习:训练数据集通常很大,需要长期化存储,以供模型训练和分析。
  • CI/CD 长期化:在连续集成/连续摆设(CI/CD)流程中,构建缓存或构件存储需要长期化数据。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

自由的羽毛

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表