概述
什么是Valume
默认情况下容器的数据都是非持久化的,在容器消亡以后数据也跟着丢失,所以 Docker 提供了 Volume 机制以便将数据持久化存储。类似的,Kubernetes 提供了更强大的 Volume 机制和丰富的插件,解决了容器数据持久化和容器间共享数据的问题。
与 Docker 不同,Kubernetes Volume 的生命周期与 Pod 绑定。容器挂掉后 Kubelet 再次重启容器时,Volume 的数据依然还在,而 Pod 删除时,Volume 才会清理。数据是否丢失取决于具体的 Volume 类型,比如 emptyDir 的数据会丢失,而 PV 的数据则不会丢
Volume类型
目前,Kubernetes 支持以下 Volume 类型:
emptyDir、hostPath、hostPath、gcePersistentDisk、awsElasticBlockStore、nfs、iscsi、flocker、glusterfs、rbd、cephfs、gitRepo、secret、persistentVolumeClaim、downwardAPI、azureFileVolume、azureDisk、vsphereVolume、Quobyte、PortworxVolume、ScaleIO、FlexVolume、StorageOS、local
用的比较多的是:emptyDir、hostPath、nfs、glusterfs
本地数据卷
emptyDir
emptyDir表示空目录,会在宿主机上创建数据卷目录并挂在到容器中。
创建emptyDir类型的数据卷
下面通过yaml文件创建一个emptyDir类型的数据卷:
apiVersion: v1
kind: Pod
metadata:
name: redis-pod
spec:
containers:
- image: redis
name: redis
volumeMounts:
- mountPath: /cache
name: cache-volume
volumes:
- name: cache-volume
emptyDir: {}
这里会创建一个叫redis-pod的pod,使用redis镜像,然后创建了一个emptyDir类型的volume,并挂载到容器的/cache。注意在yaml文件中volumes的定义和containers的定义在同一级。
创建这个pod:
kubectl create -f empty.yaml
查看数据卷
进入到这个pod中,可以看到我们挂载的cache目录:
hostPath
可以将宿主机中的目录挂载到容器中。
创建hostPath类型的volume
通过yaml文件创建:
apiVersion: v1
kind: Pod
metadata:
name: test-pd
spec:
containers:
- image: nginx
name: test-container
volumeMounts: