首页 > 其他分享 >k8s之PV、PVC

k8s之PV、PVC

时间:2023-09-05 19:23:34浏览次数:33  
标签:存储 PV 用户 PVC 集群 管理员 k8s

1. 前言

在k8s中,管理存储一直就是管理计算实例的问题。PersistentVolume系统为用户和集群管理人员提供了两个API,这两个API为用户屏蔽了底层存储的细节。这两个API对象就是PersistentVolume和PersistentVolumeClaim。

2. 介绍

PV是集群中的存储资源,由管理员提供或者通过 storage class 动态提供。PV是集群中的资源,就像集群中的node资源对象一样。PV的生命周期与使用PV的pod的生命周期没有任何关系。PV的实际存储可能是在NFS、iSCSI或者其他云存储系统中,它为用户屏蔽了实现存储的具体细节而对外抽象存储资源。

PVC是用户对于存储资源的请求。PVC和集群中的pod相似,pod消费node中的资源(cpu、memory等),而PVC则是消费PV中的资源。Pod可以指定特定数量的资源(cpu和内存),而PVC则可以请求指定大小的存储空间以及读写模式。

尽管PVC允许用户消费存储资源,但是用户通常需要多种属性的PV。因此,集群管理员需要在提供不同存储空间和读写模式的PV的同时为用户屏蔽实现细节。由于用户的需求多种多样,静态配置的PV难以满足用户的需求,因此就需要storge class根据用户的需求动态生成PV。

下面此图比较清晰的展示了PV和PVC的概念与关系

  • PV的具体存储由底层的NFS、CIFS、云存储集群等提供,数据均存储在这里。
  • 底层存储的具体实现细节会被管理员屏蔽,从而被抽象成为多个PV。这些PV有不同的属性,如存储空间大小不同、读写模式不同等属性
  • PV是管理员配置好的具有不同存储空间和读写权限的存储类型资源对象。就像是集群中的node资源一样,是待消费的资源。
  • PVC是用户对于存储类型资源的请求,是用户对于存储资源的需求
  • 当PVC创建后,k8s会从PV中选择一个和PVC进行匹配,用作此PVC的存储。

2. 生命周期

PV是k8s中集群中的资源;而PVC则是用户对于这些资源的请求。PV和PVC之间的关系如下图所示。

3. 动态和静态创建方式

Provisioning

有两种准备PV资源的方式:静态创建和动态创建

静态创建

集群管理员创建一系列PV,集群管理员需要负责这些PV的具体实现细节。这些创建的PV会存在于kubernetes集群中,就像是集群中的node资源一样,并且可以被PVC来消费。这里给出静态PV的资源清单并对重要的字段进行解释。

静态创建PV时主要包含以下三个步骤

  • 由集群管理员根据存储配置预分配PV对象;
  • 用户根据实际需求创建PVC对象。当用户创建PVC对象之后,集群会为PVC对象匹配合适的PV并进行绑定。将PV和PVC对象进行绑定后,PVC就可以作为存储资源来使用;
  • 用户将PVC作为存储对象挂载到Pod中进行使用。

 

 

动态创建

由于用户对于存储的需求多种多样,管理员维护的静态PV可能不能够完全匹配用户的PVC需求。此时,kubernetes集群可以尝试为PVC动态创建存储。动态存储依赖于storage class : 首先,需要管理员必须已经创建和设置了这个storage class以便于应对动态创建PV的情况,其次PVC必须请求这个storage class。而PVC中请求storage class的字段为空,就会使PVC失去动态请求storage class的能力。

为了开启PVC基于storage class来动态申请存储的功能,集群管理员需要在API server中开启 DefaultStorageClasss控制器。

动态创建过程主要包含如下三个步骤:

  • 集群管理员不再预分配PV对象,而是创建模板文件Storage Class。此模板文件是后面PVC对象申请存储资源时创建资源PV的模板;
  • 用户基于存储需求创建PVC对象,并在PVC的资源清单中指定创建存储的Storage Class名称。在提交完 PVC之后,K8s 集群中的相关组件就会根据 PVC 以及清单中对应的 StorageClass 动态生成 PV对象,并将PV和PVC 进行绑定;
  • 用户将PVC作为存储对象挂载到Pod中进行使用。

 

Binding

在k8s集群中,当请求指定存储空间和权限模式的PVC被创建之后,master中的控制循环(control loop)会基于list-watch机制监听到新创建的PVC,并且尽可能匹配对应的PV,如果匹配不到,就会基于定义来去确定是否动态创建PV以满足PVC,然后这个控制循环会将PV和PVC绑定在一起。用户得到的存储空间至少是用户申请的空间大小,也可能得到比他们申请的更多的空间

如果匹配不到对应的PV,PVC就会一直保持为未绑定,只有当PVC和PV绑定之后才可用。例如:集群提供了很多的50G的PV,那么申请100G的PVC就不会被绑定至PV。只有当集群中新增了100G的PV,PVC才会被绑定。

Using

pod将PVC作为存储来使用。

标签:存储,PV,用户,PVC,集群,管理员,k8s
From: https://www.cnblogs.com/gaoyanbing/p/17680592.html

相关文章

  • ipv4+ipv6+端口号正则表达式,最极限的各种搭配组合
    Ipv4^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$Ipv6^([\da-fA-F]{1,4}:){6}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^::([\da-fA-F]{1,4}:){0,4}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25......
  • k8s Pod 干扰
    Pod优先级与抢占Pod可以有优先级。优先级表示一个Pod相对于其他Pod的重要性。如果一个Pod无法被调度,调度器会将该Pod转入Pending状态并为其启动“抢占”过程,调度器会在集群中尝试通过删除某节点上的一个或多个低优先级的Pod,让节点能够满足待调度Pod的运行条件,并将待调度......
  • K8S阿里云版本(ACK)
    K8S阿里云版本(ACK)试用体验:点击免费试用:选择“个人版”   ......
  • k8s之Taint 与 Toleration (污点与容忍)
    背景介绍:在生产k8s集群环境中,业务的pod数量很多,首先要满足的就是所有pod能够负载均衡的分配到集群中的各个节点,其次就是每台服务器的硬件配置可能不同,特定的业务服务需要运行到特定的node上(比如依赖GPU,业务服务所依赖的高/低硬件配置)而为了达到用户所期望的服务调度,我们可以用到污......
  • 在线找 K8s 学习搭子,急!
    如果说传统云计算时期的操作系统是Linux,那云原生时代的操作系统就是K8s,其重要性不言而喻。学好K8s,能够帮助开发者更好地掌握云时代的重要趋势。然而,很多开发者一想到K8s较高的上手门槛和学习成本,往往望而生畏,一直缺少机会和动力真正上手。如果你也一直想解决这个问题,从而快......
  • kubernetes(K8s)快速入门
    ......
  • 前端面试题(文本与语音播放mpv3),上传喜马拉雅,便于随身听
    喜马拉雅播放地址(简介可看相关文字):https://www.ximalaya.com/album/77822188线上可下载文本与MP3文件:https://gitee.com/yoonaLin/FE_Interview_questions......
  • 手把手教你在虚拟机中部署K8S集群二
    我们在:  手把手教你在虚拟机中部署Kubernetes集群(K8S)_ZeroMaster的博客知道基本的部署方式,但是上面还是有一些问题,比如一些服务启动有问题。下面有一个更详细的方式。实测可用。一、环境规划Kubernetes集群大致分为两类:一主多从和多主多从。(1)一主多从(单master):一个Master节......
  • k8s安装etcd出现Job for etcd.service failed......"journalctl -xe" for details.
    错误如下先按照提示,输入journalctl-xe看一些详细信息1、针对:startrequestrepeatedtooquicklyforetcd.service错误,解决办法如下vi/usr/lib/systemd/system/etcd.service在[service]部分添加:RestartSec=5(参数作用:如果服务需要被重启,这个参数的值为服务被重启前的......
  • k8s 说一下deployment,statefulset,daemonset 的区别
    鱼弦:全栈领域创作新星创作者、51CTO(Top红人+专家博主)、github开源爱好者(go-zero源码二次开发、游戏后端架构https://github.com/Peakchen)在Kubernetes(K8s)中,Deployment、StatefulSet和DaemonSet是三种常用的控制器对象,用于管理应用程序的部署和运行。它们在不同的场景下有不同......