k8s教程(Volume篇)-PV详解

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 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在挂载时只能使用一种访问模式,多种访问模式不能同时生效。

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的一些概念以及配置详解,希望能帮助到大家,谢谢大家的阅读,本文完!

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
Kubernetes Shell Perl
【Azure K8S|AKS】进入AKS的POD中查看文件,例如PVC Volume Mounts使用情况
【Azure K8S|AKS】进入AKS的POD中查看文件,例如PVC Volume Mounts使用情况
226 0
|
9月前
|
人工智能 运维 Kubernetes
2025 超详细!Lens Kubernetes IDE 多平台下载安装与集群管理教程
Lens 是一款企业级 Kubernetes 可视化操作平台,2025版实现了三大技术革新:AI智能运维(异常检测准确率98.7%)、多云联邦管理(支持50+集群)和实时3D拓扑展示。本文介绍其安装环境、配置流程、核心功能及高阶技巧,帮助用户快速上手并解决常见问题。适用于 Windows、macOS 和 Ubuntu 系统,需满足最低配置要求并前置依赖组件如 kubectl 和 Helm。通过 Global Cluster Hub 实现多集群管理,AI辅助故障诊断提升运维效率,自定义监控看板和插件生态扩展提供更多功能。
|
存储 Kubernetes Go
【Azure K8S | AKS】在AKS集群中创建 PVC(PersistentVolumeClaim)和 PV(PersistentVolume) 示例
【Azure K8S | AKS】在AKS集群中创建 PVC(PersistentVolumeClaim)和 PV(PersistentVolume) 示例
214 0
|
11月前
|
存储 Kubernetes 安全
k8s存储类型:emptyDir、hostPath、nfs、pvc及存储类storageclass的静态/动态创建pv
Kubernetes提供了多种存储类型,满足不同的应用需求。`emptyDir`和 `hostPath`适用于临时和宿主机存储需求,`nfs`适用于共享存储,`PersistentVolumeClaim`和 `StorageClass`实现了持久存储的灵活管理。通过理解和配置这些存储类型,可以有效提升Kubernetes集群的存储管理能力。
545 13
|
存储 Kubernetes 测试技术
k8s使用pvc,pv,sc关联ceph集群
文章介绍了如何在Kubernetes中使用PersistentVolumeClaim (PVC)、PersistentVolume (PV) 和StorageClass (SC) 来关联Ceph集群,包括创建Ceph镜像、配置访问密钥、删除默认存储类、编写和应用资源清单、创建资源以及进行访问测试的步骤。同时,还提供了如何使用RBD动态存储类来关联Ceph集群的指南。
479 7
|
存储 Kubernetes 容器
在K8S中,PV的生命周期状态有哪些?
在K8S中,PV的生命周期状态有哪些?
|
存储 Kubernetes 调度
在K8S中,什么是PV和PVC?
在K8S中,什么是PV和PVC?
|
存储 缓存 Kubernetes
在K8S中,有状态服务与无状态服务都是怎么使用pv和pvc?(可以通过应用场景说明一下)
在K8S中,有状态服务与无状态服务都是怎么使用pv和pvc?(可以通过应用场景说明一下)
|
Kubernetes 关系型数据库 MySQL
k8s练习--通过NFS+PV+PVC+POD,部署一个MySQL服务,并将MySQL的数据进行持久化存储
本文档介绍了如何使用Kubernetes (K8s)、NFS、PersistentVolume (PV)、PersistentVolumeClaim (PVC)和Pod来部署并实现MySQL服务的数据持久化存储。Kubernetes是一个用于自动化部署、扩展和管理容器化应用的强大平台。NFS作为一种网络文件系统协议,能够使Kubernetes集群中的Pod跨节点访问共享文件。PV和PVC机制则提供了持久化的存储解决方案,确保数据即使在Pod生命周期结束后仍得以保留。
994 0
|
存储 运维 Kubernetes
在k8S中,生产环境的pv回收策略该如何选择?
在k8S中,生产环境的pv回收策略该如何选择?

推荐镜像

更多