美丽之数据存储

  
Kubernetes如何管理存储资源。
  

首先我们会学习体积,以及Kubernetes如何通过体积为集群中的容器提供存储,然后我们会实践几种常用的卷类型并理解它们各自的应用场景,最后,我们会讨论Kubernetes如何通过持久卷和持久卷要求分离集群管理员与集群用户的职责,并实践体积的静态供给和动态供给。

     

本节我们讨论Kubernetes的存储模型体积,学习如何将各种持久化存储映射到容器。

  

我们经常会说:容器和豆荚是短暂的。
其含义是它们的生命周期可能很短,会被频繁地销毁和创建。容器销毁时,保存在容器内部文件系统中的数据都会被清除。

  

为了持久化保存容器的数据,可以使用Kubernetes体积。

  

体积的生命周期独立于容器,豆荚中的容器可能被销毁和重建,但体积会被保留。

  

本质上,Kubernetes体积是一个目录,这一点与码头工人卷类似。当体积被挂载到豆荚,豆荚中的所有容器都可以访问这个Volume.Kubernetes体积也支持多种后端类型,包括emptyDir, hostPath,全球教育运动持久的磁盘,AWS弹性块存储,NFS, Ceph等,完整列表可参考https://kubernetes.io/docs/concepts/storage/volumes/types-of-volumes

  

音量提供了对各种后台的抽象,容器在使用卷读写数据的时候不需要关心数据到底是存放在本地节点的文件系统中呢还是云硬盘上。对它来说,所有类型的体积都只是一个目录。

  

我们将从最简单的emptyDir开始学习Kubernetes体积。

   emptyDir   

emptyDir是最基础的卷类型。正如其名字所示,一个emptyDir体积是主机上的一个空目录。

  

emptyDir体积对于容器来说是持久的,对于Pod则不是。当仓从节点删除时,卷的内容也会被删除。但如果只是容器被销毁而Pod还在,则体积不受影响。

  

也就是说:emptyDir卷的生命周期与豆荚一致。

  

荚中的所有容器都可以共享体积,它们可以指定各自山的路径。下面通过例子来实践emptyDir,配置文件如下:

  
 <代码> apiVersion: v1
  :豆荚
  元数据:
  名称:生产国和消费国
  规范:
  容器:
  ——图片:busybox
  名称:生产商
  volumeMounts:
  - mountPath:/producer_dir
  名称:共享卷
  参数:
  ——/bin/sh
  - - - - - - - c
  ——回声“hello world”比;/producer_dir/你好;睡30000年
  
  ——图片:busybox
  名称:消费者
  volumeMounts:
  - mountPath:/consumer_dir
  名称:共享卷
  参数:
  ——/bin/sh
  - - - - - - - c
  -猫/consumer_dir/你好;睡30000年
  
  卷:
  ——名称:共享卷
  emptyDir:{}  
  

这里我们模拟了一个生产国和消费国场景.Pod有两个容器生产国和消费国,它们共享一个Volume.producer负责往卷中写数据,消费者则是读从卷取数据。

  

①文件最底部卷定义了一个emptyDir类型的卷共享卷。

  

②生产商容器将共享卷挂载到/producer_dir目录。

  

③生产商通过回声将数据写到文件你好里。

  

④消费者容器将共享卷挂载到/consumer_dir目录。

  

⑤消费者通过猫从文件你好读数据。

  

执行如下命令创建舱:

  
 <代码> # - f emptyDir.yaml kubectl适用
  豆荚创建/生产国和消费国
  
  # kubectl得到豆荚
  重启名字就绪状态的年龄
  生产国和消费国2/2运行0 87年代
  
  #消费者kubectl日志生产国和消费国
  hello world  
  

kubectl日志显示容器消费成功读到了制片人写入的数据,验证了两个容器共享emptyDir体积。

  

因为emptyDir是码头工人主机文件系统里的目录,其效果相当于执行了码头工人运行- v/producer_dir和码头工人运行- v/consumer_dir。通过码头工人检查查看容器的详细配置信息,我们发现两个容器都安装了同一个目录:

  
 <代码> {
  “类型”:“绑定”,
  “源”:“/var/lib/kubelet/豆荚/188767 a3-cf18-4bf9-a89b-b0c4cf4124bb/卷/kubernetes.io ~ empty-dir/共享卷”,
  “目的地”:“/consumer_dir”,
  “模式”:“”,
  “RW”:没错,
  “传播”:“rprivate”
  }
  
  “坐骑”:(
  {
  “类型”:“绑定”,
  “源”:“/var/lib/kubelet/豆荚/188767 a3-cf18-4bf9-a89b-b0c4cf4124bb/卷/kubernetes.io ~ empty-dir/共享卷”,
  “目的地”:“/producer_dir”,
  “模式”:“”,
  “RW”:没错,
  “传播”:“rprivate”
  },
  

美丽之数据存储