当前位置: 首页 > news >正文

【Kubernetes】持久卷声明 PVC

持久化存储》系列,共包含以下文章:

  • K8s 持久化存储方式
  • 持久卷 PV
  • 持久卷声明 PVC
  • 持久卷的动态供给 Dynamic Provisioning

😊 如果您觉得这篇文章有用 ✔️ 的话,请给博主一个一键三连 🚀🚀🚀 吧 (点赞 🧡、关注 💛、收藏 💚)!!!您的支持 💖💖💖 将激励 🔥 博主输出更多优质内容!!!

持久卷声明 PVC

  • 1.持久卷和持久卷声明的区别
  • 2.在 Pod 中使用持久卷声明
  • 3.storageClass 详解

持久卷声明Persistent Volume ClaimPVC),是用户对 Kubernetes 存储资源的一种请求。

通过使用 持久卷声明PVC),用户可以将实际的存储需求告诉给 Kubernetes,然后由 Kubernetes 在已有的 持久卷PV)中进行查找。当寻找到合适的 持久卷PV)时,Kubernetes 会将它提供给 持久卷声明PVC)使用。

因此,持久卷声明PVC)可以被看成资源消费者,它消费的是 持久卷PV)这种资源。

1.持久卷和持久卷声明的区别

持久卷持久卷声明 都是 Kubernetes 提供给用户使用的两种资源对象。通过使用 持久卷PV)和 持久卷声明PVC),可以封装集群数据持久化时的存储细节。

二者也有明显的区别,主要体现在以下两方面。

  • 二者的使用者不同。
    • Kubernetes 集群的管理员应当重点关注 持久卷PV)如何被创建、应该通过 持久卷PV)提供什么样的存储功能,却不需要关注它如何被使用。
    • Kubernetes 集群的用户,应重点关注 持久卷声明PVC)。用户只需要将存储的需求通过 持久卷声明PVC)挂载到 Pod 中即可,不需要关注需求如何被具体实现。
  • 二者所承担的任务不同。
    • 持久卷PV)可以被看成资源的生产者,而 持久卷声明PVC)可以被看成资源的消费者。持久卷PV)负责生成存储的资源,并提供给 持久卷声明PVC)使用。
    • 持久卷声明PVC)在消费 持久卷PV)时,可以向 持久卷PV)申请存储资源的大小及访问模式等。

在这里插入图片描述

2.在 Pod 中使用持久卷声明

在《持久卷 PV》中已经创建了一个 持久卷 pv-demo-1

apiVersion: v1
kind: PersistentVolume
metadata:name: pv-demo-1
spec:capacity:storage: 5GivolumeMode: FilesystemaccessModes:- ReadWriteManypersistentVolumeReclaimPolicy: RecyclestorageClassName: slownfs:server: 172.30.1.2path: /nfs

下面在 Pod 中创建一个 持久卷声明 来使用它。

编辑 pvc-demo-1.yaml 文件,在其中输入以下内容。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: pvc-demo-1
spec:accessModes:- ReadWriteManyresources:requests:storage: 1GistorageClassName: slow

执行 kubectl apply -f 命令创建一个 PVC 资源。

kubectl apply -f pvc-demo-1.yaml

查看创建的 持久卷(PV)和 持久卷声明(PVC),如下图所示。

kubectl get pv,pvc

在这里插入图片描述

🚀可以看到,在创建了 持久卷声明 pvc-demo-1 后,持久卷 pv-demo-1 的状态会自动地从 Available 变成 Bound,并且自动匹配了 pvc-demo-1。这种自动匹配是通过存储类 storageClass 来实现的,因为在 pv-demo-1pvc-demo-1 的描述文件中都指定了 storageClassName: slow 字段。

编辑 pvc-pod-demo1.yaml 文件以创建 Pod 来使用持久卷声明对象,在文件中输入以下内容。

apiVersion: v1
kind: Pod
metadata:name: pvc-pod-demo1
spec:containers:- name: pvc-pod-containerimage: busyboximagePullPolicy: IfNotPresentargs:- /bin/sh- -c- sleep 30000volumeMounts:- mountPath: "/mydata"name: mydatavolumes:- name: mydatapersistentVolumeClaim:claimName: pvc-demo-1

🚀 在 pvc-pod-demo1.yaml 描述文件中,通过 volumes.persistentVolumeClaim 字段指定了 持久卷声明(PVC)的对象为 pvc-demo-1,并将其挂载到了容器内部的 /mydata 目录下,而 持久卷声明 对象 pvc-demo-1 又自动匹配了 持久卷(PV)对象 pv-demo-1。因此,最终的效果是:把网络数据卷 NFS 挂载到了容器的 /mydata 目录下了。

执行 kubectl apply -f 命令。

kubectl apply -f pvc-pod-demo1.yaml

执行 kubectl exec -it 命令进入容器内。

kubectl exec -it pvc-pod-demo1 -c pvc-pod-container sh

查看容器内的 /mydata 目录。

ls /mydata/
more /mydata/index.html

在这里插入图片描述

🚀 /mydata 目录下的内容就是在《K8s 持久化存储方式》中创建在 NFS Server 上的 Nginx 的首页 index.html

3.storageClass 详解

持久卷(PV)对象可以属于某一个存储类 storageClass。

  • 如果属于特定存储类的 持久卷声明(PVC)对象请求存储资源,则它只能请求与其对应存储类所标识的 持久卷(PV)对象。
  • 如果 持久卷(PV)对象没有设置存储类,则它只能被没有指定存储类的 持久卷声明(PVC)对象请求。

下面是 Kubernetes 官方提供的一个创建存储类 storageClass 的示例。该存储类使用 NFS(网络文件系统)的制备器来提供存储资源。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: example-nfs
provisioner: example.com/external-nfs
parameters:server: "nfs-server.example.com"path: "/share"readOnly: "false"

从示例中可以看出,在存储类 storageClass 的定义中包含 provisionerparametersreclaimPolicy 字段。这些字段会在存储类 storageClass 需要动态分配 持久卷(PV)时被使用。

在这 3 个字段中,只有 provisioner(制备器)字段是必需的,它决定在创建 PV 资源时使用哪种类型的卷插件作为存储资源。例如,在该示例中使用 example.com/external-nfs 作为 PV 对象的制备器,该制备器通过 NFS 的方式提供存储资源。因此,在存储类 storageClass 的最后通过 parameters 参数指定了 NFS 的地址信息。

每一个被创建的 持久卷(PV)对象会有一个存储资源的回收策略(通过 reclaimPolicy 字段指定)。该字段的值可以是 DeleteRetain,默认值是 Delete

下面是 Kubernetes 官方提供的另一个存储类示例,该存储类使用 Glusterfs 插件来提供相应的存储资源。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: slow
provisioner: kubernetes.io/glusterfs
parameters :resturl: "http://127.0.0.1:8081"clusterid: "630372ccdc720a92c681fb928f27b53f"restauthenabled: "true"restuser: "admin"secretNamespace: "default"secretName: "heketi-secret"gidMin: "40000"gidMax: "50000"volumetype: "replicate:3"

http://www.mrgr.cn/news/17572.html

相关文章:

  • 机器学习之监督学习(二)逻辑回归(二元分类问题)
  • 基于SpringBoot+Vue+MySQL的的宠物商城网站
  • Self-study Python Fish-C Note20 P64to65
  • 电阻器件的选型
  • Open3D mesh 均值滤波
  • [Algorithm][综合训练][循环汉诺塔][kotori和素因子][dd爱科学]详细讲解
  • Spring MVC 框架简介与实例
  • vector模拟实现迭代器失效
  • 【Kubernetes】持久卷的动态供给 Dynamic Provisioning
  • HX711—称重模块
  • 18. 为什么浮点类型不支持左移和右移运算符?
  • 计算机毕业设计hadoop+spark知识图谱课程推荐系统 课程预测系统 课程大数据 课程数据分析 课程大屏 mooc慕课推荐系统 大数据毕业设计
  • 提高工作效益方法(一)
  • 【EtherCAT】运行原理
  • 支付平台构建支付接口供整个公司调用—支付代理商
  • getopts(1) builtin command
  • Linux 文件操作相关函数整理
  • docker实战基础一 (Docker基础命令)
  • docker实战扩展三(dockerfile中run的详细用法)
  • `lambdaQuery()` 和 `lambda()`