kubernetes之存储卷

Kubernetes存储卷

默认情况下容器中的磁盘文件是非持久化的,容器中的磁盘的生命周期是短暂的,这就带来了一系列的问题:第一,当一个容器损坏之后,kubelet 会重启这个容器,但是文件会丢失-这个容器会是一个全新的状态;第二,当很多容器在同一Pod中运行的时候,很多时候需要数据文件的共享。Kubernete Volume解决了这个问题。

Kubernetes volume,拥有明确的生命周期,与所在的Pod的生命周期相同。Kubernetes volume独立与任何容器,与Pod相关,所以数据在重启的过程中还会保留,当然,如果这个Pod被删除了,那么这些数据也会被删除。更重要的是,Kubernetes volume 支持多种类型,任何容器都可以使用多个Kubernetes volume。

一个 volume 就是一个目录,可能包含一些数据,这些数据对pod中的所有容器都是可用的,这个目录怎么使用,什么类型,由什么组成都是由特殊的volume 类型决定的。要使用Volume,pod需要指定Volume的类型和内容(spec.volumes字段),和映射到容器的位置(spec.containers.volumeMounts字段)


存储卷常用类型

 非持久性存储
  •  emptyDir
  •  hostPath
 网络连接性存储
  •  SAN:iSCSI
  •  NFS:nfs,cfs
 分布式存储
  •  glusterfs、rbd、cephfs
 云端存储
  •  EBS、Azure Disk、阿里云、gitRepo

emptyDir存储卷

使用emptyDir,当Pod分配到Node上时,将会创建emptyDir,并且只要Node上的Pod一直运行,Volume就会一直存。当Pod(不管任何原因)从Node上被删除时,emptyDir也同时会删除,存储的数据也将永久删除。


实例:创建emptyDir存储卷

pod1基于此存储卷作为nginx的主目录;pod2向此存储卷目录写入东西

验证

在Pod中,容器1为主容器,容器2为辅助容器,辅助容器的任务就是每隔两秒钟在Pod的共享存储生成新的网页内容,而后主容器加载新的网页文件来响应业务访问,实现了在一个Pod中多容器之间的共享。但是删除Pod数据不会保留

hostPath存储卷

hostPath允许挂载Node(宿主机)上的文件系统到Pod里面去。如果Pod需要使用Node上的文件,可以使用hostPath。

 hostPath类型

行为
空字符串(默认)用于向后兼容,这意味着在安装hostPath卷之前不会执行任何检查。
DirectoryOrCreate 如果给定路径中不存在任何内容,则将根据需要创建一个空目录,权限设置为0755,与Kubelet具有相同的组和所有权。
Directory 目录必须存在于给定路径中
FileOrCreate 如果给定路径中不存在任何内容,则会根据需要创建一个空文件,权限设置为0644,与Kubelet具有相同的组和所有权。
File 文件必须存在于给定路径中
Socket UNIX套接字必须存在于给定路径中
CharDevice 字符设备必须存在于给定路径中
BlockDevice 块设备必须存在于给定路径中

实例:创建hostPath存储卷

创建存储卷,使用DirectoryOrCreate类型,node节点不存在会自动创建

检验:

验证存储卷功能

验证pod被删除再重建,只要node还在,存储卷就还在

共享存储NFS存储卷

NFS 是Network File System的缩写,即网络文件系统。Kubernetes中通过简单地配置就可以挂载NFS到Pod中,而NFS中的数据是可以永久保存的,同时NFS支持同时写操作。Pod被删除时,Volume被卸载,内容被保留。这就意味着NFS能够允许我们提前对数据进行处理,而且这些数据可以在Pod之间相互传递。

实例:NFS存储卷

准备主机搭建NFS服务器
修改hosts文件,添加解析nfs服务器

在k8s集群服务器,安装nfs-utils 工具

在nfs服务器上提供nfs服务

创建NFS存储卷

验证,访问服务成功

删除pod,再创建,也还存在数据

不常用的存储卷

  • gitRepo volume将git代码下拉到指定的容器路径中
  • glusterfs,允许将Glusterfs(一个开源网络文件系统)Volume安装到pod中。不同于emptyDir,Pod被删除时,Volume只是被卸载,内容被保留。味着glusterfs能够允许我们提前对数据进行处理,而且这些数据可以在Pod之间“切换”,必须先运行自己的GlusterFS安装,然后才能使用它。
  • RBD允许Rados Block Device格式的磁盘挂载到Pod中,同样的,当pod被删除的时候,rbd也仅仅是被卸载,内容保留,rbd能够允许我们提前对数据进行处理,而且这些数据可以在Pod之间“切换”
  • cephfs Volume可以将已经存在的CephFS Volume挂载到pod中,与emptyDir特点不同,pod被删除的时,cephfs仅被被卸载,内容保留。cephfs能够允许我们提前对数据进行处理,而且这些数据可以在Pod之间“切换”。

 

赞(0) 打赏
未经允许不得转载:洋先生's Blog » kubernetes之存储卷
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

致力于运维技术

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏