一 持久卷以及持久卷声明的由来

  由于不管是哪种卷,开发者都需要提前预知kubernets集群里面的存储类型,这样就在一定程度上违背了kubernets集群的设计理念,kubernets的设计理念是在由开发者任意使用集群的

资源的基础下,又不需要关注集群的底部的基础设施,甚至可以在各个集群下面任意迁移资源,基于这些kubernets提出了2个新的资源,持久卷(pv)以及pvc(持久卷声明),研发人员无须向它们的

pod中添加特定技术的卷,而是由k8s集群管理员设置底层存储,然后通过k8sapi创建持久卷并进行注册,在创建持久卷的时候,管理员指定卷的大小以及访问模式,当研发人员需要使用持久化存储的

时候,只需要向api服务器发起申请并指定卷的大小以及访问模式,之后由kubernets的api服务器匹配卷并进行相绑定它们之间的关系以及作用如下面图所示

  • 管理员创建 某个类型的网络存储
  • 然后管理员通过向k8s的api服务器传递pv申明来创建持久
  • 研发人员根据自己的业务需求向k8s的api发起pvc匹配系统中的pv申请
  • 之后k8s集群api匹配到满足的pv和,将pv和研发人员的pvc进行绑定
  • 研发人员就可以使用这个持久化存储

二 进行相关的资源创建演示

  2.1  第一步需要创建持久卷 

apiVersion: v1
kind: PersistentVolume
metadata:
name: ex-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
- ReadOnlyMany
persistentVolumeReclaimPolicy: Retain
gcePersistentDisk:
pdName: ex-pv
fsType: ext4
  • capation定义的是pv的大小
  • accessmodes的意思是可以被单个客户端挂载为读写模式或者被多个客户端挂载为只读模式
  • persistentVolumeReclaimPolicy: Retain的意思是当声明被释放时候的pv的策略为被保留(不清理和删除)
  • gcePersistentDisk指定之前创建的GCE持久磁盘

  

  2.2  说明一点持久卷不属于任何一个命名空间,它和node一样属于系统资源

  • 由图可知,存储卷声明是用户创建属于某个命名空间
  • 存储卷它是独立于任何一个命名空间的一种资源,不属于任何命名空间

  2.3  接下来我们来创建一个持久卷声明

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: ex-pvc
spec:
resources:
requests:
storage: 1Gi
accessModes:
- ReadWriteOnce
storageClassName: ""
  • resource下面的数据表明存储卷声明的大小
  • accessModes 表示存储卷声明需要的访问模式

  

  2.4  当创建好这个声明之后,k8s会找到合适持久化的卷将其绑定到这个pvc,持久化的卷容量必须满足持久卷声明的容量大小,并且支持pvc的访问模式

由于这个pvc的条件前面创建的都满足,所以系统会将这个pvc绑定到pv上面来,下面列举出pv以及pvc常见的几种访问模式

  • RWO——ReadWriteOnly——仅允许单个节点挂载读写
  • ROX——ReadOnlyMany——允许多个节点挂载读写
  • RWX——ReadWriteMany——允许多个节点挂载读写

  2.5 创建一个pod来引用pvc从而对pod中的数据进行持久化存储到pv中

apiVersion: v1
kind: pod
metadata:
name: ex-pod-pvc
spec:
containers:
- image: mongo
name: mongodb
volumeMounts:
- name: mongodb-data
mouthPath: /data/db
ports:
- containerPort: 27017
protocol: TCP
volumes:
- name: mongodb-data
persistentVolumeClaim:
claimName: mongodb-pvc
  • 一点声明,pod中是通过引用pvc来引用与pvc绑定的pv
  • 需要注意的是,pvc不是在pod中创建而随之创建,而是pod创建完成之后对其进行引用

 

  2.5 了解使用pv以及pvc的好处

  • 从图中可以看出,如果直接用pod来关联持久卷反而更简单点
  • 但是中间加了个持久卷声明之后,研发人员将不在需要关注底层实际的存储技术
  • 换言之,研发人员只需要根据pod需要的存储大小以及访问模式来引用声明
  • 还有个好处是,甚至一份pod可以在很多的不同的底层存储的应用

  2.6 了解pv的回收机制

  2.6.1 手动回收持久卷

  根据上面我们创建的pv,pvc以及pod将它们进行关联,但是我们在删除pod,以及pvc之后,pv的状态将会如何,聪明的你应该会

会想起我们对pv的回收策略设置的为Retain,该种策略下,当与其绑定的pvc被删除之后,该pv无法被其他能够与之匹配的pvc引用,如果需要重新利用

那么唯一的办法是删除和重新创建持久化资源,如果这么操作的话,你还必须考虑一个问题是,如何处理底层存储的文件

  

  2.6.2 自动回收持久卷

  当然除了我们已经用到的回收策略Retain之外,还有Recycle和Delete的回收策略

  • Recycle——删除卷的内容并可以使其再次用于绑定其他声明
  • Delete——彻底删除底层存储
  • 注意一点的是:是否能够使用这些策略,需要看底层存储类型是否支持

  

kubernets之pv以及pvc的更多相关文章

  1. MySQL 如何使用 PV 和 PVC?- 每天5分钟玩转 Docker 容器技术(154)

    本节演示如何为 MySQL 数据库提供持久化存储,步骤为: 创建 PV 和 PVC. 部署 MySQL. 向 MySQL 添加数据. 模拟节点宕机故障,Kubernetes 将 MySQL 自动迁移到 ...

  2. kubernetes系列11—PV和PVC详解

    本文收录在容器技术学习系列文章总目录 1.认识PV/PVC/StorageClass 1.1 介绍 管理存储是管理计算的一个明显问题.该PersistentVolume子系统为用户和管理员提供了一个A ...

  3. K8s存储卷、pv和pvc的使用

    emptyDIR 临时目录 hostPath :使用主机的路径 网络存储: 传统的设备存储:NAS,SAN 分布式存储:glusterfs,rbd,cephfs 云存储:EBS,Azure,阿里云的 ...

  4. PV、PVC和Storeclass等官方内容翻译

    k8s1.13版本 PV apiVersion: v1 kind: PersistentVolume metadata: name: filesystem-pvc spec: capacity: #未 ...

  5. K8S 使用NFS 创建PV和PVC的例子 学习From https://blog.csdn.net/xts_huangxin/article/details/51494472

    1. 获取资料 网址: https://blog.csdn.net/xts_huangxin/article/details/51494472  感谢原作者 这里面 按照自己的机器情况进行了学习模仿 ...

  6. pv和pvc状态

    原文地址:https://kubernetes.cn/topics/46 API Server 和 PVController API Server: 这个组件提供对API的支持,响应REST操作,验证 ...

  7. Kubernetes 中的pv和pvc

    原文地址:http://www.cnblogs.com/leidaxia/p/6485646.html 持久卷 PersistentVolumes 本文描述了 Kubernetes 中的 Persis ...

  8. k8s的pv和pvc简述

    pvc:资源需要指定:1.accessMode:访问模型:对象列表:    ReadWriteOnce – the volume can be mounted as read-write by a s ...

  9. PV、PVC、StorageClass讲解

    PV.PVC.StorageClass讲解 为了方便开发人员更加容易的使用存储才出现的概念.通常我们在一个POD中定义使用存储是这样的方式,我们以hostpath类型来说: apiVersion: v ...

随机推荐

  1. 基于menu小插件探索工程实践

    目录 一.准备工作 1.C/C++环境搭建 2.VSCode的配置 (1) 安装插件: (2) 设置配置文件: 二.工程化编程实战 1.模块化设计 2.可重用设计:进一步抽象 menu的进一步优化 可 ...

  2. SpringBoot + SpringSecurity + Mybatis-Plus + JWT + Redis 实现分布式系统认证和授权(刷新Token和Token黑名单)

    1. 前提   本文在基于SpringBoot整合SpringSecurity实现JWT的前提中添加刷新Token以及添加Token黑名单.在浏览之前,请查看博客:   SpringBoot + Sp ...

  3. django DRF理解

    django restframework(DRF) 最近的开发过程当中,发现restframework的功能很强大,所以尝试解读了一下源码,写篇博客分享给大家,有错误的地方还请各位多多指出 视图部分 ...

  4. P2240 【深基12.例1】部分背包问题

    P2240 [深基12.例1]部分背包问题 题目描述 阿里巴巴走进了装满宝藏的藏宝洞.藏宝洞里面有 N(N \le 100)N(N≤100) 堆金币,第 ii 堆金币的总重量和总价值分别是 m_i,v ...

  5. Mysql技术内幕之InnoDB锁探究

    自7月份换工作以来,期间一直在学习MySQL的相关知识,听了一些视频课,但是一直好奇那些讲师的知识是从哪里学习的.于是想着从书籍中找答案.毕竟一直 看视频也不是办法,不能形成自己的知识.于是想着看书汲 ...

  6. 利用设计模式消除业务代码中的 if-else

    准备工作:假设这样的一个业务场景:有一个自动开票的功能需要实现,在程序里面需要根据账单的类型执行对应的处理逻辑. 以下使用了 Lombok 简化代码!!! 账单类型枚举: /** * @author ...

  7. MySQL在Windows下压缩包方式安装与卸载

    一.MySQL的卸载: 1.停止MySQL服务 2.移除MySQL 二.安装: 1.官网下载压缩版 https://downloads.mysql.com/archives/community/ 2. ...

  8. 类818tu.c微信小说分销系统设计之定时模板消息源码

    近期将出个系列讲解开发过程,同时作为此系统的开发记录吧,万能的博客园,本边讲解如何发送模板消息,并且能够定时发送,下一篇讲解如何处理多个公众号的网页授权登录问题 [后台]http://xiaoshuo ...

  9. 关于yaml文件格式和bootstrap文件

    yaml文件格式简洁层次分明 语法规则如下 大小写敏感 使用缩进表示层次关系 在缩进时不允许使用tab键,只允许使用空格 缩进的空格不重要,只要相同层级的元素左侧对齐即可(相同缩进为同一级) serv ...

  10. .net core 和 WPF 开发升讯威在线客服与营销系统:(插曲)一次端口攻击行为的分析与应对

    本系列文章详细介绍使用 .net core 和 WPF 开发 升讯威在线客服与营销系统 的过程.本产品已经成熟稳定并投入商用. 在线演示环境:https://kf.shengxunwei.com 注意 ...