本文内容均来自个人笔记并重新梳理,如有错误欢迎指正!
如果对您有帮助,烦请点赞、关注、转发、订阅专栏!
专栏订阅入口
Linux 专栏 | Docker 专栏 | Kubernetes 专栏
往期精彩文章
【Docker】(全网首发)Kylin V10 下 MySQL 容器内存占用异常的解决方法
目录
一、基本介绍
在 Kubernetes 中,存储是实现集群数据持久化的关键,它允许用户在 Kubernetes 环境中存储、管理和访问数据。
二、相关概念
-
PersistentVolume(PV):在 Kubernetes 中,PV(持久化卷)是一种与存储相关的资源对象,可以定义存储容量、访问模式、回收策略、存储插件等信息。PV 具有独立的生命周期,不会随着 Pod 的销毁被删除
-
PersistentVolumeClaim(PVC):在 Kubernetes 中,PVC(持久化卷声明)是一种与存储相关的资源对象,可以定义申请容量、访问模式等内容。PVC 与 PV 之间的关系是请求与分配的关系
-
StorageClass(SC):在 Kubernetes 中,SC(存储类)是一种与存储相关的资源对象,可以根据 PVC 的申请动态创建 PV 对象
-
Volumes:在 Kubernetes 中,Volumes 可以定义 Pod 内部的存储空间
-
Kubernetes 存储供应模式:
-
静态模式:由集群管理员预先手动创建 PV 对象,并与符合条件的 PVC 对象绑定
-
动态模式:StorageClass 会根据 PVC 对象的申请,动态创建 PV 对象并与该 PVC 对象绑定
-
三、存储分类
从 Pod Volumes 支持类型的维度看,Kubernetes 的存储大致可以分为:
- 临时存储
- EmptyDir:可以为处于同一 Pod 内的容器提供数据共享能力(如缓存数据),这些数据临时存储在 Pod 所在集群节点上自动分配的空目录中,会随着 Pod 的销毁被删除
- 持久存储
从 PersistentVolume 插件支持类型的维度看,Kubernetes 的存储大致可以分为:
- 本地存储:使用集群节点上指定的目录来模拟网络附加存储,但只适用于单节点集群或 Pod 与集群某个节点绑定的场景,包含 HostPath、Local 两种方式
- 外置存储
- NFS 存储:使用集群以外的 NFS 存储服务作为存储后端,是最常用的一种方式
- CSI 存储:使用集群以外满足 CSI 标准的存储服务作为存储后端。CSI 插件具有解耦存储系统和容器编排平台、插件化架构以及动态卷生命周期管理的特点
- 云存储:使用集群以外云服务提供商的块存储服务作为存储后端,如 AWS EBS、Azure Disk 和 Google Cloud Persistent Disk 等
- 分布式存储:使用集群以外具有分布式架构的存储服务作为存储后端,支持高可用性和容错能力,如 Ceph、GlusterFS 等
四、存储挂载(示例)
bash
# deployment.yaml
...
spec:
containers:
- name: demo-container
image: demo-image:latest
ports:
- containerPort: 80
volumeMounts:
- name: demo-empty
mountPath: /data_tmp
- name: demo-host
mountPath: /data_host
- name: demo-pvc
mountPath: /data_pvc
- name: demo-configmap
mountPath: /etc/configmap.conf
- name: demo-secret
mountPath: /etc/secret.conf
volumes:
- name: demo-empty # EmptyDir 类型
emptyDir: {}
- name: demo-host # HostPath 类型
hostPath:
path: /data
- name: demo-pvc # PVC 类型
persistentVolumeClaim:
claimName: demo-pvc
- name: demo-configmap # ConfigMap 类型
configMap:
name: demo-configmap
- name: demo-secret # Secret 类型
secret:
secretName: demo-secret
...