K8S-PV和PVC的实践
一、什么是PV和PVC?
PV的全称是Persistent Volume,翻译过来为持久化存储卷,是对底层的共享存储的一种抽象,PV由管理员进行创建和配置,主要含存储能力、访问模式、存储类型、回收策略、后端存储类型等主要信息,它和具体的底层的共享存储技术的实现方式有关,比如NFS、Hostpath、RBD等。
PVC的全称是: PersistenVolumeClaim (持久化卷声明),PVC是用户存储的一种声明,PVC和Pod类似,Pod是消耗节点node资源,PVC消耗的是PV资源,Pod可以请求CPU的内存,而PVC可以请求特定的存储空间和访问模式。
二、PV和PVC的使用场景
配图来自K8S权威指南第四版
存储工程师把分布式存储系统上的总空间划分成一个一个小的存储块,K8S的集群管理员将存储块和PV进行一一对应,用户通过PVC对对存储进行申请,比如可以指定具体容量的大小,访问模式或者存储类型,这样的好处是用户不需要关心底层的存储实现细节,只需要直接申请使用PVC即可,若申请的PVC所对应的PV不能满足用户的要求,不会生效,直到有合适的PV生成,PVC会自动与PV完成绑定,存储工程师、K8S管理员,用户之间业务解耦,灵活性更强。
三、创建PV
PV支持多种不同类型的存储,如:NFS、hostpath、RBD、ICCSI,本文以hostpath为例介绍如何创建PV
第一步:现在宿主机data目录下data/pod/volume1,volume1将作为PV对应的hostpath本地存储的目录
第二步:通过yaml文件创建PV
[root@k8s-master zhanglei]# cat pv-hostpath.yaml
kind: PersistentVolume #指定为PV类型
apiVersion: v1
metadata:
name: pv-statefulset #指定PV的名称
labels: #指定PV的标签
release: stable
spec:
capacity:
storage: .1Gi #指定PV的容量
accessModes:
- ReadWriteOnce #指定PV的访问模式,简写为RWO,只支持挂在1个Pod的读和写
persistentVolumeReclaimPolicy: Recycle #指定PV的回收策略,Recycle表示支持回收,回收完成后支持再次利用
hostPath: #指定PV的存储类型,本文是以hostpath为例
path: /data/pod/volume1 #指定PV对应后端存储hostpath的目录
说明:
accessModes支持多种访问模式
1)ReadWriteOnce(RWO):读写权限,但是只支持挂载在1个Pod
2)ReadOnlyMany(ROX):只读权限,支持挂载在多个Pod
3)ReadWriteMany(RW):读写权限,支持挂载在多个Pod上
persistentVolumeReclaimPolicy的策略,指的是如果PVC被释放掉后,PV的处理,这里所说的释放,指的是用户删除PVC后,与PVC对应的PV会被释放掉,PVC个PV是一一对应的关系
1)Retain,PV的数据不会清理,会保留volume,如果需要清理,需要手动进行
2)Recycle,会将数据进行清理,即 rm -rf /thevolume/*(只有 NFS 和 HostPath 支持),清理完成后,PV会呈available状态,支持再次的bound
3)Delete,删除存储资源,会删除PV及后端的存储资源,比如删除 AWS EBS 卷(只有 AWS EBS, GCE PD, Azure Disk 和 Cinder 支持)
四、创建PVC
[root@k8s-master zhanglei]# cat pvc-hostpath.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mppvc-01 # 指定PVC的名称
namespace: default
spec:
accessModes: ["ReadWriteOnce"] # 指定PVC的访问模式
resources:
requests:
storage: .05Gi # PVC申请的容量
说明:
1)PVC声明了accessModes访问类型为ReadWriteOnce,创建后,系统会自动去找能够支持ReadWriteOnce访问类型的PV,若无符合条件的PV,则不会进行绑定,
2)PVC声明了storage的大小为0.05Gi,创建后,系统会自动去找能够支持此容量的PV,通常PV的容量至少要大于或者等于0.05Gi才会去进行绑定
从这里来看,对于用户来说,即只需要声明访问类型、容量、另外还可通过StorageClass声明具体的PV类型即可完成对持久化存储卷的申请,而不需要去维护和关注后端存储
五、查询PV和PVC的
经过前面的步骤我们创建了PV和PVC,现在来看下两者是否已经完成了绑定,在PV的创建已经指定了其名称为pv-statefulset,PVC的名称为mppvc-01
[root@k8s-master zhanglei]# kubectl get pv |grep pv-statefulset
pv-statefulset 107374182400m RWO Recycle Bound default/mppvc-
[root@k8s-master zhanglei]# kubectl get pvc |grep mppvc-
mppvc- Bound pv-statefulset 107374182400m RWO 13d
可以看到pv-statefulset这个PV已经和mppvc-01的PVC进行了绑定(Bound),RWO和Recycle也是之前PV和PVC声明的状态,说明绑定成功
[root@k8s-master zhanglei]# kubectl describe pv pv-statefulset
Name: pv-statefulset
Labels: release=stable
Annotations: pv.kubernetes.io/bound-by-controller: yes
Finalizers: [kubernetes.io/pv-protection]
StorageClass:
Status: Bound
Claim: default/mppvc-
Reclaim Policy: Recycle
Access Modes: RWO
VolumeMode: Filesystem
Capacity: 107374182400m
Node Affinity: <none>
Message:
Source:
Type: HostPath (bare host directory volume)
Path: /data/pod/volume1
HostPathType:
Events: <none>
[root@k8s-master zhanglei]# kubectl describe pvc mppvc-
Name: mppvc-
Namespace: default
StorageClass:
Status: Bound
Volume: pv-statefulset
Labels: <none>
Annotations: pv.kubernetes.io/bind-completed: yes
pv.kubernetes.io/bound-by-controller: yes
Finalizers: [kubernetes.io/pvc-protection]
Capacity: 107374182400m
Access Modes: RWO
VolumeMode: Filesystem
Mounted By: <none>
Events: <none>
再来看下PV的详细(describe)信息,可以看到type是hostpath类型,且会显示在数据卷在宿主机的/data/pod/volume1的目录下。
六、总结
创建PV个PVC分为二步:
第一步:创建PV,支持自定义不同的存储大小和访问模式(RWX,RWO)、存放路径、后端服务server(如hostpath、或NAS盘的数据盘的挂载点)
第二步:创建PVC,绑定到PV。创建PVC的时候可以指定PVC的request storage,即申请的存储的容量,会根据申请的storage和访问模式自动匹配符合要求的PV
创建完PV和PVC主要是为了使用它来达到实现持久化存储的目的,如何进行使用请看与statufulset有关的文章,谢谢阅读~
K8S-PV和PVC的实践的更多相关文章
- 【k8s】k8s pv、pvc无法删除问题。
一般删除步骤为:先删除pod再删除pvc最后删除pv 遇到的问题 但是遇到pv使用处于"Terminating"状态,而且删不掉.如下图: 解决办法 直接删除k8s中的记录: ku ...
- K8s PV and PVC and StorageClass
PVC和PV之间没有依靠ID.名称或者label匹配,而是靠容量和访问模式,PVC的容量和访问模式需要是某个PV的子集才能自动匹配上.注意:PVC和PV是一对一的,也即一个PV被一个PVC自动匹配后, ...
- K8S 使用NFS 创建PV和PVC的例子 学习From https://blog.csdn.net/xts_huangxin/article/details/51494472
1. 获取资料 网址: https://blog.csdn.net/xts_huangxin/article/details/51494472 感谢原作者 这里面 按照自己的机器情况进行了学习模仿 ...
- Kubernetes PV/PVC使用实践
转载于https://www.cnblogs.com/ericnie/p/7733281.html pv,pvc的概念不解释了,之前在registry中已经使用过PV和PVC,现在想把WebLog ...
- k8s的pv和pvc简述
pvc:资源需要指定:1.accessMode:访问模型:对象列表: ReadWriteOnce – the volume can be mounted as read-write by a s ...
- 容器编排系统K8s之PV、PVC、SC资源
前文我们聊到了k8s中给Pod添加存储卷相关话题,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14180752.html:今天我们来聊一下持久存储卷相关话题 ...
- 4.k8s存储之Volume、PV、PVC和StatefulSet
3.Volume 容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题.首先,当容器崩溃时,kubelet 会重启它,但是容器中的文件将丢失--容器以干净的状态(镜像最初的 ...
- k8s之PV、PVC、StorageClass详解
导读 上一篇写了共享存储的概述以及一个简单的案例演示.这一篇就写一下PV和PVC. PV是对底层网络共享存储的抽象,将共享存储定义为一种"资源",比如Node也是容器应用可以消费的 ...
- 7.2 k8s 基于PV、PVC搭建zookeeper 3节点集群
1.PV,PVC介绍 1.1.StorageClass & PV & PVC关系图 Volumes 是最基础的存储抽象,其支持多种类型,包括本地存储.NFS.FC以及众多的云存储,我们 ...
- k8s之PV、PVC
目录 一.PVC和PV 1.1 PV概念 1.2 PVC概念 1.3 PV与PVC之间的关系 1.4 两种PV的提供方式 二.基于nfs创建静态PV资源和PVC资源 2.1 配置nfs存储(192.1 ...
随机推荐
- 黑马程序员_毕向东_Java基础视频教程——位运算练习(随笔)
位运算(练习) 最有效率的方式算出 2乘以 8等于几 2 << 3 = 2 * 2^3 = 2 * 8 = 16 对于两个整数变量的值进行互换(不需要第三方变量) class Test { ...
- mysql基础1:yum安装mysql
1.下载yum源并安装http://dev.mysql.com/downloads/repo/yum/.wget https://dev.mysql.com/get/mysql57-community ...
- 存储系列之 LUN 和 LVM
一.LUN 1.LUN的由来 上一篇文章已经介绍了RAID技术的原理,那么RAID的实现呢?有两种方式,RAID软件和RAID硬件.但是因软件RAID占用主机CPU和主机内存,而且RAID功能不易实现 ...
- Spring Beans 自动装配 简介
Beans 自动装配 Spring 容器可以在不使用<constructor-arg>和<property> 元素的情况下自动装配相互协作的 bean 之间的关系,这有助于减少 ...
- layui 让弹窗始终居中于屏幕
前话:今天用 layer.confirm() 弹窗的时候,滚动到页面尾部再弹窗时,发现弹窗还显示在上面,要滚动会上面才能看到. 度娘找了一个获取滚动条位置的方法: function ScollPos ...
- LoadBalancer在kubernetes架构下的实践
Backgound 借助于kubernetes优秀的弹性扩缩功能,运行其中的应用程序能够在流量突增的时候坦然应对,在流量低谷的时候无需担心成本.但于此同时,也带来了极大的挑战: 弹性扩缩导致容器IP动 ...
- JS最通俗易懂简易轮播实现
轮播图作为前端比较简易的动画,使用非常频繁,这里记录以便使用 此轮播图为最简易自动播放,非无缝,无按钮,无缩略图和序号 想看全套轮播图可以查看我的分类轮播图全套 html 布局 <div sty ...
- 「持续集成实践系列」Jenkins 2.x 搭建CI需要掌握的硬核要点
1. 前言 随着互联网软件行业快速发展,为了抢占市场先机,企业不得不持续提高软件的交付效率.特别是现在国内越来越多企业已经在逐步引入DevOps研发模式的变迁,在这些背景催促之下,对于企业研发团队所需 ...
- 8分钟为你详解React、Angular、Vue三大前端技术
[引言] 当前世界中,技术发展非常迅速并且变化迅速,开发者需要更多的开发工具来解决不同的问题.本文就对于当下主流的前端开发技术React.Vue.Angular这三个框架做个相对详尽的探究,目的是为了 ...
- 微信小程序订阅
微信小程序订阅 摘要 1.基于promise封装微信小程序订阅 2.解决由于微信基础库版本低下的兼容 3.解决“总是保持以上选择,不再询问”的取消状态 主要运用API: requestSubscrib ...