Kubernetes 入门实战课
罗剑锋
Kong 高级工程师,Nginx/OpenResty 开源项目贡献者
19527 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 41 讲
Kubernetes 入门实战课
15
15
1.0x
00:00/00:00
登录|注册

24|PersistentVolume:怎么解决数据持久化的难题?

你好,我是 Chrono。
经过了“初级篇”和“中级篇”的学习,相信你对 Kubernetes 的认识已经比较全面了,那么在接下来的“高级篇”里,我们再进一步,探索 Kubernetes 更深层次的知识点和更高级的应用技巧。
今天就先从 PersistentVolume 讲起。
早在第 14 讲介绍 ConfigMap/Secret 的时候,我们就遇到过 Kubernetes 里的 Volume 存储卷的概念,它使用字段 volumesvolumeMounts,相当于是给 Pod 挂载了一个“虚拟盘”,把配置信息以文件的形式注入进 Pod 供进程使用。
不过,那个时候的 Volume 只能存放较少的数据,离真正的“虚拟盘”还差得很远。
今天我们就一起来了解 Volume 的高级用法,看看 Kubernetes 管理存储资源的 API 对象 PersistentVolume、PersistentVolumeClaim、StorageClass,然后使用本地磁盘来创建实际可用的存储卷。

什么是 PersistentVolume

在刚完成的“中级篇”实战中(22 讲),我们在 Kubernetes 集群里搭建了 WordPress 网站,但其中存在一个很严重的问题:Pod 没有持久化功能,导致 MariaDB 无法“永久”存储数据。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Kubernetes中的PersistentVolume(PV)是解决数据持久化难题的关键。PV是一个抽象概念,用于表示持久存储设备,隐藏了存储的底层实现,使得Pod无需关心存储的专业细节。PV通常由系统管理员维护,可以是各种存储设备和文件系统。为了更好地管理存储资源,Kubernetes引入了PersistentVolumeClaim(PVC)和StorageClass。PVC用于向Kubernetes申请存储资源,而StorageClass则抽象了特定类型的存储系统,帮助PVC找到合适的PV。通过YAML描述,可以创建不同类型的PV,如本机存储“HostPath”,并定义存储类型、访问模式、容量和存储位置等详细信息。这些概念和操作使得Kubernetes中的数据持久化变得更加灵活和可靠。 在文章中,我们学习了Kubernetes中应对持久化存储的解决方案,包括PV、PVC和StorageClass这三个API对象。PV是对存储设备的抽象,由系统管理员维护,需要描述清楚存储设备的类型、访问模式、容量等信息。PVC代表Pod向系统申请存储资源,声明对存储的要求,Kubernetes会查找最合适的PV然后绑定。StorageClass抽象特定类型的存储系统,归类分组PV对象,用来简化PV/PVC的绑定过程。HostPath是最简单的一种PV,数据存储在节点本地,速度快但不能跟随Pod迁移。 通过PV、PVC和StorageClass,Kubernetes实现了对存储资源的灵活管理,使得数据持久化变得更加可靠。读者可以通过本文了解Kubernetes中的持久化存储解决方案,以及PV、PVC和StorageClass的作用和使用方法。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Kubernetes 入门实战课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(30)

  • 最新
  • 精选
  • ppd0705
    如果目录没有创建, pod 会一直pending中。 我在master节点创建了目录 但 pod 没起来,查了半天才想起来pod 启动在worker节点,需要在worker 节点创建目录

    作者回复: 是的,没有目录,也就是相当于没有存储空间,pv就无法创建,这个是host-path的一个坑,只有自己趟过才能印象深刻。

    2022-08-18归属地:北京
    9
    24
  • 文古
    老师,我个人感觉比较迷茫:k8s需要学习到什么程度才能上岗?学习云原生的线路可以说一下吗?

    作者回复: 云原生的范围太广了,可以类比一下Linux,它是一个基础,有了这个基础,你才能继续在它上面做其他的事情,一定要结合自己的实际情况。

    2022-08-18归属地:北京
    11
  • 作草分茶
    老师,怎么没有storageClass的配置呀

    作者回复: 这种简单的不用定义也可以

    2022-08-18归属地:北京
    3
    5
  • 朱雯
    1. 对我来说,有点奇怪,和大家的答案是不太相同的,就是创建了pv和pvc,pod挂载之后,host-10m-pv这个文件夹自动创建了。 2. 这些概念相当复杂,除了生活实例理解外,并不理解系统中有什么好处。不过我想来想去,觉得storageclass是需要的.因为pv只进行硬件或者相关服务级别的抽象,pvc则只管请求,在数量比较多的pv的场景中,很容易选择到不想要的pv,比如1m请求了100m的,造成资源浪费,所以stroageclass是有必要存在的,但可以设计为一个选择器. 说说一些测试的操作。 1. 建立了一个pv 10m,一个pvc请求,5m。顺利请求到,这是和课程中一样的。 2. 建立两个pv,10m,两个pvc请求,都是5m,各自请求到一个,1和2的操作都使用了同同样的storageClassName。 3. 建立一个pv 10m,两个pvc请求,其中一个请求不到,显示为没有资源,除非再造一个,就可以被请求到。 4. 建了pv和pvc,先删除pv,不删除pvc,pv一直会显示terming状态,但始终不会消失,删除pvc后,删除成功。 感觉对这些概念有些理解,但更多的是迷糊、

    作者回复: 这也是为什么把PV/PVC放在高级篇的原因之一,它的确比较复杂,我们现在只要对它有个大概的了解就行了,真正要用好可能还是要与实际的工作去结合来学习,而且很多时候PV/PVC都已经是配置好的状态,除非是系统管理员,一般我们掌握了概念,直接使用就可以。

    2022-09-06归属地:北京
    2
    4
  • dao
    老师,想请问一下文稿的图是用什么软件画的?

    编辑回复: Keynote,思维导图用的Xmind

    2022-08-18
    2
    3
  • ppd0705
    跑个题: 题图是有什么关联吗?

    编辑回复: 因为持久化 -> 所以挑了一幅持久到墙上的画……哈哈哈哈,主要就是最近的知识点好难找合适的头图,累了,这张凑合一下

    2022-08-18
    2
    3
  • 拓山
    唉,痛苦死了, 我按照本文步骤,pv、pvc、pod都成功了,但挂载的目录里 始终找不到生成的文件,不知道问题出在哪里,痛苦查了一天多时间。 我是两台ecs机器做操作,我一直是在master节点的机器上找来找去,就是找不到。 结果无意间发现,在一台work节点的机器上找到了挂载的目录。 老师,我的问题是在使用kubectl get all 查看pod时,我怎么知道 这个pod是被分配到哪台机器上呢? 如果我早点知道,就不用这么瞎折腾了,多谢。

    作者回复: 用kubectl get pod -o wide。

    2023-05-13归属地:浙江
    2
  • 范飞扬
    列一些常用的storageClassName会更好理解: chatGPT的回答: 以下是一些常见的 Kubernetes 存储类(StorageClass)的名称: standard:标准存储类,用于提供基本的存储能力,适用于一般用途。 gp2:亚马逊 Web 服务(AWS)上的一种存储类型,适用于需要快速访问和较高性能的应用程序。 rbd:Ceph 存储系统的一种存储类型,用于提供分布式块存储。 glusterfs:GlusterFS 分布式文件系统的一种存储类型,用于提供高可用性和可扩展性的存储解决方案。 nfs:网络文件系统(NFS)的一种存储类型,用于提供共享文件存储。 azure-disk:Azure 上的一种存储类型,适用于需要高可用性和可扩展性的应用程序。 local-storage:本地存储的一种存储类型,用于将本地磁盘挂载到 Kubernetes Pod 中。 请注意,这些存储类型的可用性可能因为云服务提供商的不同而有所不同。此外,还可以创建自定义存储类型来满足特定的存储需求。

    作者回复: 紧跟科技最前沿,great。

    2023-02-25归属地:上海
    2
  • 范飞扬
    “Kubernetes 里定义存储容量使用的是国际标准,我们日常习惯使用的 KB/MB/GB 的基数是 1024,要写成 Ki/Mi/Gi,一定要小心不要写错了,否则单位不一致实际容量就会对不上。” Ki/Mi/Gi什么意思? chatGPT的回答: Ki/Mi/Gi 是二进制单位前缀,用于表示存储容量。它们的含义如下: 1 KiB (kibibyte) = 2^10 bytes = 1,024 bytes 1 MiB (mebibyte) = 2^20 bytes = 1,048,576 bytes 1 GiB (gibibyte) = 2^30 bytes = 1,073,741,824 bytes 这些单位前缀在计算机领域中用于准确地表示存储容量。与之相对的是基于十进制的单位前缀,如 KB/MB/GB,它们使用的是 10 的幂,而不是 2 的幂。因此,1 KB 实际上是 1,000 bytes,1 MB 是 1,000,000 bytes,1 GB 是 1,000,000,000 bytes。 在 Kubernetes 中,使用 Ki/Mi/Gi 单位来定义存储容量可以避免使用基于十进制的单位前缀时可能引起的容量计算不准确的问题。

    作者回复: Ki/Mi/Gi 是国际标准定义的单位名称,有点怪,习惯就好了。

    2023-02-17归属地:上海
    2
    2
  • 极客酱酱
    为了省事,我没有在 /tmp 里建立名字是 host-10m-pv 的目录,最后发现他自己创建了

    作者回复: 应该不行吧,没有目录pv不会创建成功。

    2023-02-14归属地:四川
    6
    2
收起评论
显示
设置
留言
30
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部