kubernetes核心技术之PV与PVC知识总结

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: kubernetes核心技术之PV与PVC知识总结

基本概念

管理存储是管理计算的一个明显问题。 该 PersistentVolume 子系统为用户和管理员提供了一个 API, 用于抽象如何根据消费方式提供存储的详细信息。 为此, 我们引入了两个新的API 资源: PersistentVolumePersistentVolumeClaim

PersistentVolume(PV) 是集群中由管理员配置的一段网络存储。 它是集群中的资源, 就像节点是集群资源一样。 PV 是容量插件, 如 Volumes, 但其生命周期独立于使用 PV 的任何单个 pod。 此 API 对象捕获存储实现的详细信息, 包括 NFSiSCSI或特定于云提供程序的存储系统。

PersistentVolumeClaim(PVC) 是由用户进行存储的请求。 它类似于 podPod消耗节点资源, PVC 消耗 PV 资源。 Pod 可以请求特定级别的资源(CPU 和内存) 。 声明可以请求特定的大小和访问模式(例如, 可以一次读/写或多次只读) 。
   虽然 PersistentVolumeClaims 允许用户使用抽象存储资源, 但是 PersistentVolumes 对于不同的问题, 用户通常需要具有不同属性(例如性能) 。 群集管理员需要能够提供各种PersistentVolumes 不同的方式, 而不仅仅是大小和访问模式, 而不会让用户了解这些卷的实现方式。 对于这些需求, 有 StorageClass资源。StorageClass 为管理员提供了一种描述他们提供的存储的“类” 的方法。 不同的类可能映射到服务质量级别, 或备份策略, 或者由群集管理员确定的任意策略。 Kubernetes 本身对于什么类别代表是不言而喻的。 这个概念有时在其他存储系统中称为“配置文件” 。PVC PV 是一一对应的。

生命周期

PV 是群集中的资源。 PVC 是对这些资源的请求, 并且还充当对资源的检查。 PV PVC 之间的相互作用遵循以下生命周期:Provisioning ——-> Binding ——–>Using——>Releasing——>Recycling

供应准备 Provisioning---通过集群外的存储系统或者云平台来提供存储持久化支持。

  • 静态提供 Static: 集群管理员创建多个 PV。 它们携带可供集群用户使用的真实存储的详细信息。 它们存在于 Kubernetes API 中, 可用于消费。
  • 动态提供 Dynamic: 当管理员创建的静态 PV 都不匹配用户的 PersistentVolumeClaim时, 集群可能会尝试为 PVC 动态配置卷。 此配置基于 StorageClassesPVC 必须请求一个类, 并且管理员必须已创建并配置该类才能进行动态配置。 要求该类的声明有效地为自己禁用动态配置

绑定 Binding---用户创建 pvc并指定需要的资源和访问模式。 在找到可用 pv之前, pvc会保持未绑定状态。
      使用 Using---用户可在 pod 中像 volume 一样使用 pvc

释放 Releasing---用户删除 pvc来回收存储资源, pv将变成“released” 状态。 由于还保留着之前的数据, 这些数据需要根据不同的策略来处理, 否则这些存储资源无法被其他pvc使用。

回收 Recycling---pv 可以设置三种回收策略: 保留(Retain) , 回收(Recycle) 和删除(Delete) 。

  • 保留策略: 允许人工处理保留的数据。
  • 删除策略: 将删除 pv 和外部关联的存储资源, 需要插件支持。
  • 回收策略: 将执行清除操作, 之后可以被新的 pvc 使用, 需要插件支持

PV卷阶段状态

  • Available ---- 资源尚未被claim使用
  • Bound ----卷已经被绑定到claim了。
  • Released -- claim 被删除, 卷处于释放状态, 但未被集群回收。
  • Failed – 卷自动回收失败

演示:创建PV

第一步:编写 yaml 文件, 并创建 pv

创建 5 个 pv, 存储大小各不相同, 是否可读也不相同

apiVersion: v1
kind: PersistentVolume
metadata:
    name: pv001
    labels:
      name: pv001
spec:
    capacity:
      storage: 2Gi
    accessModes:
      - ReadWriteOnce
      - ReadWriteMany
    nfs:
      path: /nfs/pv001
      server: 10.91.74.201
---
apiVersion: v1
kind: PersistentVolume
metadata:
    name: pv002
    labels:
      name: pv002
spec:
    capacity:
      storage: 5Gi
    accessModes:
      - ReadWriteOnce
    nfs:
      path: /nfs/pv002
      server: 10.91.74.201
---
apiVersion: v1
kind: PersistentVolume
metadata:
    name: pv003
    labels:
      name: pv003
spec:
    capacity:
      storage: 20Gi
    accessModes:
      - ReadWriteOnce
      - ReadWriteMany
    nfs:
      path: /nfs/pv003
      server: 10.91.74.201
---
apiVersion: v1
kind: PersistentVolume
metadata:
    name: pv004
    labels:
      name: pv004
spec:
    capacity:
      storage: 10Gi
    accessModes:
      - ReadWriteOnce
      - ReadWriteMany
    nfs:
      path: /nfs/pv004
      server: 10.91.74.201
---
---
apiVersion: v1
kind: PersistentVolume
metadata:
    name: pv005
    labels:
      name: pv005
spec:
    capacity:
      storage: 15Gi
    accessModes:
      - ReadWriteOnce
      - ReadWriteMany
    nfs:
      path: /nfs/pv005
      server: 10.91.74.201

第二步:执行创建命令

[root@master1 pv]# kubectl apply  -f pv_test.yaml
persistentvolume/pv001 created
persistentvolume/pv002 created
persistentvolume/pv003 created
persistentvolume/pv004 created
persistentvolume/pv005 created

第三步:查询验证

[root@master1 pv]# kubectl get pv
NAME    CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
pv001   2Gi        RWO,RWX        Retain           Available                                   7s
pv002   5Gi        RWO            Retain           Available                                   7s
pv003   20Gi       RWO,RWX        Retain           Available                                   7s
pv004   10Gi       RWO,RWX        Retain           Available                                   7s
pv005   15Gi       RWO,RWX        Retain           Available                                   7s

演示:创建PVC,绑定PV

第一步:编写yaml文件,并创建PVC。创建一个pvc, 需要6G存储; 所以不会匹配pv001、pv002、pv003 。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
    name: mypvc
    labels:
      name: pv001
spec:
    accessModes:
     - ReadWriteMany
    resources:
      requests:
        storage: 6Gi
---
apiVersion: v1
kind: Pod
metadata:
   name: myweb
   labels:
      app: myweb
spec:
 volumes:
 - name: html
   persistentVolumeClaim:
     claimName: mypvc
 containers:
   - name: nginx
     image: reg.harbor.com/public/nginx:latest
     ports:
      - containerPort: 80
     resources:
      requests:
       memory: "64Mi"
       cpu: '250m'
      limits:
       memory: "128Mi"
       cpu: "500m"
     volumeMounts:
     - name: html
       mountPath: /usr/share/nginx/html/

第二步:执行命令创建

[root@master1 pv]# kubectl apply  -f vol-pvc-demo.yaml

第三步:查询验证

[root@master1 pv]# kubectl get pv,pvc
NAME                     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM           STORAGECLASS   REASON   AGE
persistentvolume/pv001   2Gi        RWO,RWX        Retain           Available                                           35m
persistentvolume/pv002   5Gi        RWO            Retain           Available                                           35m
persistentvolume/pv003   20Gi       RWO,RWX        Retain           Available                                           35m
persistentvolume/pv004   10Gi       RWO,RWX        Retain           Bound       default/mypvc                           35m
persistentvolume/pv005   15Gi       RWO,RWX        Retain           Available                                           35m
NAME                          STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/mypvc   Bound    pv004    10Gi       RWO,RWX                       20m
[root@master1 pv]#
相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
存储 Kubernetes API
kubernetes【存储】1. 共享存储pv、pvc、StorageClass使用详解(1)
kubernetes【存储】1. 共享存储pv、pvc、StorageClass使用详解(1)
kubernetes【存储】1. 共享存储pv、pvc、StorageClass使用详解(1)
|
1月前
|
存储 Kubernetes 调度
kubernetes核心技术之Pod知识总结
【4月更文挑战第2天】kubernetes核心技术之Pod知识总结
49 0
|
5月前
|
存储 Kubernetes Cloud Native
云原生|kubernetes|持久化存储pv,pvc和StorageClass的学习
云原生|kubernetes|持久化存储pv,pvc和StorageClass的学习
127 0
|
存储 Kubernetes 调度
Kubernetes 中存储使用介绍(PV、PVC和StorageClass)
在 Kubernetes 中的应用,都是以 Pod 的形式运行的,当我们要是在 Kubernetes 上运行一些需要存放数据的应用时,便需要关注应用存放的数据是否安全可靠。因为 Pod 是有生命周期的,那么也就是说当 Pod 被删除或重启后,Pod 里面所运行的数据也会随之消失。
1420 0
Kubernetes 中存储使用介绍(PV、PVC和StorageClass)
|
11月前
|
存储 Kubernetes 应用服务中间件
k8s初探(7)-kubernetes volume(1)
k8s初探(7)-kubernetes volume(1)
138 0
|
12月前
|
存储 Kubernetes Perl
【kubernetes】PVC
【kubernetes】PVC
102 0
|
存储 运维 Kubernetes
kubernetes【存储】1. 共享存储pv、pvc、StorageClass使用详解(2)
kubernetes【存储】1. 共享存储pv、pvc、StorageClass使用详解(2)
kubernetes【存储】1. 共享存储pv、pvc、StorageClass使用详解(2)
|
存储 Kubernetes Cloud Native
云原生|kubernetes|持久化存储pv,pvc和StorageClass的学习(二)
云原生|kubernetes|持久化存储pv,pvc和StorageClass的学习
177 0
|
存储 缓存 Kubernetes
云原生|kubernetes|持久化存储pv,pvc和StorageClass的学习(一)
云原生|kubernetes|持久化存储pv,pvc和StorageClass的学习
136 0
云原生|kubernetes|持久化存储pv,pvc和StorageClass的学习(一)
|
存储 Kubernetes Cloud Native
云原生|kubernetes|持久化存储pv,pvc和StorageClass的学习(三)
云原生|kubernetes|持久化存储pv,pvc和StorageClass的学习
173 0

推荐镜像

更多