kubetnetes 之存储 PV PVC
来源:互联网 发布:rhino5.0 mac 编辑:程序博客网 时间:2024/04/28 08:42
概述
k8s最初用于管理无状态的服务,单随着越来越多的应用迁移的k8s平台,管理存储资源成为一个非常重要的功能。
k8s使用两种资源管理存储:
PersistentVolume(一些简称PV):由管理员添加的的一个存储的描述,是一个全局资源,包含存储的类型,存储的大小和访问模式等。它的生命周期独立于Pod,例如当使用它的Pod销毁时对PV没有影响。
PersistentVolumeClaim(一些简称PVC):是Namespace里的资源,描述对PV的一个请求。请求信息包含存储大小,访问模式等。
PV 和 PVC生命周期
PV是k8s集群里的存储,PVC会使用PV,它们的生命周期概况如下:
Provisioning
PV可以通过两种方式提供:
Static:管理员在集群里创建PV资源,每个PV包含详细的真实存储的信息供PVC使用。
Dynamic:当集群里没有PV符合PVC请求时,集群会尝试动态生成PV。前提是管理员提供过StorageClass资源并且PVC里有StorageClass的描述。
Binding
当集群中新添加一个PVC时,k8s里的PVController(下一篇文章介绍)会试图查找最合适(存储大小和访问模式)的PV并建立绑定关系。 最合适的意思是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中。
Releasing
当用户使用完PVC可以把它删除,绑定在其上的PV会变成“released”并准备被回收。
Reclaiming
有三种回收策略:
* Retained:PV会保持原有数据并允许用户手动回收数据。
* Recycled:删除数据(rm -rf /thevolume/*)并允许PV被绑定到其它PVC。
* Deleted: 删除数据并删除PV。
PV
PV在k8s中被实现成插件,可以非常方便的扩展新的存储类型。已经被支持的类型包含所有主流的存储方案:
* GCEPersistentDisk
* AWSElasticBlockStore
* AzureFile
* AzureDisk
* FC (Fibre Channel)
* Flocker
* NFS
* iSCSI
* RBD (Ceph Block Device)
* CephFS
* Cinder (OpenStack block storage)
* Glusterfs
* VsphereVolume
* Quobyte Volumes
* HostPath (single node testing only – local storage is not supported in any way and WILL NOT WORK in a multi-node cluster)
* VMware Photon
PV 资源描述
每个PV里包含一个spec和status
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv0003
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
nfs:
path: /tmp
server: 172.17.0.2
Capacity
通过capacity给PV设置特定的大小。
Access Modes
k8s不会真正检查存储的访问模式或根据访问模式做访问限制,只是对真实存储的描述,最终的控制权在真实的存储端。目前支持三种访问模式:
* ReadWriteOnce – PV以 read-write 挂载到一个节点
* ReadOnlyMany – PV以read-only方式挂载到多个节点
* ReadWriteMany – PV以read-write方式挂载到多个节点
Reclaim
当前支持的回收策略:
* Retain – 允许用户手动回收
* Recycle – 删除PV上的数据 (“rm -rf /thevolume/*”)
* Delete – 删除PV
Phase
Available – PV可以被使用
Bound – PV被绑定到PVC
Released – 被绑定的PVC被删除,可以被Reclaim
Failed – 自动回收失败
PVC资源描述
每个PVC里包含一个spec和status,访问模式和请求的大小类似于PV。
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: myclaim
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 8Gi
Phase
- Pending – 等待可用的PV
- Bound – PV被绑定到PVC
- Lost – 找不到绑定的PV
实例
运行实例
通过命令行添加如下三个资源:
1. 添加PV
apiVersion: v1kind: PersistentVolumemetadata:name: pvspec:capacity:storage: 5GiaccessModes:- ReadWriteOnce- ReadWriteMany- ReadOnlyManynfs:path: /var/nfsshare/v1server: 172.16.51.58persistentVolumeReclaimPolicy: Delete
2. 添加PVC
apiVersion: v1kind: PersistentVolumeClaimmetadata:name: myclaimnamespace: testspec:accessModes:- ReadWriteOnceresources:requests: storage: 5Gi
3. 添加Pod
kind: PodapiVersion: v1metadata:name: mypodspec:containers:- name: myfrontend image: dockerfile/nginx volumeMounts: - mountPath: "/var/www/html" name: mypdvolumes:- name: mypd persistentVolumeClaim: claimName: myclaim
查看PV和PVC资源状态
当实例正常运行以后查看各个资源的状态
1. PV 状态变成Bound
...status:phase: Bound
2. PVC 状态变成Bound
...volumeName: pv3status:accessModes:- ReadWriteOnce- ReadWriteMany- ReadOnlyManycapacity:storage: 5Giphase: Bound
- kubetnetes 之存储 PV PVC
- Kubernetes中PV/PVC/StorageClass
- 工作日志——k8s pv&pvc
- 工作日志——k8s pv&pvc(二)
- kubeadm 安装kubetnetes(flannel)
- AIX存储LV PV VG
- AIX存储LV PV VG
- 操作系统之PV操作
- 操作系统之PV操作
- 操作系统之PV操作
- 操作系统之PV操作
- AIX 存储管理 LV PV VG PP
- 精解PV操作之信号量
- 线程同步之PV操作
- PV操作之独木桥问题
- 软考之PV操作
- 大唐之路(1)PE/PP/PS/PVC/PET之间的区别
- fr pvc 状态
- 如何用c++做一个编译器(一)
- 预告:Intel、Hulu、阿里、京东、携程等大数据实战直播
- 了解HTML
- 判断两个线段相交
- 盒子模型
- kubetnetes 之存储 PV PVC
- 程序员的“心”路历程
- Android进阶之少年来撸一把MAT工具
- 谈谈我对懒加载的一点看法 | Objective-C
- 不要问程序员什么是“对象”,也不要给他介绍“对象”
- 2017.10.1 atcoder TK1 D 思考记录
- Java反射机制的深入应用
- SSD 源码(1)
- 米扑科技助力公益:寻找失踪儿童一起回家