首页 » 翻译 » Kubernetes » 正文

Kubernetes系列翻译06 Volumes in Kubernetes 第二部分

原文地址:http://kubernetes.io/v1.0/docs/user-guide/volumes.html

emptyDir
一个emptyDir 第一次创建是在一个pod被指定到具体node的时候,并且会一直存在在pod的生命周期当中,正如它的名字一样,它初始化是一个空的目录,pod中的容器都可以读写这个目录,这个目录可以被挂在到各个容器相同或者不相同的的路径下。当一个pod因为任何原因被移除的时候,这些数据会被永久删除。注意:一个容器崩溃了不会导致数据的丢失,因为容器的崩溃并不移除pod.

emptyDir 磁盘的作用:

scratch space, such as for a disk-based mergesortcw
checkpointing a long computation for recovery from crashes
holding files that a content-manager container fetches while a webserver container serves the data

普通空间,基于磁盘的数据存储
作为从崩溃中恢复的备份点
存储那些那些需要长久保存的数据,例web服务中的数据

默认的,emptyDir 磁盘会存储在主机所使用的媒介上,可能是SSD,或者网络硬盘,这主要取决于你的环境。当然,我们也可以将emptyDir.medium的值设置为Memory来告诉Kubernetes 来挂在一个基于内存的目录tmpfs,因为
tmpfs速度会比硬盘块度了,但是,当主机重启的时候所有的数据都会丢失

hostPath
一个hostPath类型的磁盘就是挂在了主机的一个文件或者目录,这个功能可能不是那么常用,但是这个功能提供了一个很强大的突破口对于某些应用来说

例如,如下情况我们旧可能需要用到hostPath

某些应用需要用到docker的内部文件,这个时候只需要挂在本机的/var/lib/docker作为hostPath
在容器中运行cAdvisor,这个时候挂在/dev/cgroups

当我们使用hostPath的时候要注意如下内容
从模版文件中创建的pod可能会因为主机上文件夹目录的不同而导致一些问题
Kubernetes 规划一些资源相关的维护的时候,它旧不能根据此种类型的资源进行判断(这句没太看懂阿,这个应该得先要知道具体的维护类型才好….)

gcePersistentDisk
gcePersistentDisk 是指挂在一个特殊GCE 持久化磁盘 到我们的pod中,和emptyDir不同的是,emptyDir会被删除当我们的Pod被删除的时候,但是gcePersistentDisk不会被删除,仅仅是解除挂在状态而已,这就意味着PD能够允许我们提前对数据进行处理,而且这些数据可以在Pod之间相互传递

重要的是:我们需要先通过GCE api 或者图形操作界面 创建一个PD,这是你使用它的前提

gcePersistentDisk有一些限制:
节点必须使用的GCE VMs
PD必须和节点,项目在统一个区域

一个PD的特点是可以以只读的方式挂在到多个地方,这旧意味着我们可以先收集一些数据,然后共享给任意多个pod使用,不幸的,PD同时只能被一个pod以读写的方式挂在。

在ReplicationController管理的pod上使用pd会失败,除非是以只读方式,或者数量是1或者0(因为读写同时只能是1)

如何创建一个pd

gcloud compute disks create –size=500GB –zone=us-central1-a my-data-disk

pod的例子

apiVersion: v1
kind: Pod
metadata:
name: test-pd
spec:
containers:
– image: gcr.io/google_containers/test-webserver
name: test-container
volumeMounts:
– mountPath: /test-pd
name: test-volume
volumes:
– name: test-volume
# This GCE PD must already exist.
gcePersistentDisk:
pdName: my-data-disk
fsType: ext4

发表评论