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)

 

 

相关推荐

  1. K8S实现数据持久存储

    2024-02-01 11:50:01       29 阅读
  2. k8s持久存储(NFS-StorageClass)

    2024-02-01 11:50:01       34 阅读
  3. K8s: 持久存储之卷, NFS卷

    2024-02-01 11:50:01       11 阅读
  4. k8s持久存储之OpenEBS

    2024-02-01 11:50:01       9 阅读
  5. K8S NFS持久存储配置

    2024-02-01 11:50:01       27 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-01 11:50:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-01 11:50:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-01 11:50:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-01 11:50:01       18 阅读

热门阅读

  1. 大数据之 Spark 比 MapReduce 快的原因

    2024-02-01 11:50:01       31 阅读
  2. Springboot项目多数据源配置详细步骤

    2024-02-01 11:50:01       31 阅读
  3. 幻兽帕鲁服务器游戏版本怎么升级更新?

    2024-02-01 11:50:01       33 阅读
  4. 低代码开发在金融系统中的应用研究

    2024-02-01 11:50:01       42 阅读
  5. 【Linux 无网络状态下离线安装 MySQL】

    2024-02-01 11:50:01       37 阅读
  6. vue3兼容超宽屏、超窄屏、4K屏幕等等

    2024-02-01 11:50:01       30 阅读
  7. API横向越权修复之ID加密

    2024-02-01 11:50:01       25 阅读
  8. Flask 之 SQLAlchemy

    2024-02-01 11:50:01       33 阅读