kubernetes 持久化存储卷 ¶
存储卷介绍 ¶
pod 有生命周期,生命周期结束后 pod 里的数据会消失(如配置文件,业务数据等)。
解决: 我们需要将数据与pod分离,将数据放在专门的存储卷上
pod 在 k8s 集群的节点中是可以调度的, 如果 pod 挂了被调度到另一个节点,那么数据和 pod 的联系会中断。
解决: 所以我们需要与集群节点分离的存储系统才能实现数据持久化
简单来说: volume提供了在容器上挂载外部存储的能力
存储卷的分类 ¶
kubernetes 支持的存储卷类型非常丰富,使用下面的命令查看:
kubectl explain pod.spec.volumes 参考: https://kubernetes.io/docs/concepts/storage/
kubernetes 支持的存储卷列表如下:
- awsElasticBlockStore
- azureDisk
- azureFile
- cephfs
- cinder
- configMap
- csi
- downwardAPI
- emptyDir
- fc (fibre channel)
- flexVolume
- flocker
- gcePersistentDisk
- gitRepo (deprecated)
- glusterfs
- hostPath
- iscsi
- local
- nfs
- persistentVolumeClaim
- projected
- portworxVolume
- quobyte
- rbd
- scaleIO
- secret
- storageos
- vsphereVolume
进行简单的分类:
- 本地存储卷
- emptyDir pod删除,数据也会被清除, 用于数据的临时存储
- hostPath 宿主机目录映射(本地存储卷)
- 网络存储卷
- NAS类 nfs等
- SAN类 iscsi,FC等
- 分布式存储 glusterfs,cephfs,rbd,cinder等
- 云存储 aws,azurefile等
存储卷的选择 ¶
市面上的存储产品种类繁多, 但按应用角度主要分为三类:
- 文件存储 如:nfs,glusterfs,cephfs等
- 优点: 数据共享(多pod挂载可以同读同写)
- 缺点: 性能较差
- 块存储 如: iscsi,rbd等
- 优点: 性能相对于文件存储好
- 缺点: 不能实现数据共享(部分)
- 对象存储 如: ceph对象存储
- 优点: 性能好, 数据共享
- 缺点: 使用方式特殊,支持较少
面对kubernetes支持的形形色色的存储卷,如何选择成了难题。在选择存储时,我们要抓住核心需求:
- 数据是否需要持久性
- 数据可靠性 如存储集群节点是否有单点故障,数据是否有副本等
- 性能
- 扩展性 如是否能方便扩容,应对数据增长的需求
- 运维难度 存储的运维难度是比较高的,尽量选择稳定的开源方案或商业产品
- 成本
总之, 存储的选择是需要考虑很多因素的, 熟悉各类存储产品, 了解它们的优缺点,结合自身需求才能选择合适自己的。
下面是一个用于选择 Kubernetes 存储的流程图,帮助你根据不同的需求和场景选择合适的存储类型。
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px
A([开始]):::startend --> B{是否需要持久化存储?}:::decision
B -->|否| C[使用EmptyDir<br>适用于容器内临时存储,Pod删除数据丢失]:::process
B -->|是| D{是否需要跨节点共享存储?}:::decision
D -->|是| E{共享模式及性能需求}:::decision
D -->|否| F{性能要求如何?}:::decision
F -->|高| G[选择本地PV或块存储<br>如EBS/PD/RBD,适用于单节点高性能读写]:::process
F -->|中| H[选择网络块存储]:::process
F -->|低| I[选择文件存储<br>如CephFS/GlusterFS,适用于多节点文件共享且延迟敏感场景]:::process
E -->|多节点读写 - 高吞吐| J[对象存储<br>如S3/MinIO,适合海量非结构化数据存储]:::process
E -->|多节点读写 - 低延迟| K[文件存储<br>如CephFS/GlusterFS,适用于多节点文件共享且对延迟敏感场景]:::process
E -->|动态扩展| L[CSI兼容存储<br>方便存储资源动态管理,适合集群规模可变场景]:::process
C --> M([结束]):::startend
G --> M
H --> M
I --> M
J --> M
K --> M
L --> M