在Kubernetes中,PVC通过绑定到PV来实现对存储卷的访问。PVC和PV的关系在Kubernetes中,PVC是Pod请求存储资源的抽象,而PV是实际的存储资源。 PVC通过请求某种类型和大小的存储资源来创建PV,从而将Pod与存储资源关联起来。PVC的定义将指定存储类型、存储大小和访问模式等信息。 绑定完成后,Kubernetes会将PVC的状态更新为Bound。此时,Pod可以使用PVC来访问存储卷。PVC绑定的限制在Kubernetes中,PVC绑定到PV有一些限制。 下面是一些限制:PVC可以只绑定到一个PV上。一个PVC只能访问一个PV的存储资源。PVC和PV必须在同一个命名空间中。PVC只能与PV的访问模式匹配。 如果PVC请求的存储容量大于PV的存储容量,则绑定失败。如果PV已经绑定到另一个PVC上,则绑定失败。
# PV、PVC PersistentVolume(持久卷) 和 PersistentVolumeClaim(持久卷申请) PersistentVolume (PV) 是外部存储系统中的一块存储空间,由管理员创建和维护 PersistentVolumeClaim (PVC) 是对 PV 的申请 (Claim)。PVC 通常由普通用户创建和维护。 需要为 Pod 分配存储资源时,用户可以创建一个 PVC,指明存储资源的容量大小和访问模式(比如只读)等信息,Kubernetes 会查找并提供满足条件的 PV # 1.什么是持久化?
二、Persistent Volume Claim(持久卷声明,PVC)2.1 PVC 概念Persistent Volume Claim(PVC)是用户对 PV 的请求。 2.2 PVC 特点动态绑定:PVC 和 PV 之间可以动态绑定,当 PVC 提交请求后,系统会自动寻找匹配的 PV 并绑定。 提交 PVC:用户提交 PVC,描述对存储资源的需求。绑定 PV 和 PVC:系统根据 PVC 的需求查找匹配的 PV 并进行绑定。 提交 PVC:用户提交 PVC,指定 StorageClass 和存储需求。动态创建 PV:系统根据 PVC 的需求和指定的 StorageClass 动态创建 PV。 绑定 PV 和 PVC:系统将创建的 PV 与 PVC 进行绑定。挂载 PV:Pod 使用 PVC,系统将绑定的 PV 挂载到 Pod 中。
PersistentVolumeClaim (PVC) 是用户存储的请求。它与 Pod 相似。Pod 消耗节点资源,PVC 消耗 PV 资源。Pod 可以请求特定级别的资源(CPU 和内存)。 绑定 master 中的控制环路监视新的 PVC,寻找匹配的 PV(如果可能),并将它们绑定在一起。如果为新的 PVC 动态调配 PV,则该环路将始终将该 PV 绑定到 PVC。 一旦 PV 和 PVC 绑定后, PersistentVolumeClaim 绑定是排他性的,不管它们是如何绑定的。 PVC 跟PV 绑定是一对一的映射。 二、持久化卷 持久化卷声明的保护 PVC 保护的目的是确保由 pod 正在使用的 PVC 不会从系统中移除,因为如果被移除的话可能会导致数据丢失 # 注意 :当 pod 状态为 “pending” 当启用PVC 保护 alpha 功能时,如果用户删除了一个 pod 正在使用的 PVC,则该 PVC 不会被立即删除。PVC 的删除将被推迟,直到 PVC 不再被任何 pod 使用。
执行命令创建 mypvc1: # kubectl apply -f pvc1.yml persistentvolumeclaim/yh-pvc created 查看pvc # kubectl get nfs 47m 6.5.4.在pod中使用持久卷声明 上面已经创建好了pv和pvc,pod中直接使用这个pvc即可 与使用普通 Volume 的格式类似, 如果不再需要使用 PV,可用删除 PVC 回收 PV。 6.5.5.回收持久卷 当 PV 不再需要时,可通过删除 PVC 回收。 未删除pvc之前 pv的状态是Bound 删除pvc之后pv的状态变为Available,,此时解除绑定后则可以被新的 PVC 申请。 首先创建 PV 和 PVC,配置如下: mysql-pv.yml mysql-pvc.yml 创建 mysql-pv 和 mysql-pvc: 接下来部署 MySQL,配置文件如下: PVC
此专栏是为了“补货”一些官网没有的操作文档,大家走过路过,可以留言告诉我,哪里写的不清不楚的地方,洒家给他整明白了、 在文档“PV 和 PVC 管理”中写道:TKE 控制台不支持 CBS 盘扩缩容 image.png 总体来说,PVC还是在存储数据方面还是比较方便的,那如果创建的PVC使用资源不足了呐? 演它一波 image.png 挂载PVC时后,登录容器内查看/dev/vdb使用率,已经100%,开始扩容、 注意:扩容文件系统操作不慎可能影响已有数据,因此强烈建议在操作前手动 创建快照 备份数据 那怎么给它扩容到PVC内呐? image.png 重点来了,拿好小本本 image.png 看到已经扩容了,直接通过命令:resize2fs /dev/vdb 调整分区大小会怎样?
requests: storage: 10Gi storageClassName: "" volumeMode: Filesystem volumeName: cbs-pv 删除PVC 和PV时候,对应的CBS盘不会回收删除3,动态创建pvc ,不指定pv,会自动创建pvapiVersion: v1kind: PersistentVolumeClaimmetadata: name: cbs-pvc namespace: defaultspec: accessModes: - ReadWriteOnce resources: requests: storage : Retain4,动态创建PVC,保留策略1)创建reclaimPolicy: Retain 类型的storgeclass 和PVCapiVersion: storage.k8s.io/v1kind: PV配置,删除spec.claimRef部分,对应PV可以和其他pvc绑定图片
推荐的 CBS PVC 扩容方式强烈建议使用 CBS-CSI 插件实现在线扩容云硬盘。 传统默认的 in-tree 方式扩容当使用 TKE 中的 cbs 这个默认 StorageClass 创建的 PVC(CBS 块存储),如果想要扩容量,该怎样操作呢? 操作方法操作方法可以参考下面附件中的说明:TKE 扩容 PVC 方法.pdf其他类型PVC假如是 CFS(文件存储) 或 COSFS(对象存储) 类型 PVC,对于用户来说无需手动扩容,因为这两种类型的存储不具有容量限制属性
而我们今天要说到的绝缘材质方面,也跟其有不小的关系: 铁氟龙线与PVC线的区别主要表现在绝缘层的区别 一:绝缘层厚度的不同 铁氟龙做成的电子线绝缘层会比pvc材质做成的电子线绝缘层较薄 65度环境,整机里面的温度也可达到80度以上,那么此时使用PVC先明显是不可的,因为外部绝缘层会迅速的老化,最终影响设备的工作状态。 三:耐燃不同 铁氟龙的耐燃性较好,不容易被点燃,而PVC线可被点燃。 举个例子:这大大影响了设备的安全使用。 PVC材质看起来会更暗沉,而铁氟龙更亮一些。 举个例子:通过此文得知外观不同后,有益于实际中去分别。 六:耐压性不同 铁氟龙能做到的耐压相对比PVC线差。 PVC线材: 铁氟龙线材:
PV和PVC的使用在使用PV和PVC时,我们需要将它们组合在一起。首先,我们需要创建一个PV,然后创建一个PVC来请求该PV。最后,我们可以将PVC挂载到Pod中。 server: nfs-server.default.svc.cluster.local---apiVersion: v1kind: PersistentVolumeClaimmetadata: name: pvc-examplespec mountPath: /data volumes: - name: volume-example persistentVolumeClaim: claimName: pvc-example 我们还创建了一个PVC对象,它请求1GB的存储容量,使用“ReadWriteOnce”访问模式,并使用“ssd”存储类别。 最后,我们创建了一个Pod对象,将“pvc-example”挂载到Pod的“/data”目录下。这样,Pod就可以使用PV提供的持久存储了。
Cloudera发布的Cloudera的数据平台(CDP)私有云基础版为用户提供了下一代混合云架构。这篇博文概述了设计和部署包含硬件和操作系统配置的集群的最佳实践,以及有关网络和安全以及与现有企业基础架构集成的指南。
这周遇到了两个因pvc无法attach导致pod一直没法正常启动的问题,这里记录一下解决的过程。 RBDImage: kubernetes-dynamic-pvc-0a5eb91b-3720-11e8-8d2b-000c29f8a512 ... 这里可以看到这个volume对应的rbd镜像是kubernetes-dynamic-pvc-0a5eb91b-3720-11e8-8d2b-000c29f8a512,rbd池是k8s。 而pvc又是ReadWriteOnce的访问模式,因此滚动更新时会产生多一个pod,而ReadWriteOnce的访问模式又不允许两个pod挂载同一个volume。 对应的pod与pvc是一一绑定的,在更新过程中不会产生多余的pod 总结 kuberentes里使用存储自有其逻辑,按照它的逻辑去分析问题,很多问题都可以迎刃而解。
在Kubernetes中,我们可以使用Persistent Volumes(PV)和Persistent Volume Claims(PVC)来解决这个问题。 Persistent Volume Claims (PVC)PVC是一个Kubernetes对象,它表示Pod对PV的请求。PVC可以请求特定大小、访问模式和存储类别的PV。 当Pod需要访问持久数据时,它会创建一个PVC对象,并请求一个符合要求的PV。如果没有可用的PV,PVC会保持等待状态,直到一个PV被创建或其他符合要求的PV被释放。 例如:apiVersion: v1kind: PersistentVolumeClaimmetadata: name: pvc-examplespec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi storageClassName: ssd在这个例子中,我们创建了一个名为“pvc-example”的PVC对象
包含详细的真实存储的信息供PVC使用。 Dynamic:当集群里没有PV符合PVC请求时,集群会尝试动态生成PV。前提是管理员提供过StorageClass资源并且PVC里有StorageClass的描述。 最合适的意思是PVC一定满足PV的要求,单也可能比PVC要求的要多,例如PVC请求5G存储,但当前最小的PV是10G,那么这个PV也会被分配给PVC。 注意一个PV只能绑定给一个PVC。 Using Pods把PVC当做Volume(类似于Docker的Volume)使用,下面会有例子介绍怎样在Pod中使用PVC。K8s会解析Pod,PV和PVC的联系,把PV中的存储挂载到Pod中。 Released – 被绑定的PVC被删除,可以被Reclaim Failed – 自动回收失败 PVC资源描述 每个PVC里包含一个spec和status,访问模式和请求的大小类似于PV。
CDP PvC Base 概览 什么是 CDP 私有云基础? CDP 私有云基础是Cloudera的本地(裸机)产品、企业数据中心(Enterprise Data Hub)和 HDP 企业的演变。 参考: https://docs.cloudera.com/cdp-private-cloud-base/latest/runtime-release-notes/topics/rt-pvc-runtime-component-versions.html
如果您是CDH或HDP用户,则除了从CDH和HDP版本转移到CDP的功能之外,还可以查看CDP私有云基础版中可用的新功能。
k8up 是一个基于 Restic 的备份工具,可以一次性的或者周期性的把指定的 PVC 备份到 S3 协议的对象存储上去,备份内容还可以使用 Restic 恢复到 S3 或者 PVC 上。 除了 PVC,后续还可以用命令的方式,例如 mysqldump,把数据库等内容备份出来。 created $ kubectl create secret generic backup --from-literal password=PassW0rd secret/backup created 备份 PVC k8up 会选择命名空间中注解为 appuio.ch/backup: "true" 的 PVC 进行备份,我们用下文的工作负载生成两个 PVC,运行起来之后,两个 PVC 分别挂载到容器的 /data1 新建一个 PVC 用作还原目标: kind: PersistentVolumeClaim apiVersion: v1 metadata: name: restore spec: accessModes
PVC则是用户对存储资源的一个“申请”,就像Pod消费Node资源一样,PVC能够消费PV资源。PVC可以申请特定的存储空间和访问模式。 PVC和PV都受限于Namespace,PVC在选择PV时受到Namespace的限制,只有相同Namespace中的PV才可能与PVC绑定。 此时要求PVC对存储的类型进行声明,系统将自动完成PV的创建及与PVC的绑定。PVC可以声明Class为"",说明该PVC禁止使用动态模式。 (2)资源绑定 在定义好PVC之后,系统将根据PVC对存储资源的要求(存储空间和访问模式)在已存在的PV中选择一个满足PVC要求的PV,一旦找到,就将该PV与定义的PVC进行绑定,应用就可以使用这个PVC 如果系统中没有这个PV,则PVC则会一直处理Pending状态,直到系统中有符合条件的PV。PV一旦绑定到PVC上,就会被PVC独占,不能再与其他PVC进行绑定。
到pod挂载卷成功时序图: 一、涉及组件解读 PV Controller:负责处理集群中的pvc/pv对象,对pvc/pv对象进行状态转换,并根据需求进行数据卷的 Provision/Delete 操作 PVC 类似于 Pod,Pod 消耗 Node 资源,PVC 消耗 PV 资源。 controller将pvc和pv绑定。 延迟绑定场景,kube-schedule 先不等待PVC和PV绑定,先预调度node,然后把预调度结果写到PVC注解中,pvc控制接获取到预调度az信息后,再完成pv创建和pv绑定。 所以,延迟绑定时延迟了pvc和pv绑定阶段。
PVC 的全称是:PersistentVolumeClaim(持久化卷声明),PVC 是用户存储的一种声明,PVC 和 Pod 比较类似,Pod 消耗的是节点,PVC 消耗的是 PV 资源,Pod 可以请求 CPU 和内存,而 PVC 可以请求特定的存储空间和访问模式。 对于真正使用存储的用户不需要关心底层的存储实现细节,只需要直接使用 PVC 即可。 状态 一个 PV 的生命周期中,可能会处于4中不同的阶段: Available(可用):表示可用状态,还未被任何 PVC 绑定 Bound(已绑定):表示 PV 已经被 PVC 绑定 Released( 已释放):PVC 被删除,但是资源还未被集群重新声明 Failed(失败):表示该 PV 的自动回收失败 PVC 创建不带标签的 [root@master101 pv]# cat pvc-nfs.yaml