首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【K8s】Kubernetes 存储之 PersistentVolumeClaim

【K8s】Kubernetes 存储之 PersistentVolumeClaim

作者头像
行者Sun
发布于 2024-09-02 04:49:33
发布于 2024-09-02 04:49:33
28700
代码可运行
举报
文章被收录于专栏:KubernetesKubernetes
运行总次数:0
代码可运行

以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!

如果对您有帮助,烦请点赞、关注、转发!如果您有其他想要了解的,欢迎私信联系我~

基本介绍

Kubernetes 中,PersistentVolumeClaim(持久化卷声明,PVC)是一种与存储相关的资源对象,可以定义申请容量、访问模式等内容。

PVC 与 PV 共同构成了 Kubernetes 中持久存储的基础,它们之间的关系是请求与分配的关系:

  • PV 代表集群中的实际存储资源,可以是任何类型(如 NFS、iSCSI、云存储等), 包含了存储的具体实现细节,如存储位置、容量大小、访问模式等
  • PVC 是对 PV 的请求,包含了用户预期获得的存储资源的详细规格

工作原理

  • 定义对象:在 PVC 对象的资源清单中可以指定其存储类、访问模式、存储容量等配置信息
  • 创建对象:Kubernetes 按照管理员预先定义好的资源清单创建 PVC 对象
  • 绑定:当一个 PVC 对象创建后,静态模式下 Kubernetes 会寻找一个匹配的 PV 进行绑定;在动态模式下 StorageClass 会根据 PVC 的申请动态创建 PV 对象。这个过程可以是立即的,也可以是延迟的
  • 使用:PVC 对象与 PV 对象完成绑定后,Pod 就可以通过挂载 PVC 来访问持久化存储。Pod 的资源清单中会包含对 PVC 对象的引用,Kubernetes 负责将与 PVC 对象绑定的 PV 对象挂载到 Pod 的容器
  • 销毁:当 PVC 对象被销毁时,Kubernetes 会根据 PV 的回收策略来处理 PV 对象

资源清单(示例)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 静态存储供应模式
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: demo-pvc
spec:
  storageClass: ""      # 确保 PVC 绑定到由管理员预先创建的 PV,而不是由 SC 动态创建的新 PV
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 1Gi
 
------------------------------------------------------------------------------
# 动态存储供应模式
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: demo-pvc
spec:
  storageClass: "demo-sc"    # 确保 PVC 绑定到由 SC 动态创建的新 PV
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 1Gi
相关说明

1、状态类型(Status)

PVC 对象创建后,通常会存在以下几种状态:

  • Pending:PVC 对象已被创建,但尚未绑定 PV
  • Bound:PVC 对象已成功绑定 PV
  • Lost:PVC 对象绑定的 PV 已不可用或丢失
  • Failed:PVC 对象无法满足其请求

新建 PVC 对象后,Kubernetes 会根据资源清单的声明查找处于 Available 状态的 PV 对象

  • 如果没找到, PVC 对象状态就会一直处于 Pending
  • 如果能找到,会自动将 PV 对象和 PVC 对象进行绑定,对象状态就会变为 Bound

2、可能情形

  • 如果 PVC 对象声明的容量小于 PV 对象声明的容量,PVC 对象和 PV 对象可以绑定,且容量为 PV 对象声明的容量值
  • 如果 PVC 对象声明的容量大于 PV 对象声明的容量,PVC 对象和 PV 对象无法绑定
  • 如果 PVC 对象和 PV 对象声明的 accessModes 不一致,PVC 对象和 PV 对象无法绑定

3、Pod 挂载

  • Pod 挂载 PVC 时要使用相对路径,避免使用 “ / ” 开头
  • 当多个 Pod 挂载同一个 PVC 时,可以在数据目录下设置子目录(subPath)以避免冲突
  • 当单个 Pod 要在同一个 PVC 下使用 subPath 属性时,name 需要保持一致,否则会出现报错:unmounted volumes=[data], unattached volumes=[data logs default-token-4ss5k]: timed out waiting for the condition
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: demo-deployment
  template:
    metadata:
      labels:
        app: demo-deployment
    spec:
      containers:
      - name: demo-container
        image: demo-image:latest
        ports:
        - containerPort: 80
...
        volumeMounts:
        - name: pvc                  # 错误示范:data
          mountPath: /data
          subPath: data
        - name: pvc                  # 错误示范:logs
          mountPath: /logs
          subPath: logs
      volumes:
      - name: pvc               # 错误示范:volumes 有两个元素,分别是 data 和 logs
        persistentVolumeClaim:
          claimName: demo-pvc
...
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-09-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 实施运维知识交流 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【K8s】Kubernetes 存储之 PersistentVolume
在 Kubernetes 中,PersistentVolume(持久化卷,PV)是一种与存储相关的资源对象,可以定义存储容量、访问模式、回收策略、存储插件等信息。PV 具有独立的生命周期,不会随着 Pod 的销毁被删除。PV 的生命周期包括配置、绑定、使用、保护、回收几个阶段。
行者Sun
2024/09/02
3680
【K8s】Kubernetes 存储之 PersistentVolume
09 . Kubernetes之pv、pvc及使用nfs网络存储应用
动态模式: 管理员无需手动创建PV,而是通过StorageClass的设置对后端存储进行描述,标记为某种"类型(Class)",此时要求PVC对存储的类型进行声明,系统将自动完成PV的创建及PVC的绑定,PVC可以声明为Class为"",说明该PVC禁止使用动态模式
iginkgo18
2020/09/27
3.6K0
09 . Kubernetes之pv、pvc及使用nfs网络存储应用
k8s的数据存储
● 在前面已经提到,容器的生命周期可能很短,会被频繁的创建和销毁。那么容器在销毁的时候,保存在容器中的数据也会被清除。这种结果对用户来说,在某些情况下是不乐意看到的。为了持久化保存容器中的数据,kubernetes引入了Volume的概念。
大忽悠爱学习
2022/09/28
1.8K0
k8s的数据存储
k8s 存储卷之 PV & PVC
由于kubernetes支持的存储系统有很多,要求客户全都掌握,显然不现实。为了能够屏蔽底层存储实现的细节,方便用户使用, kubernetes引入PV和PVC两种资源对象。
看、未来
2022/08/11
1K0
k8s 存储卷之 PV & PVC
【K8s】Kubernetes 存储简介
在 Kubernetes 中,存储是实现集群数据持久化的关键,它允许用户在 Kubernetes 环境中存储、管理和访问数据。
行者Sun
2024/09/02
2970
【K8s】Kubernetes 存储简介
kubernetes-存储卷(十二)
为了保证数据的持久性,必须保证数据在外部存储在docker容器中,为了实现数据的持久性存储,在宿主机和容器内做映射,可以保证在容器的生命周期结束,数据依旧可以实现持久性存储。但是在k8s中,由于pod分布在各个不同的节点之上,并不能实现不同节点之间持久性数据的共享,并且,在节点故障时,可能会导致数据的永久性丢失。为此,k8s就引入了外部存储卷的功能。
yuezhimi
2020/09/30
1.5K0
kubernetes-存储卷(十二)
Kubernetes-卷的概念
是由管理员设置的存储,他是集群的一部分。就像节点是集群中的资源一样,PV也是集群中的资源。 PV是Volume之类的卷插件,但具有独立于适用PV的Pod的生命周期。此API对象包含存储实现的细节 即NFS、ISCSI或特定于云供应商存储系统
Yuou
2022/09/26
1.2K0
Kubernetes 之数据存储
在之前的博文中,我们已经知道了很多 K8S 中的组件了,包括资源控制器等。在资源控制器中,我们说到了 StatefulSet 这个控制器组件,其专门为了有状态服务而生的,而对应的存储要存放到哪里呢?
民工哥
2021/04/21
2.4K0
Kubernetes 持久卷
Container 中的文件在磁盘上是临时存放的,这给 Container 中运行的较重要的应用程序带来一些问题:
Se7en258
2021/05/18
1.2K0
【K8S专栏】Kubernetes数据持久化管理
Kubernetes为了能更好的支持有状态应用的数据存储问题,除了基本的HostPath和EmptyDir提供的数据持久化方案之外,还提供了PV,PVC和StorageClass资源对象来对存储进行管理。
没有故事的陈师傅
2022/09/15
1.3K0
Kubernetes基本存储
​ EmptyDir是基础的Volume类型,一个EmptyDir就是Host上的一个空目录。EmptyDir是在Pod被分配到节点时创建的,它的初始化内容为空,并且无需指定宿主机上对应的目录文件,因为Kubernetes会自动的为他分配一个目录。当Pod被销毁的时候,EmptyDir中的数据也会永久的被删除。
Yuou
2022/09/26
4760
Kubernetes基本存储
7-Kubernetes入门基础之存储Volume介绍
描述: 我们知道在Docker中可以通过Volume将宿主机文件(配置文件、数据库等等)映射到Container内部供其容器内的应用程序使用。在Kubernrtes中我们可以采用ConfigMap控制器创建共享应用配置,亦可采用Kubernetes中的volume(卷)在一个Pod内多个Container之间进行文件共享;
全栈工程师修炼指南
2022/09/29
1.5K0
7-Kubernetes入门基础之存储Volume介绍
详解Kubernetes存储体系
在没有介绍Kubernetes Volume之前,先来回顾下Docker Volume,Docker Volume常用使用方式有两种,
用户5166556
2020/10/23
9830
详解Kubernetes存储体系
K8S原来如此简单(七)存储
例如,缓存服务经常受限于内存大小,将不常用的数据转移到比内存慢、但对总体性能的影响很小的存储中。
Chester Chen
2022/08/18
4000
K8S原来如此简单(七)存储
kubernetes | 存储
基于centos7.9,docker-ce-20.10.18,kubelet-1.22.3-0
Amadeus
2022/10/25
4860
kubernetes | 存储
PersistentVolume、PersistentVolumeClaim && StorageClass
持久卷(PersistentVolume,PV) 是集群中的一块存储,可以由管理员事先制备, 或者使用存储类(Storage Class)来动态制备。 持久卷是集群资源,就像节点也是集群资源一样。PV 持久卷和普通的 Volume 一样, 也是使用卷插件来实现的,只是它们拥有独立于任何使用 PV 的 Pod 的生命周期。
看、未来
2022/10/06
1.6K0
PersistentVolume、PersistentVolumeClaim && StorageClass
kubernetes系列教程(十)深入学习持久化存储PV和PVC
上一篇文章中kubernetes系列教程(九)初识Pod存储管理介绍了kubernetes中存储Volume的使用,volume支持多种不同的内置驱动,使用volumes需要知道后端驱动的细节,使用起来不方便,因此社区提出了PV概念,即通过管理员定义好PV,通过PVC使用PV;随着PV数量的不断增加,管理员需要频繁定义PV,因此提出了动态存储StorageClass,通过PVC中调用StorageClass动态创建PV,接下来介绍kubernetes系列教程高级进阶PV/PVC。
HappyLau谈云计算
2019/10/12
4.2K0
kubernetes系列教程(十)深入学习持久化存储PV和PVC
Kubernetes运维-持久化存储卷实践与管理
PV 的全称是:PersistentVolume(持久化卷),是对底层共享存储的一种抽象,PV 由管理员进行创建和配置,是一个全局资源,包含存储的类型,存储的大小和访问模式等。它和具体的底层的共享存储技术的实现方式有关,比如 Ceph、GlusterFS、NFS、hostPath 等,都是通过插件机制完成与共享存储的对接。
王先森sec
2024/04/20
5830
Kubernetes运维-持久化存储卷实践与管理
k8s之PV、PVC和StorageClass
PV 描述的,则是一个具体的 Volume 的属性,比如 Volume 的类型、挂载目录、远程存储服务器地址等。
编程黑洞
2023/03/06
7491
k8s之PV、PVC和StorageClass
k8s支持的存储_外部存储数据库
前面我们已经学习了使用NFS提供存储,此时就要求用户会搭建NFS系统,并且会在yaml配置nfs。由于kubernetes支持的存储系统有很多,要求客户全部掌握,显然不现实。为了能够屏蔽底层存储实现的细节,方便用户使用,kubernetes引入了PV和PVC两种资源对象。
全栈程序员站长
2022/09/22
1K0
k8s支持的存储_外部存储数据库
相关推荐
【K8s】Kubernetes 存储之 PersistentVolume
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档