Kubernetes Pv & Pvc

Kubernetes PV & pvc


介绍

PersistentVolume(pv)和PersistentVolumeClaim(pvc)是k8s提供的两种API资源,用于抽象存储细节。管理员关注于如何通过pv提供存储功能而无需

关注用户如何使用,同样的用户只需要挂载pvc到容器中而不需要关注存储卷采用何种技术实现。

pvc和pv的关系与pod和node关系类似,前者消耗后者的资源。pvc可以向pv申请指定大小的存储资源并设置访问模式,这就可以通过Provision -> Claim 的方式,来对存储资源进行控制。

生命周期

pv和pvc遵循以下生命周期:

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

    - 静态提供:管理员手动创建多个PV,供PVC使用。

    - 动态提供:动态创建PVC特定的PV,并绑定。

  • 绑定。用户创建pvc并指定需要的资源和访问模式。在找到可用pv之前,pvc会保持未绑定状态。
  • 使用。用户可在pod中像volume一样使用pvc。
  • 释放。用户删除pvc来回收存储资源,pv将变成“released”状态。由于还保留着之前的数据,这些数据需要根据不同的策略来处理,否则这些存储资源无法被其他pvc使用。
  • 回收(Reclaiming)。pv可以设置三种回收策略:保留(Retain),回收(Recycle)和删除(Delete)。

    - 保留策略:允许人工处理保留的数据。

    - 删除策略:将删除pv和外部关联的存储资源,需要插件支持。

    - 回收策略:将执行清除操作,之后可以被新的pvc使用,需要插件支持。

      目前只有NFS和HostPath类型卷支持回收策略,AWS EBS,GCE PD,Azure Disk和Cinder支持删除(Delete)策略。
    

Provisioning

两种方式提供的PV资源供给:

  • static

      通过集群管理者创建多个PV,为集群“使用者”提供存储能力而隐藏真实存储的细节。并且存在于kubenretes api中,可被直接使用。
    
  • dynamic
      动态卷供给是kubernetes独有的功能,这一功能允许按需创建存储建。在此之前,集群管理员需要事先在集群外由存储提供者或者云提供商创建
    

存储卷,成功之后再创建PersistentVolume对象,才能够在kubernetes中使用。动态卷供给能让集群管理员不必进行预先创建存储卷,而是随着用户需求

进行创建。在1.5版本提高了动态卷的弹性和可用性。

    在此前1.4版本中加入了一个 新的 API 对象 StorageClass,可以定义多个 StorageClass 对象,并可以分别指定存储插件、设置参数,用于提

供不同的存储卷。这样的设计让集群管理员能够在同一个集群内,定义和提供不同类型的、不同参数的卷(相同或者不同的存储系统)。这样的设计还确

保了最终用户在无需了解太多的情况下,有能力选择不同的存储选项。

PV类型

pv支持以下类型:

  • GCEPersistentDisk
  • AWSElasticBlockStore
  • NFS
  • iSCSI
  • RBD (Ceph Block Device)
  • Glusterfs
  • AzureFile
  • AzureDisk
  • CephFS
  • cinder
  • FC
  • FlexVolume
  • Flocker
  • PhotonPersistentDisk
  • Quobyte
  • VsphereVolume
  • HostPath (single node testing only – local storage is not supported in any way and WILL NOT WORK in a multi-node cluster)

PV属性:

  • 访问模式,与pv的语义相同。在请求资源时使用特定模式。
  • 资源,申请的存储资源数额。

PV卷阶段状态:

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

AwsElasticBlockServer 静态PV示例

需要满足以下条件方可使用EBS:

  • Pod运行的节点必须为AWS EC2实例
  • 这些示例需要和EBS在同一个区域和可用区域
  • EBS只支持一个EC2挂载一个卷
  • RC或者Deployment 副本集只能为1。

1. 创建PV(Persistent Volume)

$ vim ebs-pv.yaml

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: ebs-pv
      labels:
        type: amazonEBS
    spec:
      capacity:
        storage: 5Gi
      accessModes:
        - ReadWriteOnce
      awsElasticBlockStore:
        volumeID: vol-079c492115a7be6e1
        fsType: ext4

$ kubectl create -f ebs-pv.yaml

    persistentvolume "ebs-pv" created

2. 创建PVC(Persistent Volume Claim)

$ vim nginx-pvc.yaml

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: nginx-pvc
      labels:
        type: amazonEBS
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 5Gi

$ kubectl create -f nginx-pvc.yaml

    persistentvolumeclaim "nginx-pvc" created

3.创建deployment服务使用pvc资源

$ vim nginx-with-pvc.yaml

    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: nginx-with-pvc
    spec:
      replicas: 1
      template:
        metadata:
          labels:
            service: nginx
            app: test
        spec:
          containers:
          - image: nginx
            name: nginx-with-pvc
            volumeMounts:
            - mountPath: /test-ebs
              name: my-pvc
          volumes:
          - name: my-pvc
            persistentVolumeClaim:
              claimName: nginx-pvc

kubectl create -f nginx-with-pvc.yaml

    Deployment "nfs-web" created

注意事项

    - 由于aws ebs限制一个ebs只能同时挂载一个ec2,在使用基于pvc的pod时,建议使用replicas=1来创建一个部署集。StatefulSet可解决数据库集群问题。
    - pod迁移,pvc迁移(卸载旧实例/挂载新实例)默认35秒。
    - 通过deployemnt部署,删除deployment之后,可重新挂载原有pvc到新的pod里面。
    - 当pod被删除,同时删除依赖的pvc,pv状态变更为release。此时不能被其他pvc使用,aws ebs需要delete pv重建。目前不支持通过手动回收

- 已经被pvc绑定的pv可以被删除,删除后对应的pvc仍为Bound状态。如有pod正在使用此pvc则仍可使用。如无pod使用,则创建pod挂载此pvc时

会出现失败。

- pv可以在绑定后被编辑(如访问模式,容量),导致信息与对应的pvc不一致

链接:https://www.jianshu.com/p/fda9de00ba5f

原文地址:https://www.cnblogs.com/cheyunhua/p/10023750.html

时间: 2024-10-08 21:15:38

Kubernetes Pv & Pvc的相关文章

kubernetes pv pvc configmap secret 使用

pv pvc使用 1.概述,我们可以这样来组织我们的存储,在pod中我们只需要定义一个存储卷并且定义的时候我只需要说明我需要多大的存储卷就行了,这个存储卷叫pvc类型的存储卷,而pvc类型的存储卷必须与当前名称空间中的pvc建立直接绑定关系,而pvc必须与pv建立绑定关系,而pv应该是真正某个存储设备上的存储空间,所以pv和pvc是k8s系统之上的抽象的但也算是标准的资源,pvc是一种资源,pv也是一种资源,他的创建方式和我们此前创建其它资源方式是一样的,但是用户需要怎么做呢?存储工程师把每个存

Kubernetes PV在Retain策略Released状态下重新分配到PVC恢复数据

Kubernetes PV在Retain策略Released状态下重新分配到PVC恢复数据 [TOC] 1. 实验目的和环境说明 原由:在使用helm update stable/sonatype-nexus从1.6版本更新到1.13版本后,出现PVC删除,重新创建PVC的情况,好在原来PV为Retain.故研究下Retain的PV怎么恢复数据. 实验目的:PVC删除后,PV因Retain策略,状态为Released,将PV内数据恢复成PVC,挂载到POD内,达到数据恢复. 环境说明: Kube

Kubernetes 存储卷管理 PV&PVC(十)

为了持久化保存容器的数据,可以使用 Kubernetes Volume. Volume 的生命周期独立于容器,Pod 中的容器可能被销毁和重建,但 Volume 会被保留. 本质上,Kubernetes Volume 是一个目录,这一点与 Docker Volume 类似.当 Volume 被 mount 到 Pod,Pod 中的所有容器都可以访问这个 Volume.Kubernetes Volume 也支持多种 backend 类型,包括 emptyDir.hostPath.GCE Persi

Serverless Kubernetes全面升级2.0架构:支持多命名空间、RBAC、CRD、PV/PVC等功能

Serverless Kubernetes概述: 阿里云Serverless Kubernetes容器服务最新开放香港.新加坡.悉尼区域,同时全面开放2.0架构,帮助用户更加便捷.轻松地步入“以应用为中心”的全新架构.通过Serverless Kubernetes,用户50秒内可从零启动500应用容器,而无需关心底层服务器资源. Serverless Kubernetes 2.0新架构 Serverless Kubernetes 2.0对后台架构进行了彻底升级,从之前的基于Namespace的多

kubernetes 的pv/pvc存储

kubernetes 的pv/pvc存储 标签(空格分隔): kubernetes系列 一: kubernetes的PV/PVC存储 一: kubernetes的PV/PVC存储 1.1 pv PersistentVolume (PV) 是由管理员设置的存储,它是群集的一部分.就像节点是集群中的资源一样,PV 也是集群中的资源. PV 是 Volume 之类的卷插件,但具有独立于使用 PV 的 Pod 的生命周期.此 API 对象包含存储实现的细节,即 NFS. iSCSI 或特定于云供应商的存

快速批量创建k8s pv&pvc

快速批量创建nfs pv for i in {3..6}; do cat <<EOF | kubectl apply -f - apiVersion: v1 kind: PersistentVolume metadata: name: pv00${i} spec: capacity: storage: 100Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Recycle nfs: path: /volume1/har

Kubernetes-卷/存储卷(emptyDir/hostPath/pv/pvc)

1 卷的介绍 1.1 卷的概念 ??在搞容器的时候,我们在处理完应用如何起,如何运行,最终落实到数据的时候,我们又要考虑2个问题:容器是如何访问外部磁盘存储的?容器之间如何共享存储空间?在一些场景下,我们经常希望新起的容器可以在之前容器over的那个卡点处继续运行下去. ??怎么做?怎么能解决上面的问题?这个时候k8s中的卷,也就是存储卷应运而生.卷不是独立的k8s对象,它是pod的一部分,和pod同生命周期(共享),不能单独创建和销毁,即跟随pod启动时创建,删除时销毁.当重启容器时,卷可以保

2个Kubernetes使用同一个Ceph存储达到Kubernetes间持久化数据迁移

2个Kubernetes使用同一个Ceph存储达到Kubernetes间持久化数据迁移 [TOC] 当前最新Kubernetes稳定版为1.14.现在为止,还没有不同Kubernetes间持久化存储迁移的方案.但根据Kubernetes pv/pvc绑定流程和原理,只要 "存储"-->"PV"-->"PVC" 的绑定关系相同,即可保证不同间Kubernetes可挂载相同的存储,并且里面是相同数据. 1. 环境 原来我的Kubernet

k8s实践17:kubernetes对接nfs存储实现pvc动态按需创建分配绑定pv

1.开始前的想法.前面测试pv&&pvc的部署和简单配置应用,实现pod应用数据存储到pvc并且和pod解耦的目的.前面操作是全手动操作,手动创建pv,手动创建pvc,如果集群pod少,这样操作可以.假如集群有1000个以上的pod,每个pod都需要使用pvc存储数据,如果只能手动去一个个创建pv,pvc,工作量不可想像.如果可以创建pod的时候,创建pod的用户定义pvc,然后集群能够根据用户的pvc需求创建pv,实现动态的pv&&pvc创建分配.kubernetes支持