一文读懂K8S的PV和PVC以及实践攻略

博客主页:StevenZeng学堂

本文专栏: 一文读懂Kubernetes | 一文读懂Harbor | 云原生安全实战指南



❤️ 摘要:作为当今最火的开源云原生系统,Kubernetes 是拥有一系列创新的组件和概念,其中最重要的组件和概念之一是 Kubernetes存储卷。Volume 组件是实现了数据持久性和共享的功能核心。本篇文章将详细介绍 Kubernetes(K8S)中的存储卷(Volume)机制,包括 Persistent Volume (PV)Persistent Volume Claim (PVC) 和后端存储的使用,为帮助大家更好地理解三者之间的关系。


目录

1 概念

1.1 什么是存储卷?

c="https://img2023.cnblogs.co
在容器化环境中,因为容器的生命周期是临时的,所以伴随产生的数据默认也是临时的。当容器重启或崩溃后,其内部数据将丢失。因此,Kubernetes 引入了存储卷(Volume),为应用提实现数据持久化的能力。

1.2 存储卷的类型与使用场景

存储类型 描述 适用场景
emptyDir Pod 生命周期内的临时存储 适合临时数据存储,如缓存、临时文件等。
hostPath 将宿主机上的文件系统目录挂载到Pod中。 适用于需要访问宿主机文件系统的场景,但可能会带来宿主机与Pod间的紧耦合问题,影响Pod的调度灵活性。
NFS 使用网络文件系统协议进行数据共享,适合多Pod之间共享数据。 多个 Pod 共享访问同一文件,适合数据共享、日志收集等。
块存储 直接使用云服务提供的块存储,支持动态创建和挂载。 适合在云上部署的生产环境,支持持久性和自动扩展。
分布式文件系统 这些分布式文件系统适合在高可用性和大规模集群中使用,提供更好的性能和冗余支持。 企业级应用、大数据处理等场景。

1.3 存储类(Storage Class)

在这里插入图片描述

在 Kubernetes 中,存储类是一个抽象,让用户无需提前准备 PV,而是根据需要由集群自动分配存储。StorageClass 决定了如何创建、配置和管理存储卷(如云盘、本地盘、NFS 等),实现按需动态分配

简单来说,StorageClass就是一个存储策略模板,用户通过它告诉 Kubernetes:“我需要的存储资源符合这些规则,请帮我动态生成合适的存储卷。”

1.4 PV(Persistent Volume)

PV 是集群中的一个存储资源,可以由管理员创建或使用存储类动态创建,并定义了存储容量、访问模式、后端存储等规则。

以下是PV的特性:

  • 生命周期独立于 Pod,不会因为 Pod 删除而消失。
  • PV 是集群级的资源,管理员负责创建。
  • 支持多种存储类型,如本地磁盘、NFS、Cephfs等。
  • 支持不同的访问模式,如 ReadWriteOnce(一次只能一个 Pod 写入)和 ReadWriteMany(多个 Pod 可同时写入)。

1.5 PVC (Persistent Volume Claim)

PVC 是用户对持久存储的请求声明,它规定了存储容量和访问权限等需求,并以一种抽象方法通知Kubernetes 集群,再由Kubernetes 自动匹配合适的 PV,并进行绑定。这样对用户屏蔽了后端存储,实现存储统一管理。

以下是PVC的特性:

  • PVC 解耦了应用与存储资源,使开发人员不需要直接处理具体的存储细节。
  • 如果没有符合条件的 PV,PVC 会处于“待绑定”状态,直到管理员创建满足条件的 PV。
  • PVC类似于 Pod, Pod 消耗节点资源(CPU和内存),PVC 消耗 PV 资源,通常与PV是1对1的关系。

1.6 动态卷(Dynamic Volume Provisioning)

PV由管理员提前创建提供给用户使用,称为静态卷

当用户在提交 PVC 时,K8S 根据 StorageClass 自动创建 PV,而不需要管理员提前准备好存储卷,称为动态卷

当然,如果要实现动态卷, 必须设置存储类,否则Kubernetes无法创建PV,如果PVC设置storageClassName字段为“”,也不会自动创建动态卷。

1.7 PV、PVC 与后端存储的关系

以“租房场景”来说明StorageClass、PV、PVC 与后端存储之间的关系。

  • 后端存储: 物业公司(如 NFS、AWS EBS 等)是所有房源的真正提供者。它们负责实际存储资源的供应,例如:云存储、NFS、本地磁盘。
  • StorageClass: 类似租房平台上的房型模板。它定义了不同租房规则,比如:标准单间(普通低成本存储)、豪华公寓(高性能大容量存储)、短租房(临时存储)。用户在提交租房申请(PVC)时,可以指定采用哪种房型模板(StorageClass)。根据这个模板,平台会自动生成实际的房源(PV)。
  • PV: 类似已经发布到平台上的“具体房子”。每个 PV 是由后端存储提供的资源,例如:某间20平方的单人房(块存储),或某间共享公寓(文件存储)。
  • PVC :租客提交的租房申请。它描述了租客希望租到的房屋类型和条件,例如:面积(容量)、入住规则(只允许一人入住,或带宠物共住)、房型要求(公寓、小区、城中村)。Kubernetes 会根据 PVC 提交的条件,自动匹配合适的 PV。如果没有符合条件的 PV,系统会根据 StorageClass 动态生成一个 PV,并绑定给 PVC。
    在这里插入图片描述

2 实战:PV 和 PVC 的部署攻略

❔ 说明:以NFS作为后端存储,验证PV和PVC相关策略。

2.1 实验准备

  • nfs server系统: Ubuntu22.04
  • Kubernetes环境: v1.29.7

2.2 部署NFS Server

安装nfs-server

apt install -y nfs-kernel-server nfs-common

配置nfs, 把数据目录挂着到ssd磁盘

sudo mkdir -p /s
Kubernetes (k8s)是一种用于自动化应用程序部署、扩展管理的开源容器编排平台。在k8s中,Pod是最小的可调度可管理的单位,也是应用程序的运行实例。 Pod是一组共享资源的容器集合,它们运行在同一个节点上,并共享相同的网络命名空间存储卷。一个Pod通常包含一个或个紧密相关的容器,它们共享相同的生命周期资源。这些容器之间可以通过本地主机上的localhost进行通信。 Pod的设计理念是将一组密切相关的容器放在同一个Pod中,以便它们能够轻松地共享资源,包括存储网络。Pod可以在Kubernetes上进行水平扩展,即通过增加Pod的数量来增加应用程序的容量吞吐量。 Pod是临时的短暂的,它可以在任何时候被创建、销毁或重新创建。这个设计使得应用程序变得弹性可伸缩,并支持故障恢复。当Pod被销毁时,Kubernetes会自动重新创建一个新的Pod来替代它,以保持应用程序的可用性。 Pod具有唯一的IP地址,并且可以由其他Pod或外部网络访问。它还可以指定一些元数据(如标签注释),以方便按需选择管理Pod。通过使用Pod模板,可以定义Pod的规范,包括容器映像、资源要求环境变量等。 总之,Pod是Kubernetes中的基本概念,它是一组紧密相关的容器的运行实例。Pod提供了容器之间共享资源的环境,并支持弹性扩展故障恢复。通过使用Pod,我们可以更高效地管理部署我们的应用程序。
评论 80
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

StevenZeng学堂

🎉 每笔打赏都是我分享的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值