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
Kubernetes Pv & Pvc的更多相关文章
- Kubernetes PV/PVC使用实践
转载于https://www.cnblogs.com/ericnie/p/7733281.html pv,pvc的概念不解释了,之前在registry中已经使用过PV和PVC,现在想把WebLog ...
- [Kubernetes]PV,PVC,StorageClass之间的关系详解
在Kubernetes中,容器化一个应用比较麻烦的地方莫过于对其"状态"的管理,而最常见的"状态",莫过于存储状态. 在[Kubernetes]深入理解Stat ...
- Kubernetes 学习13 kubernetes pv pvc configmap 和secret
一.概述 1.我们在pvc申请的时候未必就有现成的pv能正好符合这个pvc在申请中指定的条件,毕竟上一次的成功是我们有意设定了有一些满足有一些不满足的前提下我们成功创建了一个pvc并且被pod绑定所使 ...
- kubernetes Value:将磁盘挂载到容器,PV,PVC
6.1.介绍卷 6.1.1.卷的类型 emptyDir-用于存储临时数据的简单空目录 hostPath-用于将目录从工作节点的文件系统挂载到pod nfs-挂载到pod中的NFS共享卷. 还有其他的如 ...
- Kubernetes PV与PVC的关系
Kubernetes PV与PVC的关系 PersistenVolume(PV):对存储资源创建和使用的抽象,使得存储作为集群中的资源管理,分为有静态与动态.PersistentVolumeClaim ...
- Kubernetes 存储卷管理 PV&PVC(十)
目录 一.emptyDir 二.hostPath 三.PV & PVC 1.NFS PersistentVolume 2.创建 PVC 3.创建 Pod 进行挂载 为了持久化保存容器的数据,可 ...
- Serverless Kubernetes全面升级2.0架构:支持多命名空间、RBAC、CRD、PV/PVC等功能
Serverless Kubernetes概述: 阿里云Serverless Kubernetes容器服务最新开放香港.新加坡.悉尼区域,同时全面开放2.0架构,帮助用户更加便捷.轻松地步入“以应用为 ...
- Kubernetes 存储系统 Storage 介绍:PV,PVC,SC
要求:先了解数据docker容器中数据卷的挂载等知识 参考网址: https://www.cnblogs.com/sanduzxcvbnm/p/13176938.html https://www.cn ...
- k8s存储 pv pvc ,storageclass
1. pv pvc 现在测试 glusterfs nfs 可读可写, 多个pod绑定到同一个pvc上,可读可写. 2. storageclass 分成两种 (1) 建立pvc, 相当于多个 ...
随机推荐
- Leetcode——258.各位相加【水题】
给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数. 示例: 输入: 38 输出: 2 解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2. 由于 2 是一位数,所 ...
- 第三个sprint冲刺第三阶段
公测版:
- 09-java学习-数组-冒泡排序-选择排序-数组工具类编写-查找-扩容
数组的排序算法 查找算法 数组协助类Arrays的学习和使用 数组的扩容
- Maven相关问题解决.docx
1. 问题 2. 原因 出现.lastUpdated结尾的文件的原因:由于网络原因没有将Maven的依赖下载完整,导致. 解决方案: 1.删除所有以.lastUpdate结尾的文件 a)1.切换到ma ...
- 文本文件合并(C++实现)
直接附上代码吧 #include<iostream> #include<fstream> #include<cstdlib> using namespace std ...
- 【转帖】intel 2018年1 月2号爆出漏洞分析 知乎匿名用户
作者:匿名用户链接:https://www.zhihu.com/question/265012502/answer/288407097来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...
- centos 7 修改系统屏幕分辨率
centos 7 修改系统屏幕分辨率,命令方式和图形方式的修改方法. 命令:xrandr 通过命令 xrandr 修改系统的分辨率,输入xrandr: bash [admin@localhost ~] ...
- python学习笔记四——循环及冒泡排序
3.3.3 break 和 continue语句 break:跳出整个循环 continue:跳出当前循环继续后面的循环 例: x=int(input("please input the ' ...
- Lodop代码设置打印机等信息后 设置预览可重选
Lodop打印控件默认在代码里指定了打印.纸张.纸张方向.份数等信息,在预览的界面的设置里是无法重新选择的,默认是禁止重选的,如果重选会提示,例如:“打印方向”已由程序控制,无法改变!“纸张大小”已由 ...
- SpringBoot+MyBatis多数据源使用分页插件PageHelper
之前只用过单数据源下的分页插件,而且几乎不用配置.一个静态方法就能搞定. PageHelper.startPage(pageNum, pageSize); 后来使用了多数据源(不同的数据库),Page ...