Volume使用案例
EmptyDir
EmptyDir类型的volume创建于pod被调度到某个宿主机上的时候,而同一个pod内的容器都能读写EmptyDir的同一文件。一旦pod离开了这个宿主机,EmptyDir中的数据就会被永久删除,所以目前EmptyDir类型的volume主要用作临时空间,比如Web服务器写日志或者tmp文件需要的临时目录。
以下是pod资源描述文件中挂载EmptyDir类型的volume的一个例子:
apiVersion: v1
kind: Pod
metadata:
labels:
name: redis
role: master
name: redis-master
spec:
containers:
- name: master
image: redis:latest
env:
- name: MASTER
value: "true"
ports:
- containerPort: 6379
volumeMounts:
- mountPath: /redis-master-data
name: reids-data
volumes:
- name: redis-data
emptyDir:{}
注意,首先需要在pod内声明了一个名称为redis-data的volume.spec.volumes.name:redis-data
,然后才能在容器中挂载这个volume:
volumeMounts:
#mountPath即volume在容器内挂载的路径
- mountPath: /redis-master-data
#name字段必须与下面的volume名匹配
name: reids-data
按照以上配置文件创建了pod之后,可以在宿主机上的/var/lib/kubelet/pos/<poduid>/volumes/kubernetes~empty-dir
目录下找到名为redis-data
的目录。如果登陆到pod创建的docker容器中,可以看到名为redis-master-data
的目录。
HostDir
HostDir属性的volume使得对应的容器能够访问当前宿主机上的指定目录。一旦这个pod离开了宿主机,虽然HostDir的数据不会被永久删除,但是数据也不会迁移到新的宿主机上。
GCEPersistentDisk
GCEPersistentDisk在使用之前,用户必须先使用gcloud客户端工具或者GCE API创建一个PD(Persistent Disk)。这种volume最大好处在于,volume可以通过GCE进行管理、备份和迁移,从而实现volume一直保持可用。
NFS
NFS类型的volume允许一块现有的网络硬盘在同一个pod内的容器间共享。也就是NFS服务器对外暴露某个目录作为共享目录。