k8s教程(Volume篇)-PV详解

这篇具有很好参考价值的文章主要介绍了k8s教程(Volume篇)-PV详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

01 引言

声明:本文为《Kubernetes权威指南:从Docker到Kubernetes实践全接触(第5版)》的读书笔记

在上一篇博客《k8s教程(Volume篇)-持久卷工作原理》,我们了解了持久卷的工作原理,本文继续深入学习PV。

02 PV详解

PV作为对存储资源的定义,主要涉及存储能力、访问模式、存储类型、回收策略、后端存储类型等关键信息的设置。

Kubernetes支持的PV类型如下:

类型 描述
AWSElasticBlockStore AWS公有云提供的Elastic Block Store
AzureFile Azure公有云提供的File
AzureDisk Azure公有云提供的Disk
CephFS 一种开源共享存储系统
Cinder OpenStack块存储系统
FC (Fibre Channel) 光纤存储设备
FlexVolume 一种插件式的存储机制
Flocker 一种开源共享存储系统
GCEPersistentDisk GCE公有云提供的Persistent Disk
Glusterfs 一种开源共享存储系统
HostPath 宿主机目录,仅用于单机测试
iSCSI iSCSI存储设备
Local 本地存储设备,从Kubernetes 1.7版本开始引入,到1.14版本时达到稳定版本,目前可以通过指定块设备(Block Device) 提供Local PV,或通过社区开发的sig-storage-local-static-provisioner插件管理Local PV的生命周期
NFS 网络文件系统
Portworx Volumes Portworx提供的存储服务
Quobyte Volumes Quobyte提供的存储服务
RBD (Ceph Block Device) Ceph块存储
ScaleIO Volumes DellEMC的存储设备
StorageOS StorageOS提供的存储服务
VsphereVolume VMWare提供的存储系统

2.1 示例配置详解

下面的示例声明的PV具有如下属性:5GiB存储空间,存储卷模式为 Filesystem,访问模式为ReadWriteOnce,存储类型为slow(要求在系统中己存在名称为“slow”的StorageClass),回收策略为Recycle,并且后端存储类型为nfs (设置了 NFS ServerIP地址和路径),同时设置了挂载选项 (mountOptions)

apiVersion: v1
kind: PersistentVolume
metadata:
	name: pv1
spec:
	capacity:
		Storage: 5Gi
	volumeMode: Filesystem 
	accessModes:
		- ReadwriteOnce
	persistentVolumeReclaimPolicy: Recycle
	storageClassName: slow 
	mountoptions:
		- hard
		- nfsvers=4.1
	nfs:
		path: /tmp
		server: 172.17.0.2

PV资源对象需要设置的关键配置参数如下:

2.1.1 存储容量 (Capacity)

描述存储的容量,目前仅支持对存储空间的设置 (storage=xx),未来可能加入IOPS、吞吐率等设置。

2.1.2 存储卷模式 (Volume Modes)

可以设置的选项包括Filesystem(文件系统,默认值)和Block(块设备):

  • 文件系统模式的PV将以目录(Directory)形式挂载到Pod内;
  • 块设备,如果设备是空的,Kubernetes则会自动在块设备上创建一个文件系统。支持块设备的存储类型会以裸设备 (Raw Block Device) 的形式挂载到容器内,并且不会创建任何文件系统,适用于需要直接操作裸设备(速度最快)的应用程序。

目前有以下PV类型支持裸块设备类型:AWSElasticBlockStore AzureDisk、 FC ( Fibre Channel ) 、 GCEPersistentDisk isCsI Local volume、 OpenStack Cinder、 RBD (Ceph Block Device) VsphereVolume

下面的示例使用了块设备的PV定义:

apiVersion: v1
kind: PersistentVolume 
metadata:
	name: block-pv
spec:
	capacity:
		storage: 10Gi 
	accessModes:
		- ReadWriteOnce
	persistentVolumeReclaimPolicy: Retain
	volumeMode: Block
	fd:
		targetWWNs: ["50060e801049cfd1"] 
		lun: 0
		readonly: false

2.1.3 访问模式 (Access Modes)

PV存储卷在挂载到宿主机系统上时,可以设置不同的访问模式 (Access Modes。PV支持哪些访问模式由存储提供商提供支持,例如NFS可以支持多个客户端同时读写(ReadWriteMany)模式,但一个特定的NFS PV也可以以只读(Read-only)模式导出到服务器上。

Kubernetes支持的访问模式如下:

  • ReadWriteOnce (RWO):读写权限,并且只能被单个Node挂载;
  • ReadOnlyMany (ROX):只读权限,允许被多个Node挂载;
  • ReadWriteMany(RWX):读写权限,允许被多个Node挂载。

某些PV可能支持多种访问模式,但PV在挂载时只能使用一种访问模式,多种访问模式不能同时生效。
k8s pv retain,# k8s,kubernetes,云原生,容器化技术

2.1.4 存储类别(Class)

PV可以设定其存储的类别,通过 storageClassName 参数指定一个 StorageClass 资源对象的名称。具有特定类别的PV只能与请求了该类别的PVC绑定。未设定类别的PV则只能与不请求任何类别的PVC绑定。

2.1.5 回收策略 (Reclaim Policy)

通过PV定义中的persistentVolumeReclaimPolicy字段进行设置,可选项如下:

  • Retain保留数据,需要手工处理
  • Recycle简单清除文件的操作(例如运行rm -rf /thevolume/*命令),只有 NFS 和 HostPath 两种类型的 PV支持 Recycle 策略。
  • DeletePV相连的后端存储完成Volume的删除操作,AWSElasticBlockStore、 GCEPersistentDis、 AzureDisk和Cinder类型的PV支持 Delete策略。

2.1.6 挂载选项 (Mount Options)

在将PV挂载到一个Node上时,根据后端存储的特点,可能需要设置额外的挂载选项的参数,这个可以在PV定义中的mountOptions字段进行设置。

下面的例子为对一个类型为gcePersistentDiskPV设置挂载选项的参数:

apiVersion: "V1"
kind: "PersistentVolume" 
metadata:
	name: gce-disk-1 
spec:
	capacity:
		storage: "10Gi" 
	accessModes:
		- "ReadwriteOnce" 
	mountoptions:
		- hard
		- nolock
		- nfsvers=3
	gcePersistentDisk:
		fsType: "ext4"
		pdName: "gce-disk-1"

目前,以下PV类型支持设置挂载选项:AWSElasticBlockStore AzureDisk、 AzureFile、 CephFS、 Cinder ( OpenStack block storage) GCEPersistentDisk、 Glusterfs、 NFS、 Quobyte Volumes、 RBD ( Ceph Block Device)、 StorageOS、 VsphereVolume、 iSCSI

注意Kubernetes不会对挂载选项进行验证,如果设置了错误的挂载选项, 则挂载将会失败

2.1.6 节点亲和性 (Node Affinity)

PV可以设置节点亲和性来限制只能通过某些Node访问Volume,可以在PV定义的nodeAffinity字段中进行设置。使用这些Volume的Pod将被调度到满足条件的 Node上

公有云提供的存储卷(如:AWSElasticBlockStore、GCEPersistentDisk、 AzureDisk等)都由公有云自动完成节点亲和性设置,无须用户手工设置。

对于 Local类型的PV,需要手工设置,例如:

apiVersion: v1
kind: PersistentVolume 
metadata:
	name: example-local-pv 
spec:
	capacity:
		storage: 5Gi 
	accessModes:
	- ReadwriteOnce
	persistentVolumeReclaimPolicy: Delete 
	storageclassName: local-storage 
	1ocal:
		path: /mnt/disks/ssal
	nodeAffinity:
		required:
		nodeSelectorTerms:
		- matchExpressions:
		  - key: kubernetes.io/hostname 
			operator: In 
			values:
			- my-node

某个PV在生命周期中可能处于以下4个阶段(Phase)之一:

  • Available:可用状态,还未与某个PVC绑定;
  • Bound:已与某个PVC绑定;
  • Released:与之绑定的PVC已被删除,但未完成资源回收,不能被其他 PVC使用;
  • Failed:自动资源回收失败。

在定义了PV资源之后,就需要通过定义PVC来使用PV资源了。

03 文末

本文主要讲解了PV的一些概念以及配置详解,希望能帮助到大家,谢谢大家的阅读,本文完!文章来源地址https://www.toymoban.com/news/detail-604697.html

到了这里,关于k8s教程(Volume篇)-PV详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【云原生】K8S存储卷:PV、PVC详解

    容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题。首先,当容器崩溃时,kubelet 会重启它,但是容器中的文件将丢失——容器以干净的状态(镜像最初的状态)重新启动。其次,在Pod中同时运行多个容器时,这些容器之间通常需要共

    2024年02月12日
    浏览(29)
  • Kubernetes(k8s)实战:深入详解Volume,详解k8s文件同步存储

    Volume官网:https://kubernetes.io/docs/concepts/storage/volumes/ On-disk files in a Container are ephemeral, which presents some problems for non-trivial applications when running in Containers. First, when a Container crashes, kubelet will restart it, but the files will be lost - the Container starts with a clean state. Second, when running Containers to

    2024年02月13日
    浏览(35)
  • K8S动态PV

    pv和pvc存储卷 存储卷: emptyDir容器内部,随着pod销毁,emptyDir也会消失,不能做数据持久化 hostPath:持久化存储数据,可以和节点上目录做挂载。pod被销毁了数据还在 NFS:一台机器,提供pod内容器所有的挂载点 pv和pvc: pvc就是pod发起得挂载得请求 pv:持久化存储得目录,Re

    2024年01月23日
    浏览(30)
  • K8s中的PV的介绍

    PV 的生命周期  PV 生命周期总共四个阶段 : Available(可用) —— 可用状态,尚未被 PVC 绑定。 Bound(已绑定 )—— 绑定状态,已经与某个 PVC 绑定。 Released(已释放) —— 与之绑定的 PVC 已经被删除,但资源尚未被集群回收。 Failed(失败 )—— 当删除 PVC 清理资源,自动

    2024年02月08日
    浏览(25)
  • k8s pv与pvc

    1.前言 PV 是 Kubernetes 集群中的一种资源对象,它代表着一块物理存储设备,例如磁盘、网络存储或云存储等。PV 可以被多个 Pod 共享,并且可以独立于 Pod 存在。PV 可以配置不同的访问模式 (Access Modes),例如 ReadWriteOnce 、 ReadOnlyMany 或 ReadWriteMany ,以确定 PV 可以被多少个 Pod 同

    2024年01月21日
    浏览(41)
  • k8s中强制删除pv

    K8s 集群内有一个已经不再使用的 PV,虽然已经删除了与其关联的 Pod 及 PVC,并对其执行了删除命令,但仍无法正常删除,一直处于 Terminating 状态:  解决办法: 1. 获取pv信息  2. 解除pv锁定  3. 解除pvc锁定 4. 【如果还没删掉】删除PV 5. 【如果还没删掉】删除PVC

    2024年02月15日
    浏览(45)
  • k8s存储卷-动态PV

    存储卷: EmptyDir:容器内部,随着pod销毁,emptyDir也会消失,不能做数据持久化 HostPath:持久化存储数据,可以和节点上目录做挂载,pod被销毁了数据还在 NFS:一台机器,提供pod发起的挂载的请求 PVC就是pid发起挂载的反请求: PV持久化存储的目录,ReadWriteMary           

    2024年01月17日
    浏览(27)
  • k8s--动态pvc和pv

    目录 前情回顾 动态pv 实验模拟 步骤一:在stor01节点上安装nfs,并配置nfs服务 接下来在matser01上配置 步骤二:创建 Service Account,用来管理 NFS Provisioner 在 k8s 集群中运行的权限和动态规则 步骤三:使用 Deployment 来创建 NFS Provisioner  部署nfs-provisioners插件: 步骤四:创建 St

    2024年01月24日
    浏览(41)
  • k8s ------存储卷(PV、PVC)

    目录 一:为什么需要存储卷? 二:emptyDir存储卷  ​三:hostPath存储卷  四:nfs共享存储卷   五:PVC 和 PV 1、PVC 和 PV介绍 2、PV和PVC之间的相互作用遵循的生命周期 3、PV 的4 种状态 4、一个PV从创建到销毁的具体流程 六:静态创建pv和pvc资源由pod运用过程 ​1、配置nfs存储 ​

    2024年02月13日
    浏览(37)
  • PV & PVC in K8s

    在Kubernetes中,PV(Persistent Volume)和PVC(Persistent Volume Claim)是用于管理持久化存储的重要资源对象。PV表示存储的实际资源,而PVC表示对PV的声明性要求。当应用程序需要使用持久化存储时,它可以通过创建PVC来请求和使用PV。以下是使用PV和PVC时的一些注意事项: 定义存储类

    2024年02月09日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包