k8s-持久化存储

一、Volume

容器中的文件是临时存储在磁盘中的,容器被删除后文件也会被删除,多个容器在一个Pod中时,多个容器需要共享一些磁盘数据。因此k8s提供Volume解决数据共享和持久化问题。k8s的Volume是Pod的一部分,不能单独创建,需要在Pod中定义。

Pod中所有容器都能访问Volume,但是必须挂载,可以挂载到任意目录。如下:通过Volume实现容器资源共享。Volume的生命周期与挂载它的Pod相同,但是Volume里面的文件可能在Volume消失后仍然存在,这取决于Volume的类型。

二、Volume 类型

Kubernetes的Volume有非常多的类型,在实际使用中使用最多的类型如下。

  • emptyDir:一种简单的空目录,主要用于临时存储
  • hostPath:将主机某个目录挂载到容器中。
  • ConfigMap、Secret:特殊类型,将Kubernetes特定的对象类型挂载到Pod,在ConfigMapSecret章节介绍过如何将ConfigMap和Secret挂载到Volume中。
  • persistentVolumeClaim:PVC,Kubernetes的持久化存储类型,详细介绍请参考PV、PVC和StorageClass中会详细介绍。

2.1 EmptyDir

2.1.1 生命周期与用途

生命周期:与Pod一致,Pod删除后也跟着删除

用途:1、缓存空间,例如基于磁盘的归并排序。

2、为耗时较长的计算任务提供检查点,以便任务能从崩溃前状态恢复执行。

2.1.2 创建yaml

emptyDir实际是将Volume的内容写在Pod所在节点的磁盘上,另外emptyDir也可以设置存储介质为内存,如下所示,medium设置为Memory。

2.2 HostPath

生命周期:与节点相关。

应用场景:HostPath不适合跨节点数据存储。

三、PV、PVC和StorageClass

3.1 介绍

网络存储,一般云厂商可提供块存储、文件存储、对象存储三种。

  • PV:PV描述的是持久化存储卷 ,主要定义的是一个持久化存储在宿主机上的目录,比如一个NFS的挂载目录。
  • PVC:PVC描述的是Pod所希望使用的持久化存储的属性,比如,Volume存储的大小、可读写权限等等。

PV是实际存储数据目录,PVC是对数据存储的声明。Pod的Volume通过PVC绑定PV实现持久化存储。

3.2 CSI

Kubernetes提供了CSI接口(Container Storage Interface,容器存储接口),基于CSI这套接口,可以开发定制出CSI插件,从而支持特定的存储,达到解耦的目的。如Namespace:资源分组中看到的kube-system命名空间下everest-csi-controller和everest-csi-driver就是CCE开发存储控制器和驱动。有了这些驱动就可以使用EVS、SFS、OBS存储。

3.3 PV

PV是如何描述持久化存储,例如在SFS中创建了一个文件存储,这个文件存储ID为68e4a4fd-d759-444b-8265-20dc66c8c502,挂载地址为sfs-nas01.cn-north-4b.myhuaweicloud.com:/share-96314776。如果想在CCE中使用这个文件存储,则需要先创建一个PV来描述这个存储,如下所示。

NFS(Network File System)是一种分布式文件系统协议,它允许计算机之间共享文件和目录。在Kubernetes中,NFS可以作为持久化存储的一种解决方案,用于提供容器持久化存储

要在Kubernetes中配置NFS卷,你需要创建一个Persistent Volume Claim(PVC)来请求一个NFS卷,并在Pod的定义中使用VolumeMounts来挂载该卷

3.4 PVC

PVC可以绑定一个PV,示例如下。

创建PVC并查看。

3.5 StorageClass

简化PV的一种形式,使用StorageClass创建PVC。

NAS:是一种专门设计用于通过网络提供数据存储和管理的设备。

NAS和NFS区别:**NAS是一种设备,而NFS是一种协议。NAS可以支持多种协议,其中之一就是NFS。**NAS设备通常作为独立的存储解决方案,而NFS可以部署在服务器上以实现文件共享。

四、Pod中使用PVC

有了PVC后,在Pod中使用持久化存储就非常方便了,在Pod Template中的Volume直接关联PVC的名称,然后挂载到容器之中即可,如下所示。甚至在StatefulSet中还可以直接声明PVC,详情请参见有状态负载(StatefulSet)

相关推荐
moppol1 小时前
Serverless 架构入门与实战:AWS Lambda、Azure Functions、Cloudflare Workers 对比
云原生·serverless·aws
IvanCodes2 小时前
一、Docker:一场颠覆应用部署与运维的容器革命
docker·容器
栗子~~2 小时前
Milvus docker-compose 部署
docker·容器·milvus
没有名字的小羊3 小时前
2.安装Docker
运维·docker·容器
xiezhr3 小时前
50 个常用 Docker 命令
运维·docker·容器
退役小学生呀9 天前
三、kubectl使用详解
云原生·容器·kubernetes·k8s
被困者10 天前
Linux部署Sonic前后端(详细版)(腾讯云)
spring cloud·云原生·eureka
程序员小潘10 天前
Kubernetes多容器Pod实战
云原生·容器·kubernetes
进击的码码码码N10 天前
Docker 镜像加速
运维·docker·容器