24|PersistentVolume:怎么解决数据持久化的难题?
什么是 PersistentVolume
- 深入了解
- 翻译
- 解释
- 总结
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归属地:北京924 - 文古老师,我个人感觉比较迷茫:k8s需要学习到什么程度才能上岗?学习云原生的线路可以说一下吗?
作者回复: 云原生的范围太广了,可以类比一下Linux,它是一个基础,有了这个基础,你才能继续在它上面做其他的事情,一定要结合自己的实际情况。
2022-08-18归属地:北京11 - 作草分茶老师,怎么没有storageClass的配置呀
作者回复: 这种简单的不用定义也可以
2022-08-18归属地:北京35 - 朱雯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归属地:北京24 - dao老师,想请问一下文稿的图是用什么软件画的?
编辑回复: Keynote,思维导图用的Xmind
2022-08-1823 - ppd0705跑个题: 题图是有什么关联吗?
编辑回复: 因为持久化 -> 所以挑了一幅持久到墙上的画……哈哈哈哈,主要就是最近的知识点好难找合适的头图,累了,这张凑合一下
2022-08-1823 - 拓山唉,痛苦死了, 我按照本文步骤,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归属地:上海22 - 极客酱酱为了省事,我没有在 /tmp 里建立名字是 host-10m-pv 的目录,最后发现他自己创建了
作者回复: 应该不行吧,没有目录pv不会创建成功。
2023-02-14归属地:四川62