卷
Container容器磁盘上的文件的生命周期是短暫的,这就使得在容器中运行重要应用时会出现一些问
题。首先,当容器崩溃时,kubelet会重启它,但是容器中的文件将丢失一一容器以干净的状态(镜像
最初的状态)重新启动。其次,在 pod 中同时运行多个容器时,这些容器之间通常需要共享又件。
Kubernetes中的volume抽象就很好的解决了这些问题
背景
Kubernetes中的卷有明确的寿命与封装它的Pod相同。所以,卷的生命比Pod中的所有容器都长,当这
个容器重启时数据仍然得以保存。当然,当Pod不再存在时,卷也将不复存在。也许更重要的是,
Kubernetes支持多种类型的卷,Pod可以同时使用任意数量的卷
卷的类型
官网
kubernetes 支持的类型:
cephfsConfigMap downwardAPI emptyDir fc(光纤通道) gcePersistentDisk
(deprecated) glusterfs hostPath
iscsi local nfs persistentVolumeClaim portworxVolume projected (投射) rbd
secret
emptyDir
当Pod分配给节点时,首先创建 emptyDir 卷,并且只要该Pod在该节点上运行,该卷会存在.正如在
卷的名字所述,它最初是空的。Pod中的容器可以读取和写入 emptyDir 卷中的相同文件,尽管该卷可
以挂载到个容器中的相同或不同路径上。当出于任何原因从点中除Pod时, emptyDir 中的数将被永久
删除。
< ! --注意:容器崩溃不会从节点中移除pod,因此emptyDir卷中的数据在容器崩溃时是安全的-->
emptyDir 的用法:
暂存空间,例如用于基于磁盘的合并排序
用作长时间计算崩溃恢复时的检查点
Web服务器容器提供数据时,保存内容管理器容器提取的文件
apiVersion: v1 kind: Pod metadata : name: test-pd spec: containers: - image: nginx name: test-container volumeMounts : - mountPath: /cache name: cache-volume volumes : - name: cache-volume emptyDir: {}
hostPath
hostPath 卷将主机节点的文件系统中的文件过目录挂载到集群中
hostPath 的用途如下:
运行需要访问Docker内部机制的容器;使用 hostPath 挂载 /var/lib/docker 路径
在容器中运行cAdvisor;使用 hostPath 的 /sys
允许 Pod 指定给定的 hostPath 在运行 Pod 之前是否应该存在,是否应该创建以及应该以什么方
式存在。
除了所需的 path 属性之外,用户还可以为 hostPath 卷指定 type 。
当使用这种类型的卷时要小心,因为:
HostPath 卷可能会暴露特权系统凭据(例如 Kubelet)或特权 API(例如容器运行时套接字),
可用于容器逃逸或攻击集群的其他部分。
具有相同配置(例如基于同一 PodTemplate 创建)的多个 Pod 会由于节点上文件的不同而在不
同节点上有不同的行为。
下层主机上创建的文件或目录只能由 root 用户写入。 你需要在特权容器中以 root 身份运行进
程,或者修改主机上的文件权限以便容器能够写入 hostPath 卷。
支持的 type 值如下: