本文描述了Kubernetes中Volumes的使用情况,建议在阅读本文前,首先熟悉pods。 Volume是一个能够被容器访问的目录,它可能还会包含一些数据。Kubernetes Volumes与Docker Volumes类似,但并不完全相同。 一个Pod会在它的ContainerManifest 属性中指明其容器需要哪些Volumes。 容器中的进程可见的文件系统视图由两个源组成:一个单独的Docker image和零个或多个Volumes。Docker image位于文件层次结构的根部。所有的Volumes都挂载在Docker image的节点上。Volumes不能挂载在其他的Volumes上,也没有连接其他Volumes的硬链接。Pod中的每个容器都单独地指明了其image挂载的Volume。这会通过VolumeMount属性来确定。 Volume的存储介质(如硬盘、固态硬盘或内存)是由保存kubelet根目录(一般为/var/lib/kubelet)的文件系统的存储介质决定的。一个EmptyDir或者PersistentDir类型的Volume可以使用多少空间是没有限制的,同时在容器或者pods间也不存在隔离。 将来,我们预计一个Volume将能够通过使用资源规范来请求一个确定大小的空间;同时,对于包含多种存储介质的集群,将可以选择Volume使用的介质类型。 Kubernetes现在支持三种类型的Volumes,但将来会支持更多的类型。 EmptyDir 一个EmptyDir Volume是在Pod绑定到Node时创建的。当第一条容器命令启动时,它的初始状态为空。在同一个Pod上的容器可以读写EmptyDir中的相同文件。当一个Pod被解绑,在EmptyDir中的数据将永久性删除。 EmptyDir的一些用途如下:
Volumes
资源
Volumes的类型
目前,用户无法控制EmptyDir使用的介质种类。如果Kubelet的配置是使用硬盘,那么所有的EmptyDirectories都将创建在该硬盘上。将来,可以预料的是Pods将可以控制EmptyDir是位于硬盘、固态硬盘还是基于内存的tmpfs上。
HostDir
一个HostDir的Volume将可以访问当前宿主机节点上的文件。
HostDir的一些用途如下:
当使用该类型的Volume时,需要格外小心,因为:
GCEPersistentDisk
重要提示:必须创建并格式化一个永久磁盘(PD)才能使用GCEPersistentDisk。
拥有GCEPersistentDisk的Volume可以访问谷歌计算引擎(Google Compute Engine, GCE)的永久磁盘上的文件。
使用GCEPersistentDisk时,有一些限制条件:
创建一个PD
在你能够在pod上使用GCE PD前,你需要先创建并格式化它。
我们正在积极努力得使这个过程更加精简容易。
DISK_NAME=my-data-disk
DISK_SIZE=500GB
ZONE=us-central1-a
gcloud compute disks create –size=$DISK_SIZE –zone=$ZONE $DISK_NAME
gcloud compute instances attach-disk –zone=$ZONE –disk=$DISK_NAME –device-name temp-data kubernetes-master
gcloud compute ssh –zone=$ZONE kubernetes-master /
–command “sudo mkdir /mnt/tmp && sudo /usr/share/google/safe_format_and_mount /dev/disk/by-id/google-temp-data /mnt/tmp”
gcloud compute instances detach-disk –zone=$ZONE –disk $DISK_NAME kubernetes-master
GCE PD的配置实例:
apiVersion: v1beta1
desiredState:
manifest:
containers:
– image: kubernetes/pause
name: testpd
volumeMounts:
– mountPath: “/testpd”
name: “testpd”
id: testpd
version: v1beta1
volumes:
– name: testpd
source:
persistentDisk:
# This GCE PD must already exist and be formatted ext4
pdName: test
fsType: ext4
id: testpd
kind: Pod
Kubernetes的Volumes使用实例-Walkthrough
对于永久存储,首先,我们知道容器的文件系统与容器有着同等的生命周期,所以,我们还需要有永久存储。为了实现这个目的,你需要声明一个Volume,把它作为Pod的一部分,同时将它挂载到一个容器上。
apiVersion: v1beta1
kind: Pod
id: storage
desiredState:
manifest:
version: v1beta1
id: storage
containers:
– name: redis
image: dockerfile/redis
volumeMounts:
# name must match the volume name below
– name: redis-persistent-storage
# mount path within the container
mountPath: /data/redis
volumes:
– name: redis-persistent-storage
source:
emptyDir: {}
那么,我们该如何做呢?我们为Pod增加一个Volume:
…
volumes:
– name: redis-persistent-storage
source:
emptyDir: {}
…
然后,我们为该Volume在容器中增加一个对应的挂载路径:
…
volumeMounts:
# name must match the volume name below
– name: redis-persistent-storage
# mount path within the container
mountPath: /data/redis
…
在Kubernetes中, EmptyDir Volumes在Pod的生命周期内一直可用,该周期比任何一个容器的生命周期都长,所以即使容器失效并重启,我们的永久存储将仍然可用。
如果你希望挂载一个已经存在于文件系统的目录(例如/var/logs),你可以直接使用HostDir。
原文链接:Kubernetes Volumes(编译/仇臣 审校/张磊 责编/周小璐)
相关链接:Google Kubernetes设计文档之安全篇
译者简介:仇臣,浙江大学SEL实验室硕士研究生,目前在云平台团队从事科研和开发工作。浙大团队对PaaS,Docker,大数据和主流开源云计算技术有深入的研究和二次开发经验,团队现将部分技术文章贡献出来,希望能对读者有所帮助。
如需要了解更多Docker相关的资讯或是技术文档可访问Docker技术社区;如有更多的疑问请在Dcoker技术论坛提出,我们会邀请专家回答。ImapBox Docker技术交流QQ群:303806405。
本网页所有文字内容由 imapbox邮箱云存储,邮箱网盘, iurlBox网页地址收藏管理器 下载并得到。
ImapBox 邮箱网盘 工具地址: https://www.imapbox.com/download/ImapBox.5.5.1_Build20141205_CHS_Bit32.exe
PC6下载站地址:PC6下载站分流下载
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox 网页视频 工具地址: https://www.imapbox.com/download/ImovieBox4.7.0_Build20141115_CHS.exe
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算