存储-Volume

今天学习下k8s中的volume卷,与docker中的volume有些区别

1、为什么要有volume

  • 因为容器内的文件的生命周期是短暂的,容器被销毁时,容器内的文件也就随之消失了
  • 当pod内存在多个容器时,容器间需要能共享文件,需要用到volume

2、volume的生命周期,好处有哪些

  • volume的生命周期与pod相同,所以当容器被销毁,而pod存在时,volume中的数据是不会丢失的;但是pod不存在时,volume也将消失。
  • volume的类型有很多种,而且同一个pod可以同时使用多种类型的卷
  • 卷的核心是目录,可能会包含一些数据,可通过容器访问,卷的形成取决于卷的类型

3、怎么使用

  • 1.在pod中定义卷类型(spec.volumes)
  • 2.在容器中指定挂载卷(spec.containers.volumeMounts)

4、常用卷类型

4.1 emptyDir

pod在被分配到节点时会先创建 emptyDir,emptyDir 就是一个空目录,Pod中的容器可以读取和写入 emptyDir中相同的文件,哪怕是容器中挂载的路径不相同。pod一旦删除,emptyDir中的数据就会永久删除。

emptyDir 的用法有:

暂存空间,例如用于基于磁盘的合并排序
用作长时间计算崩溃恢复时的检查点
Web服务器容器提供数据时,保存内容管理器容器提取的文件

举例:
podA 中有两个容器 a、b

  • a中挂载了一个emptyDir(name:log)在容器a的 /Data/log-a 下

  • b中挂载了一个emptyDir(name:log)在容器b的 /Data/log-b 下

  • a、b都往各自的log-a\log-b 下写入一个test.log文件,那么他们将写入同一个文件,因为他们挂载的是同一个 emptyDir

4.2 hostPath

hostPath 可以将主机节点的 文件或目录挂载到集群中,这样容器就可以访问宿主机上的特定目录了
它主要有两个属性:

  1. path ,指定要挂载的路径
  2. type 指定hostPath的行为

type类型:

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

注意

  1. 由于每个节点上的文件都不同,具有相同配置的 pod 在不同节点上的行为可能会有所不同
  2. 当 Kubernetes 按照计划添加资源感知调度时,将无法考虑 hostPath 使用的资源
  3. 在底层主机上创建的文件或目录只能由 root 写入。您需要在特权容器中以 root 身份运行进程,或修改主机上的文件权限以便写入 hostPath 卷

参考: https://jimmysong.io/kubernetes-handbook/concepts/volume.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值